UCloud Elasticsearch服務UES應用場景分析
當一個系統(tǒng)業(yè)務數(shù)據(jù)量達到百億條的時候,通常會引出一些問題:
1.數(shù)據(jù)怎么存儲,存儲到哪里
2.怎么保證數(shù)據(jù)安全,安全存儲策略是什么
3.數(shù)據(jù)怎么檢索,怎么做到快速響應
4.怎么對數(shù)據(jù)進行實時的統(tǒng)計分析
作為一款開源的定位于全文搜索引擎服務的Elasticsearch,可能是這些問題下比較高效的一種解決方案。那么,Elasticsearch的適用場景,能在什么地方發(fā)揮作用?Elasticsearch的特點優(yōu)勢又是什么?總的來說,涉及搜索的業(yè)務場景可能都會有Es的用武之地,下面將介紹Es的幾種常見業(yè)務場景。
- 日志分析
問題引入:在復雜的計算機系統(tǒng)里面,一個系統(tǒng)可能由成千上百臺服務器構(gòu)成,很多系統(tǒng)不在一個地區(qū)機房,甚至有跨國家的;即使是在一個地區(qū)的系統(tǒng),也有不同的來源,比如:操作系統(tǒng)、應用服務、業(yè)務邏輯等等。它們無時不刻都在產(chǎn)生新的各式各樣的日志數(shù)據(jù)。
面對如此海量的分布在各個服務器上的日志數(shù)據(jù),一旦我們需要去排查一些重要的信息,使用傳統(tǒng)的方式登陸到一臺臺機器上查看顯然有點力不從心。因此,建立一套集中式的日志管理系統(tǒng),把不同來源的日志數(shù)據(jù)集中整合到一個地方再進行分析就顯得尤為重要。
一套完整的集中式日志管理系統(tǒng),主要包含以下幾個功能:
- 采集-能夠采集不同地區(qū)多種來源的日志數(shù)據(jù)
- 傳輸-能夠穩(wěn)定地把日志數(shù)據(jù)傳輸?shù)街醒胂到y(tǒng)
- 存儲-能夠安全的存儲日志數(shù)據(jù)
- 分析-能夠提供高效的日志數(shù)據(jù)分析,并可以支持UI展現(xiàn)
- 告警-能夠提供監(jiān)控機制,異常信息告警
解決方案:ELK
ELK是一套集中式日志管理方案,由ElasticSearch + Logstash + Kibana三個開源軟件組成。UES基于ElasticSearch和Kibana開發(fā),使用UES服務的ELK協(xié)議棧如下圖所示:
Logstash Agent收集不同來源的Server產(chǎn)生的日志,并存放到Elasticsearch集群中,而Kibana則從ES集群中查詢數(shù)據(jù)生成圖表,加上配置 Nginx 實現(xiàn)簡單的用戶認證,再返回給瀏覽器端。
Elasticsearch 是一個實時的分布式搜索和分析引擎,它可以用于全文搜索、結(jié)構(gòu)化搜索以及分析。它是一個建立在全文搜索引擎 Apache Lucene 基礎(chǔ)上的搜索引擎,使用 Java 語言編寫。
Elasticsearch的主要特點:
- 分布式的實時文檔存儲系統(tǒng)
- 分布式的實時分析搜索引擎
- 多數(shù)據(jù)源,文檔導向,所有的對象全部是文檔
- 高可用性,易擴展,支持集群(Cluster)、分片和復制(Shards 和 Replicas)
- 支持插件機制
- restful風格接口,支持Json
Logstash 是一個具有實時渠道能力的數(shù)據(jù)收集引擎。它是一個完全開源的工具,可以對你的日志進行收集、過濾,并將其存儲供以后使用。
Logstash主要特點:
- 幾乎可以訪問任何數(shù)據(jù)
- 可以和多種外部應用結(jié)合
- 支持彈性擴展
Logstash由三個主要部分組成:
- Shipper-發(fā)送日志數(shù)據(jù)
- Broker-收集數(shù)據(jù),缺省內(nèi)置 Redis
- Indexer-數(shù)據(jù)寫入
Kibana 是一款基于 Apache 開源協(xié)議,使用 JavaScript 語言編寫,為 Elasticsearch 提供分析和可視化的 Web 平臺。它可以在 Elasticsearch 的索引中查找、交互數(shù)據(jù),并生成各種維度的表圖。
使用UES作為日志分析管理的案例分析如圖所示:
從案例中可以看出使用ELK技術(shù)來做日志管理和傳統(tǒng)方式的對比。結(jié)果顯而易見,使用ELK技術(shù)能在最短時間內(nèi)解決問題,在日志管理方面更加便捷高效。
- 全文檢索
如今,無論是互聯(lián)網(wǎng)信息還是企業(yè)內(nèi)部每天產(chǎn)生的信息,都在以指數(shù)級增長。對于企業(yè)內(nèi)部,在每天產(chǎn)生的大量數(shù)據(jù)尤其是非結(jié)構(gòu)化數(shù)據(jù)中,如何快速查找到對企業(yè)內(nèi)部有用的信息,幾乎成為每個公司開始關(guān)注的重點。
Elasticsearch在實現(xiàn)全文檢索的過程中,首先要確定分詞器,Es默認有很多分詞器。一般中文分詞器使用第三方的ik分詞器、mmsegf分詞器和paoding分詞器,最初構(gòu)建于lucene,后來移植于Es。目前在***版的Es中,使用的是ik分詞器。UES已經(jīng)內(nèi)置安裝了ik分詞器,并且支持自定義分詞詞庫。
當用戶產(chǎn)生大量的文本數(shù)據(jù)時,Es均會將其進行分詞并將這些詞語保存在索引中,只需輸入關(guān)鍵詞進行查詢,索引就能起到作用,查找對應的相同查詢詞,從而實現(xiàn)全文檢索。全文檢索的架構(gòu)設(shè)計如下圖:
其中,Elasticsearch服務端進行數(shù)據(jù)索引存儲,Server提供檢索接口,瀏覽器端負責數(shù)據(jù)渲染和界面呈現(xiàn)。
- 傳統(tǒng)數(shù)據(jù)庫替代
隨著Elasticsearch技術(shù)的發(fā)展,使得Es已經(jīng)超越了其最初的純搜索引擎角色,新增了數(shù)據(jù)聚合分析和可視化的特性。如果遇到***數(shù)量的文檔需要通過關(guān)鍵詞進行檢索時,Es肯定是***選擇。當然,如果文檔格式是Json的,也可以把Es當作一種NoSQL數(shù)據(jù)庫,對數(shù)據(jù)進行多維度的分析。
Elasticsearch是可以支持持久存儲、統(tǒng)計等多項功能的現(xiàn)代搜索引擎,這種特性也決定了某些場景下Es可以作為主要的后端服務存儲。Es替代傳統(tǒng)DB的前提是業(yè)務不對操作的事務性有特殊要求,由于 Es的權(quán)限管理并不是特別完善,所以只把Es作為內(nèi)部存儲是可以替代傳統(tǒng)數(shù)據(jù)庫的。
還有一種場景:在一個已經(jīng)運行了很長時間的復雜系統(tǒng)中添加檢索服務。一種非常冒險的方法是重構(gòu)系統(tǒng)以支持使用Es,而相對安全的方法是將Es作為新的組件添加到現(xiàn)有系統(tǒng)中。
如圖所示的MySQL數(shù)據(jù)庫和Es集群存儲,需要找到一種方式使得兩存儲之間實時同步,例如 logstash-input-jdbc 插件。
其實Elasticsearch的應用場景遠不止這些,只有不斷嘗試,接觸新的應用場景,我們才有機會獲得更好解決方案的經(jīng)驗。UES作為一款平臺產(chǎn)品推出,旨在應用到客戶廣泛的業(yè)務場景中,例如:
數(shù)據(jù)分析場景:分析網(wǎng)址、移動設(shè)備、服務器等非結(jié)構(gòu)化和半結(jié)構(gòu)化日志,分析傳統(tǒng)數(shù)據(jù)庫中數(shù)據(jù),用于錯誤排查、應用程序監(jiān)控、欺詐檢測、游戲、廣告等;
全文搜索場景:電商、O2O、企業(yè)等行業(yè)的搜索與導航服務;
實時統(tǒng)計分析場景:應用程序、用戶點擊等實時統(tǒng)計分析;
分布式文檔處理場景:對Json支持友好,支持地理位置查詢。
UES可以實現(xiàn)集群化的快速部署,極大降低人力運維成本。多種節(jié)點類型的提供、靈活的計費方式、支持業(yè)務動態(tài)擴容,此外集群豐富的預裝插件和監(jiān)控指標為用戶集群使用功能和數(shù)據(jù)安全保駕護航。