HStreamDB v0.7 釋出:透明分割槽、雜湊演算法,多項效能提升新嘗試

emqx發表於2022-03-03

春日來臨,我們非常高興地向大家宣佈:雲原生分散式流資料庫 HStreamDB 最新版本 v0.7 已正式釋出!

HStreamDB 是首個專為流資料設計的雲原生流資料庫,致力於為大規模資料流接入、儲存、處理、分發等環節提供一站式管理,支援在動態變化的資料流上進行復雜的實時分析,並將在 IoT、網際網路、金融等領域的實時流資料分析和處理場景發揮重要作用。

v0.7 的主要優化包括更高的穩定性、擴充套件性和可用性。在這一版本中,我們不僅通過整合測試、jepsen 測試等手段發現並修復了大量問題,提升了系統的穩定性,同時帶來了若干新特性和改進,包括:透明分割槽功能、全新運維管理工具、新版 hstreamdb-java、叢集負載均衡演算法重構,以及使用和部署方面改進等。

GitHub 專案地址:https://github.com/hstreamdb/hstream

新版本速覽

新增透明分割槽功能,提升 Stream 的擴充套件能力

在之前的版本中 HStreamDB 已經能夠支援儲存和管理大規模的資料流(Stream),為了進一步提升單個 Stream 的擴充套件能力和讀寫效能,並保證資料的順序性,HStreamDB v0.7 新增了透明分割槽功能:

  • 從擴充套件性的角度來看,現在一個 stream 內部可能包含多個分割槽(分割槽的數量是動態變化的),讀寫流量將通過內部的分割槽在叢集中實現負載均衡,從而實現單個 Stream 的更高吞吐。
  • 從順序性的角度來看,每條寫入的資料會攜帶一個由使用者指定的 orderingKey,每個 orderingKey 概念上對應一個邏輯分割槽,同一個邏輯分割槽內的資料將按照寫入的順序交付給同一個消費客戶端,如下圖所示。

HStreamDB

值得注意的是,在 HStreamDB v0.7 裡分割槽對於使用者來說是完全透明的,使用者無需提前指定分割槽數量和分割槽邏輯,也不用擔心分割槽的增加和減少帶來的資料重分配以及資料亂序的問題。儘管從系統實現角度來看,分割槽是解決單點瓶頸、提升系統水平擴充套件能力的有效手段;但從使用者的角度來看,把分割槽直接暴露給使用者,不僅破壞了上層的抽象,而且大大增加了使用者的學習,使用以及維護成本。透明分割槽在實現擴充套件性、保證順序性的同時,並沒有將額外的複雜性暴露給使用者,這將極大改善使用者使用體驗。

更詳細的關於透明分割槽的介紹,請參考:HStreamDB Docs

改進叢集負載均衡演算法,提高分配效率

為了讓叢集內各節點的資源得到合理的利用,需要將客戶端的讀寫流量儘可能均衡地分配到叢集中的各節點上。HStreamDB v0.6 的負載均衡策略是基於節點的硬體資源負載情況來實現的,存在的主要問題是需要節點間相互通訊交換多種硬體資源資訊,包括 CPU、記憶體、網路等,同時這種方式存在一定的滯後性,總體來看實現相對複雜,效率較低。

為此在 HSteamDB v0.7 中我們基於一致性雜湊演算法重新實現新的負載均衡模組。一致性雜湊是一個優雅而強大的演算法,被多種分散式系統所採用,比如 DynamoDB。基於它的分配策略不僅使得負載均衡模組不用再實時維護硬體資源資訊,而且核心演算法更加簡潔,也能很好應對叢集成員變更的時候的重分配問題。同時它也很靈活,容易被擴充套件和優化,比如通過配置不同權重的方式應對異質節點。還有一些最新的研究優化,比如 Google 的 Consistent Hashing with Bounded Loads.

新增 HStream Admin 工具,方便運維管理

我們提供了一個新的管理工具,以方便使用者對 HStreamDB 的維護和管理。HAdmin 可以用於監控和管理 HStreamDB 的各種資源,包括 Stream、Subscription 和 Server 節點。以前嵌入在 HStream SQL Shell 中的 HStream Metrics,現也已遷移到了新的 HAdmin 中。簡而言之,HAdmin 是為 HStreamDB 運維人員準備的,而 SQL Shell 是為 HStreamDB 終端使用者準備的。

示例:

docker run -it --rm --name some-hstream-admin --network host hstreamdb/hstream:v0.7.0 bash
> hadmin --help
======= HStream Admin CLI =======

Usage: hadmin COMMAND

Available options:
  -h,--help                Show this help text

Available commands:
  server                   Admin command
  store                    Internal store admin command
> hadmin server status 
+---------+---------+-------------------+
| node_id |  state  |      address      |
+---------+---------+-------------------+
| 100     | Running | 192.168.64.4:6570 |
| 101     | Running | 192.168.64.5:6572 |
+---------+---------+-------------------+

詳細的使用方法請參考:HStreamDB Docs

hstreamdb-java v0.7 釋出,支援 HStreamDB v0.7 新功能

hstreamdb-java 是當前主要的 HstreamDB 客戶端,它將始終同步支援 HSteamDB 的最新特性。本次 HStreamDB v0.7 的新功能也在 hstreamdb-java v0.7 中得到了支援,具體的,相比 hstreamdb-java v0.6 ,除了若干問題的修復,hstreamdb-java v0.7 主要包含以下值得關注的新特性和改進:

  • 新增了對 HStreamDB v0.7 透明分割槽功能的支援。
  • 改進了對叢集的支援,新增了請求在可恢復的失敗情況下在叢集中多個節點之間重試的能力。
  • 新增 BufferedProducer 介面和實現。考慮到不同場景下使用者會對寫入的時延和吞吐有不同的要求,為了清晰起見,我們將原來的 Producer拆分成了兩個獨立的BufferedProducerProducer,其中BufferedProducer主要面向高吞吐的場景,Producer 主要用於低延遲的場景。
  • BufferedProducer新增兩種 flush 模式。原來的 Producer 在 batch 模式下只支援按資料條數觸發 flush,現在BufferedProducer新增了size-triggered 和 time-triggered 兩種flush 模式,同時這三類觸發條件可以同時起作用,能夠更靈活地滿足使用者的使用需求。

hstreamdb-java GitHub 倉庫:https://github.com/hstreamdb/...

簡化部署與使用的流程,提升使用體驗

  • 為了方便使用者快速體驗以及使用 HStreamDB,我們現已增加基於 docker-compose 的快速上手文件:https://hstream.io/docs/en/la...
  • 為了支援使用者在多臺機器上快速部署和使用 HStreamDB 叢集,我們開發了專門的叢集部署指令碼,可通過以下連結下載 https://github.com/hstreamdb/...
  • 隨著 HStreamDB 配置項的不斷增加,原有的通過命令列選項傳遞配置的方式不太足夠,因此我們又引入了通過配置檔案的方式來統一管理配置項,請參考:https://hstream.io/docs/en/la...

未來規劃

在接下來的開發工作中,我們將重點實現以下目標:

  • 持續提升系統的穩定性,達到生產可用
  • 持續改善系統可用性和運維監控能力,增強安全性支援
  • 對現有的流處理引擎進行升級,帶來更強大的實時處理和分析能力

敬請期待!

相關文章