騰訊大資料Hermes愛馬仕的系統

tao_wei162發表於2017-09-23

騰訊大資料最近做了幾件事,上線了一個官方網站http://data.qq.com/,將TDW(騰訊大資料庫倉庫)開源了,封閉的企鵝難得開放了一回。大資料網站上有一些資料,我看到一個叫Hermes愛馬仕的系統挺有意思的,今天介紹下。

關於實時分析系統我前面寫個幾篇文章分析,包括《實時分析系統(HIVE/HBASE/IMPALA)淺析》《MPP DB 是 大資料實時分析系統 未來的選擇嗎?》《一套資料,多種引擎(impala/Hive/kylin)》《一套資料,多種引擎續---兩種資料格式(Parquet/ORCfile)淺析》有興趣可以看看。

 

    為了解決實時分析的問題,主要分析的是MPP架構的軟體,核心思路是通過MPP掃描技術來加快查詢。騰訊的Hermes系統,是開源的lucene演變而來,主要用的是搜尋和索引技術,所以hermes也叫實時檢索分析平臺。這個是另外一個思路,可以值得看看。

詳細的Hermes的介紹,可以看下本文最後參考資料。主要講講Hermes有特點的幾個東西:

1、核心是儲存的設計, 通過對資料結構的重新組織,結合分析系統的特點,實現巢狀列儲存,充分避開隨機讀,採用塊讀取+點陣圖計算大幅度降低耗時弊病,使大資料的統計分析計算耗時縮短至秒級;在詞條檔案中採用字典排序,並在此基礎上實現字首壓縮;在序列檔案中採用遞增排序,並對序列號採用可變長型別,有效壓縮儲存空間,便於計算點陣圖的構建;

    2、列式儲存.

3、基於單個例項資料的分析處理,datasource主要包含兩類資料:使用者匯入的資料(點陣圖檔案)以及源資料(索引檔案),核心主要根據使用者請求邏輯處理索引檔案以及點陣圖檔案。核心示意如下:


 

 

4、整個資料對應多份,按照不同規則均勻分佈在各個分析例項中,資料的merge服務在其中的一個分片中進行,每次請求將根據機器負載情況選擇負載輕的作為merge伺服器。

 

Hermes和開源的solr,elasticsearch又有什麼不同?

solres的使用特點如下:

1. 源自搜尋引擎,側重搜尋與全文檢索。

2. 資料規模從幾百萬到幾千萬不等,資料量過億的叢集特別少。
 Ps:有可能存在個別系統資料量過億,但這並不是普遍現象(就像oracle的表裡的資料規模有可能超過hive裡一樣,但需要小型機)。

hermes:的使用特點如下:

1. 一個基於搜尋引擎技術的海量資料實時檢索分析平臺。側重資料分析。

2. 資料規模從幾億到幾萬億不等。最小的表也是千萬級別。

在騰訊12臺機器,就可以處理每天350億的資料(每條資料1kb左右),每臺30T左右,資料可以儲存一個月之久。

solr\es 更偏重於為小規模的資料提供全文檢索服務;hermes則為大規模的資料倉儲提供索引支援,為大規模資料倉儲提供即席分析的解決方案,並降低資料倉儲的成本,hermes資料量更“大”。

定位和資料規模的不同導致了hermessolres的對索引使用方式有著本質的區別。下面從大資料的視角來闡述,為什麼hermes更適合做大索引。

solres的索引嚴重依賴實體記憶體:

1. 一級跳躍表是完全load在記憶體中的,除了需要消耗很多記憶體,首次開啟索引的載入速度會特別慢,在solr\es中的索引是一直處於開啟狀態的,不會頻繁的開啟與關閉;這種模式會制約一臺機器的索引數量與索引規模,通常一臺機器固定負責某個業務的索引。

2. 排序和統計(summaxmin),是通過遍歷倒排表,將某一列的全部值都load到記憶體裡,然後基於記憶體資料進行統計即使一次查詢只會用到其中的一條記錄,也會將整列的全部值都load到記憶體裡,臺浪費資源,首次查詢的效能太差。資料規模受實體記憶體限制很大,索引規模上千萬後OOM是常事。

3. 索引儲存在本地硬碟,出現異常後,因為資料要恢復,copy的時間要太久。

4. 支援master/slave模式,但是跟傳統mysql資料庫一樣,叢集規模並沒有特別大的。

這種模式處理叢集規模受限外,每次擴容的資料遷移將是一件非常痛苦的事情,資料遷移時間太久。

5. 倒排檢索即使某個詞語存在資料傾斜,因資料量比較小,也可以將全部的doclist都讀取過來(比如說男、女),這個doclist會佔用較大的記憶體進行cache,當然在資料規模較小的情況下佔用記憶體不是特別多,查詢命中率很高,會提升檢索速度,但是資料規模上來後,這裡的記憶體問題越來越嚴重。

6. Merger server只能是一個,制約了查詢的節點數量;資料不能進行動態分割槽,資料規模上來後單個索引太大。

Hermes的索引特點如下:

1. 大部分的索引處於關閉狀態,只有真正用到索引才會去開啟;一級跳躍表採用按需load,並不會load整個跳躍表,用來節省記憶體和提高開啟索引的速度。Hermes經常會根據業務的不同去動態的開啟不同的索引,關閉那些不經常使用的索引,這樣同樣一臺機器,可以被多種不同的業務所使用,機器利用率高。

2. 排序和統計並不會使用資料的真實值,而是通過標籤技術將大資料轉換成佔用記憶體很小的資料標籤,佔用記憶體是原先的幾十分之一。另外不會將這個列的全部值都load到記憶體裡,而是用到哪些資料load哪些資料,依然是按需load。不用了的資料會從記憶體裡移除。

3. 索引儲存在hdfs中,理論上只要hdfs有空間,就可以不斷的新增索引,索引規模不在嚴重受機器的實體記憶體和物理磁碟的限制。

4. 採用yarn進行程式管理,資料在hdfs中,叢集規模和擴容都是一件很easy的事情。

5. 如果某個詞語存在資料傾斜,則會與其他條件組合進行跳躍合併(參考doclistskiplist資料)。

6. 採用多級的merger server;資料可以根據業務的不同,採用不同的分割槽方式。

 

參考資料:

1關於hermessolres的定位與區別 http://user.qzone.qq.com/165162897/2

2Hermes實時檢索分析平臺 http://data.qq.com/article?id=817

相關文章