入行 Elastic-Stack 技術棧很久了,為了免于知識匮乏眼光局限,有必要到外面的世界看看,豐富自己的世界觀。
圖片來自 Pexels
本篇内容從 Elastic 的競争産品角度分析探讨:
Elasticsearch 當前熱度排名很高
本文僅代表個人的觀點,不代表社區技術陣營觀點,無意口水之争,限于本人的經驗知識有限,可能與讀者觀點認知不一緻。
競争産品
Elasticseach 從做搜索引擎開始,到現在主攻大數據分析領域,逐步進化成了一個全能型的數據産品。
在 Elasticsearch 諸多優秀的功能中,與很多數據産品有越來越多的交叉競争,有的功能很有特色,有的功能隻是附帶,了解這些産品特點有助于更好的應用于業務需求。
Elasticsearch 競争圖譜示意圖
Lucene
Lucene 是一個搜索的核心庫,Elastic 也是在 Lucene 基礎之上構建,它們之間的競争關系是由 Lucene 本身決定的。
在互聯網 2.0 時代,考驗各互聯網公司最簡單的技術要求,就是看他們的搜索做的怎麼樣,那時大家的做法幾乎一樣,都基于 Lucene 核心庫構建一套搜索引擎,剩下的就看各公司的開發者們的水平。
筆者有幸在 2012 年之前,基于 Lucene 做過垂直行業的搜索引擎,遇到很多問題有必要說一下:
Lucene 内部索引構建與查詢過程
Elasticsearch 與 Lucene 核心庫競争的優勢在于:
Elastic 近年的快速發展,市面上已經很少發現基于 Lucene 構建搜索引擎的項目,幾乎清一色選擇 Elasticsearch 作為基礎數據庫服務。
由于其開源特性,廣大雲廠商也在此基礎上定制開發,與自己的雲平台深度集成,但也沒有獨自發展一個分支。本次的競争中,Elasticsearch 完勝。
Solr
Solr 是第一個基于 Lucene 核心庫功能完備的搜索引擎産品,誕生遠早于 Elasticsearch。
早期在全文搜索領域,Solr 有非常大的優勢,幾乎完全壓倒 Elastic,在近幾年大數據發展時代,Elastic 由于其分布式特性,滿足了很多大數據的處理需求。
特别是後面 ELK 這個概念的流行,幾乎完全忘記了 Solr 的存在,雖然也推出了 Solr-Coud 分布式産品,但已經基本無優勢。
接觸過幾個數據類公司,全文搜索都基于 Solr 構建,且是單節點模式,偶然出現一些問題,找咨詢顧問排查問題,人員難找,後面都遷移到 Elasticsearch 之上。
現在市面上幾乎大大小小公司都在使用 Elasticsearch,除了老舊系統有的基于 Solr 的,新系統項目應該全部是 Elasticsearch。
個人認為有以下幾個原因:
Solr 産品功能模塊内部架構圖
本次競争中,Elasticsearch 完勝。
RDBMS
關系型數據庫與 Elasticsarch 相比主要優點是事務隔離機制無可替代,但其局限性很明顯。
主要幾個方面如下:
若數據無需嚴格事務機制隔離,個人認為都可以采用 Elasticsearch 替代。若數據既要事務隔離,也要查詢性能,可以采用 DB 與 ES 混合實現。
RDBMS 與 ES 各自優勢示意圖
OpenTSDB
OpenTSDB 内部基于 HBase 實現,屬于時間序列數據庫,主要針對具有時間特性和需求的數據,進行過數據結構的優化和處理,從而适合存儲具有時間特性的數據,如監控數據、溫度變化數據等。
小米公司開源監控體系 open-falcon 的就是基于 OpenTSDB 實現。
OpenTSDB 時間序列數據庫内部實現
Elastic 産品本身無意時間序列這個領域,随着 ELK 的流行,很多公司采用ELK來構建監控體系,雖然在數值類型上不像時間序列數據庫做過特别處理,但由于其便利的使用,以及生态技術棧的優勢,我們也接受了這樣的事實。
Elasticsearch 構建時間序列很簡單,性能也相當不錯:
HBase
HBase 是列式數據庫的代表,其内部有幾個緻命設計大大限制了它的應用範圍:
關于其各種技術原理就不多說了,說說它的一些使用情況。
公司所屬物流速運行業,一個與車輛有關的項目,記錄所有車輛行駛軌迹,車載設備會定時上報車子的軌迹信息,後端數據存儲基于 HBase,數據量在幾十 TB 級以上。
由于業務端需要依據車輛軌迹信息計算它的公裡油耗以及相關成本,所以要按查詢條件批量查詢數據,查詢條件有一些非 Rowkey 的字段,如時間範圍,車票号,城市編号等,這幾乎無法實現,原來暴力的做過,性能問題堪憂。
此項目的問題首先也在于 Rowkey 難設計滿足查詢條件的需求,其次是二級索引問題,查詢的條件很多。
如果用列式數據庫僅限于 Rowkey 訪問場景,其實采用 Elastic 也可以,隻要設計好 _id,與 HBase 可以達到相同的效果。
如果用列式數據庫查詢還需要引入三方組件,那還不如直接在 Elasticsearch 上構建更直接。
除非對使用列式數據庫有非常苛刻的要求,否則 Elasticsearch 更具備通用性,業務需求場景适用性更多。
列式數據庫内部數據結構示意圖
MongoDB
MongoDB 是文檔型數據庫的代表,數據模型基于 Bson,而 Elasticsearch 的文檔數據模型是 Json,Bson 本質是 Json 的一種擴展,可以相互直接轉換,且它們的數據模式都是可以自由擴展的,基本無限制。
MongoDB 本身定位與關系型數據庫競争,支持嚴格的事務隔離機制,在這個層面實際上與 Elasticsearch 産品定位不一樣,但實際工作中,幾乎沒有公司會将核心業務數據放在 MongoDB 上,關系型數據庫依然是第一選擇。
若超出這個定位,則 Elasticsearh 相比 MongoDB 有如下優點:
公司剛好有個項目,原來數據層基于 MongoDB 設計構建的,查詢問題不少 ,後面成功遷移到 Elasticsearch 平台上,服務器數據量從 15 台降低到 3 台,查詢性能還大幅度提升十倍。
詳細可閱讀筆者另一篇文章《為什麼要從MongoDB遷移到Elasticsearch?》抛開數據事務隔離,Elasticsearch 可以完全替代 MongoDB。
ClickHouse
ClickHouse 是一款 MPP 查詢分析型數據庫,近幾年活躍度很高,很多頭部公司都引入其中。
我們為什麼要引入呢,原因可能跟其他頭部公司不太一樣,如下:
ClickHouse 與 Elasticsearch 一樣,都采用列式存儲結構,都支持副本分片。
不同的是 ClickHouse 底層有一些獨特的實現,如下:
ClickHouse 在大數據平台中的位置
Druid
Durid 是一個大數據 MPP 查詢型數據産品,核心功能 Rollup,所有的需要 Rollup 原始數據必須帶有時間序列字段。
Elasticsearch 在 6.3.X 版本之後推出了此功能,此時兩者産品形成競争關系,誰高誰下,看應用場景需求。
Druid 樣本數據,必須帶有 time 時間字段。
筆者之前負責過公司所有 Elasticsearch 技術棧相關數據項目,當時也有碰到一些實時聚合查詢返回部分數據的需求。
但我們的需求不太一樣,索引數據屬于離線型更新,每天都會全部删除并重新創建索引插入數據。
此時使用 Elastic 的版本是 6.8.X,僅支持離線型數據 Rollup,所以此功能沒用上,Elastic 在 7.2.X 版本之後才推出實時 Rollup 功能。
Druid 更加專注,産品設計圍繞 Rollup 展開,Elastic 隻是附帶。
Druid 支持多種外接數據,直接可以對接 Kafka 數據流,也可以直接對接平台自身内部數據;而 Elastic 僅支持内部索引數據,外部數據需要借助三方工具導入到索引裡。
Druid 在數據 Rollup 之後,會丢棄原始數據;Elastic 在原有索引基礎之後,生成新的 Rollup 之後的索引數據。
Druid 與 Elastic 的技術架構非常類似,都支持節點職責分離,都支持橫向擴展。
Druid 與 Elastic 在數據模型上都支持倒排索引,基于此的搜索與過濾。
Druid 産品技術架構體系示意圖
關于 Rollup 這個大數據分析領域,若有大規模的 Rollup 的場景需求,個人更傾向于 Druid。
結語
總結:
注:内容來源于筆者實際工作中運用多種技術棧實現場景需求,得出的一些實戰經驗與總結思考,提供後來者借鑒參考。
本文圍繞 Elastic 的競争産品對比僅限概要性分析,粒度較粗,深度有限,之後會有更加專業深入競争産品分析文章,敬請期待。
作者:李猛(ynuosoft)
簡介:Elastic-stack 産品深度用戶,ES 認證工程師,2012 年接觸 Elasticsearch,對 Elastic-Stack 開發、架構、運維等方面有深入體驗,實踐過多種 Elasticsearch 項目,最暴力的大數據分析應用,最複雜的業務系統應用;業餘為企業提供 Elastic-Stack 咨詢培訓以及調優實施。
編輯:陶家龍
出處:轉載自微信公衆号 DBAplus 社群(ID:dbaplus)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!