透過ELK技術打造Smart Search系統

透過ELK技術打造Smart Search系統

目前企業中若是使用關連式資料庫儲存資料,則其查詢資料的方式會以多表 Join 加上透過模糊搜尋 (LIKE) 的方式去做到全文檢索的功能,會隨著資料量的大小,其所耗費的時間也會隨之增長,以及其結果只能以關鍵字再去前後文增加,無法得到同義詞或是相似詞的結果,而 Smart Search 則是因應而生的解決方案。

在這篇文章中,主要會針對 Smart Search 此解決方案來做架構與使用技術上的說明,主要目的為希望讀者能透過本篇文章更加瞭解 Smart Search 的優點,說明技術上的巧思從全方位去思考企業會遇到的痛點並加以解決。

本章節會介紹 Smart Search 的架構,如下圖,以帳務查詢流程為例,藍色為 Smart Search 的架構範圍,棕色的則為企業既有系統,Smart Search 整體流程及技術元件如下說明:

  1. 資料同步:

    1. 即時串流:使用Kafka與CDC進行即時資料同步。

    2. 批次處理:透過DW ETL批次同步。

  2. 資料處理及解析: 使用Logstash進行格式解析。

  3. 資料正確性: 使用WebComm Checker支援即時及每日資料驗證。

  4. 後台管理: 監控告警功能並整合客戶管理平台。

  5. API介面: 系統透過Smart Search API 模組進行查詢。

ELK-Smart Search系統

Smart Search的架構

圖中最左側是構成 Smart Search 的主要服務功能,透過『帳務同步』功能將企業既有系統中的資料同步至『資料存儲』功能中,同時在使用『異常監控』功能去監控是否有寫入或是管理上的異常,最後使用『API支援』所提供的功能連接到『智能搜尋』的使用者介面上。

圖中最右側是經由 Smart Search 主要功能所衍生的服務性功能,透過『帳務介接』功能將企業內部的資料串接同步至 Smart Search 叢集中,Smart Search具備兩種方式進行資料同步: 即時串流與批次處理,根據客戶需求可單獨選擇或協同運作。

即時串流使用 Kafka與中心帳務主機透過CDC 進行的資料同步,來滿足對於時效性要求較高的系統,而批次處理則是透過DW ETL 進行批次的資料彙整。

在這過程中有一系列的功能來保證資料與系統的正常,在『每日備援』中會將資料做到異地存放的備援機制保證重要資料的穩定性,『帳務檢核』則是會檢查從帳務主機的即時性資料同步至 Smart Search 時是否有誤差,『帳務校驗』則是每日固定時間去檢核一次目前 Smart Search 中的資料與帳務主機的資料是否完全相同,透過『管理後台』的功能能使管理人員連線進入 Smart Search 平台管理其中的內容與服務,最後『異常通知』服務能夠將 Smart Search 叢集中發生的告警自動通知至管理後台。

 

Smart Search的元件說明

本章節會從個別的元件做細部的介紹,並在其中說明遇到的問題。

資料介接

  • 帳務主機

根據企業本身的系統規劃後續的服務,此主機的儲存方式可能是以資料庫、數據倉儲或是大數據平台的方式存在。皆可以透過不同的方式將其中的資料做快速的同步至 Smart Search 叢集中,以本次的案例,會將資料透過兩種方式取出使用,分別為『即時串流』與『批次處理』,兩種方式本身也能單獨使用其中之一,或是協同運作,根據不同的需求,靈活的轉換資料來源。

  • 即時串流

新進入中心帳務主機的資料會透過 Kafka 將這些資料同步至 Smart Search 叢集中, Kafka 能作為突如其來的大量資料之緩衝區,將資料快速的暫時存放至其內部,再透過Logstash 去控管資料導入叢集的速度,使得整體資料架構的穩定性提高,以及最大程度的避免資料遺失,而 Kafka 的運作方式可以再細分為 Producer、Broker、Consumer,其中會以新的資料會以 Producer 的角色將資料存放至 Broker ,而 Broker 會有高可用性的配置,防止資料遺失並預設存放七天,Consumer 會再以訂閱的方式去 Broker 中取得所需要的特定資料,此資料會以原始資料的形式傳入後續的 Logstash 中。

  • 批次處理

定時將資料倉儲或是大數據平台的資料導出,並寫入 Smart Search 叢集中,不同於即時串流,大批量的寫入資料則可以選在離峰時段,可以有效的運用主機空閒時間,可根據客戶的業務需求安排批次更新的時間及頻率,此外可以使用每日批次的資料進行驗證,保證中心帳務主機與 Smart Search 叢集中整體資料的一致性,若是資料庫在資料寫入後有直接做更新的動作如帳務備註等,或是即時串流平台發生故障或異常等事件發生,則可以透過此批次產檔的功能取得完整的資料,並進一步完成資料正確性的校驗。

帳務同步

  • Logstash

Logstash 為 ELK Stack 架構中的一部份,其是一種輕量化且速度快的資料處理管道,可從各種資料源搜集資料,並在其中做格式上的處理與內容的轉換,再將其傳送至資料目的地。

如下圖其為Logstash Pipeline 相關的流程圖,每個 pipeline 皆可分為 input、filter、output 三個部分:

  1. Input接收資料來源,圖中為從 Data source 取得資料,此資料源在本例中為 Kafka或是DW產出之檔案。

  2. Filters: 將傳入的資料進行修改與處理。

  3. Output: 指定資料輸出的位置,在本案例中是將資料寫進 elasticsearch 中。

為確保整體資料能夠穩定寫入叢集,Logstash 能夠同時架設數台以承受突如其來的大量資料,並且能保證資料不會重複寫入,同時此架構也能保證其中一台 Logstash 故障時的備援。

資料儲存

  • Elasticsearch

Elasticsearch 為 ELK Stack 架構中的核心,本身的定位為分散式的搜尋系統,其中的優勢為

  1. 分散式的系統能透過各自的處理器與記憶體達到搜尋時的加速效果。

  2. 本身是以反向索引的方式去儲存資料,所以在全文檢索的效能與結果上比一般的資料庫更加優秀。

  3. 同時也是 Smart Search 叢集中的資料存放中心,分散式的系統同時也保證了資料的備份,提高整體服務的穩定性,防止突如其來的個別節點故障所造成的影響。

  • 區間帳務檢測

確保 Kafka 每段時間內傳送出的資料與寫入 Elasticsearch 的資料是同步的,若是發生錯誤時則可以透過此檢測得知 Elasticsearch 內的資料出現問題,並針對問題的嚴重程度即所負責之單位進行告警通知,能夠在第一時間就能快速掌握系統健康度。

需要考慮到從 Kafka 與 Elasticsearch 中讀取資料的不同特性,加以設計即時比對程式,而Kafka 與 Elasticsearch 有官方開發的程式套件,對於開發客製化程式上有一定的穩定性以及後續的維護也會較方便。

  • 每日帳務校驗

經過區間帳務檢測可知道 Elasticsearch 是否寫入正常,且考量到即時串流方案發生問題時,可作為資料同步的備案,故需要每日帳務校驗的功能,此功能可從中心帳務主機取得資料庫內之完整資料,此資料則不會受到 Kafka 影響,所以可以與 Elasticsearch 內的資料進行完整比對。

需要考慮到資料庫每日產出檔案的時間區間與此區間即時寫入 Elasticsearch 的資料可能會有內容更新的問題,或是資料庫有做手動更改資料內容時, Smart Search 叢集需要如何修改內容等技術問題。

  • 本地備援與異地備援

根據系統服務的等級可做此規劃。

  1. 重要性較低的系統,可使用本地備援即可,本地備援機制為Elasticsearch 本身的 HA 機制,同時會有數個節點進行互相備份,若是少量節點失效,叢集仍然能正常運作,為維護者保留修復系統的時間,除此之外會定時進行 Elasticsearch 的Snapshot,確保叢集因意外而故障時,能及時將資料轉移至其他伺服器進行服務,但是其轉移資料的時間會需要一段時間,無法像異地備援一樣直接做切換的速度。

  2. 重要性較高的系統,如交易系統、客戶服務系統等,則可除本地備援外再加上異地備援,異地備援則是本地叢集的鏡像備份,異地備援本身也是有 Elasticsearch 的 HA 與 Snapshot 機制,由於可能會發生整個廠區或是大樓斷電的意外,故異地備援為針對此意外所產生時的運作機制,其能即時切換至鏡像叢集繼續進行服務,使整體系統服務的 Down time 最小化。

        備援機制需要考慮到的實作方式有以下幾點:

  1. 備份方式,若是大批量同時備份會造成在使用之叢集的負擔,過小批量則會造成維護上的複雜。

  2. 備份時間,本身有差異備份的機制,所以不會造成每次負擔都很重,但是仍需要尋找適合的系統非尖峰時段進行備份。

異常監控

  • Kibana

Kibana 為 ELK Stack 架構中的一部份,其提供一個使用者介面,可以進行各種操作,如以下四點:

  1. 介面化的搜尋功能,其有完善的API和工具可供檢索資料。

  2. 可觀察性的各項系統指標,如系統日誌、系統現況、應用程式等整合為使用者介面。

  3. 安全性管理介面,可針對不同面向的資料進行收集、檢測,並可設計客製化的規則去預防與發出告警,提供整個叢集架構的統一安全性管理。

  4. 分析工具,可提供資料的可視化功能,如圓餅圖、折線圖、長條圖等,

    也能使用分析工具和應用程式去探索其存放在叢集中的資料。

  • 異常監控通知

透過告警功能將整體叢集的異常狀況即時通知至管理者平台,其中有以下幾個面向:

  1. Smart Search 叢集本身及相關服務運作狀態是否正常

  2. 各節點的硬體使用量,CPU使用率、記憶體使用量、硬碟空間等。

  3. 帳務檢測機制的告警訊息,每日帳務校驗與區間帳務檢測內容若是有誤

當發生上述情況,監控系統則會發出通知告知對應的管理人員。

API支援

ELK-Smart Search系統-3
  • 全文檢索

透過 Elasticsearch 提供的 API 進行包裝,其中提供自定義字典檔來斷詞,可以根據新出現的詞彙新增至字典檔中,即可有更貼近使用者習慣的全文檢索結果。

需要考慮的問題則是字典檔更新會影響到已紀錄的資料,此時則無法直接讓以紀錄的龐大資料做 hot reload,除此之外還會有字典檔內容重複的問題,也需要額外的程式碼去檢查版本更新與控制。

  • 智能搜索

智能搜索除了會使用到字典檔來斷詞增加搜尋準確率外,也提供所謂的權威檔,此檔案則可以定義同義詞與字詞的上下關係,在搜索的過程中可以一併將相似的內容尋找出來,權威檔的更新方式則可以 hot reload 的方式執行,不會使查詢系統有延遲或停止的問題,除此之外,維護人員新增詞彙後則可透過自動化的程式更新權威檔,與版本控制。

專人協助

由偉康業務人員為您詳細說明偉康的解決方案,以及相關產業經驗。

立即訂閱電子報

掌握最新科技趨勢!