Elasticsearch 於 2010 年推出,是首款專為快速查詢資料以顯示在分析或大數據輸出中的分散式搜尋引擎之一。當時,越來越多的企業正在累積大量資料,但傳統的資料庫引擎無法跟上腳步。Elasticsearch 作為向量資料庫推出,能夠儲存結構化和非結構化資料。當企業分析超過 TB 的資料導致效能問題時,這是大數據索引和更快速查詢的首例大躍進。
什麼是 Elasticsearch?
Elasticsearch 是一個資料儲存區,用於將資料拉在一起,並透過 API 進行搜尋。它以 Apache Lucene 為基礎,Apache Lucene 是一種索引和儲存服務,能夠分散資料。每個儲存器都擁有自己的資料,但儲存器彼此分開,以跨節點分配資料。Elasticsearch 將所有資料集結在一起,並提供 API 供開發人員查詢資料。有了 API,管理員可以為特定使用者設定權限,以進一步保護資料,並僅授權使用者存取特定資料。
開發人員不限於結構化或非結構化資料。Elasticsearch 能讓使用者同時擷取結構化和非結構化資料,但它會在分散式資料區塊中查詢資料,就像儲存系統是一個大型資料庫一樣。Elasticsearch 處理資料的方式比標準資料庫引擎快得多,因此最適合具有分析、搜尋功能的應用程式,或是網路流量分析。
Elasticsearch 架構的核心元件
Elasticsearch 的第一個核心元件是節點。節點是儲存資料的伺服器或裝置。叢集由一系列節點組成。節點和叢集可以分散到資料中心進行備援,但分散式資料可以改善資料查詢的效能。Elasticsearch 是一個向量資料庫,但它將資料儲存為文件。文件是儲存非結構化資料的實體,但結構化資料也可以儲存在其中。
資料被跨節點縮減。窗簾是資料的一部分,可將大型資料儲存區分割為較小的部分,因此更容易分配,並同時查詢將資料在前端應用程式的結果集中在一起。Logstash 作為資料管道使用,以原始形式擷取資料,並將其轉換為可用形式。
Elasticsearch 也擁有 API,是資料閘道。開發人員必須通過 API 驗證,並以金鑰進行查詢。API 可控制資料的存取,以及開發人員查詢資料的方式。擁有 API 也會掩蓋後端架構並加以保護,讓開發人員不熟悉 Apache Lucene 和其他元件的運作方式。
節點和叢集
叢集是一組節點,但節點在叢集中具有自己的特定角色。一般而言,主節點會控制叢集。主節點可以建立或刪除索引,並追蹤參與叢集的其他節點。每個叢集都有一個主節點。
資料節點會儲存資料。任何資料操作或變更皆由資料節點負責。當您彙總資料時,會新增至資料節點。搜尋功能也會在資料節點上進行。
將節點協調視為控制到正確節點流量的閘道。協調節點會根據其目的地,將請求傳送至主節點或資料節點。例如,當搜尋傳送至叢集時,協調節點會管理其請求。
Elasticsearch 擁有轉型與移動資料的管道。輸入節點負責管理文件,並加以轉換以建立索引。Elasticsearch 建議在資料傳輸量大的環境中,要有一個獨立於主節點和資料節點的輸入節點。
符合遠端條件的節點會將請求傳送至 Elasticsearch 系統中的其他叢集。搜尋查詢可以使用具有遠端合格節點的跨叢集功能來尋找資料。跨叢集複寫資料也是遠端合格節點的責任。
窗簾與複寫
快速搜尋和查詢需要索引。索引是資料儲存組織資料的方式,能讓搜尋更快速。在 Elasticsearch 中,每個索引都由許多碎片組成。窗簾儲存在 Elasticsearch 將它們分散到叢集的節點上,以加快處理速度。Shards 持有一份資料副本,但 Elasticsearch 可以同時搜尋多個資料。
故障轉移和容錯是必要的備援,因此抄本會處理碎片副本。複寫儲存在不同的節點上,這樣一來,當一個節點故障時,資料就不會遺失。如果節點故障,Elasticsearch 將能夠存取不同節點上的複寫資料。
Elasticsearch 中的資料流
Elasticsearch 為開發人員提供 API 來傳送查詢。API 可保護開發人員免於後端的複雜性。如前所述,後端由多個元件組成,包括碎片、節點、索引和複本。資料流不是強迫開發人員管理 Elasticsearch 研究人員,而是從 API 查詢開始 API 。
API 會先將查詢傳送給協調者。協調員將其傳送至碎片所在的適當節點。查詢也可以被傳送至多個資料塊,每個資料塊都有自己的資料集。路線安排由協調員完成,由協調員決定查詢的正確碎片。
碎片收集文件後,文件索引會送回協調員。有幾張資料被送回協調員時,協調員會整理索引、合併並排序。索引經過排序後,協調員就會從碎片中擷取實際文件。資料擷取後,會透過 API 傳回應用程式。
最佳化 Elasticsearch 架構的最佳做法
Elasticsearch 比一般資料庫引擎更為複雜,因此要將系統最佳化,需要不同的方法。您首先需要確保後端執行足夠的資源。如果查詢過慢,請考慮增加 CPU、記憶體或伺服器儲存容量。
索引是搜尋資料的必要工具,但有些資料使用頻率不如其他資料。Elasticsearch 可讓您凍結索引,將未使用的索引移至另一個片段。然後,協調員搜尋每個查詢的碎片更少,從而提高效能。
Elasticsearch 控制查詢大小的 Thread 集區應經過優化,以支援每次查詢中處理的資料量。配置執行緒集區,以處理足夠的資料來處理您的查詢,但它們也與節點資源連結在一起。節點和執行緒集區都應該有足夠的資源,或者您可能會在大量查詢時看到效能下降。
結論
Elasticsearch 比標準資料庫更為複雜,因此要取得最佳效能,必須擁有正確的基礎架構與運算資源。設定 Elasticsearch 時,請運用最佳作法,但也請務必擁有正確的運算資源,以支援後端所需的查詢和資料儲存。
確保您擁有足夠儲存資源的一種方法,就是利用 Pure Storage® FlashBlade®。FlashBlade 支援中小型企業的指數成長。您的應用程式可以隨著更多使用者儲存資料並支援任何數量的客戶而擴展。