天天看點

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

摘要: 高斯Redis,兼具開源Redis和HBase各自優點,提供成本更低、性能更好、靈活性更強的資料庫服務!

本文分享自華為雲社群《華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比》,原文作者:高斯Redis官方部落格。

HBase是一個分布式的、面向列的開源資料庫,基于Hadoop生态圈,在NoSQL蓬勃發展的今天被國内外衆多公司選擇,應用于現代網際網路系統的不同業務。本文簡要描述了HBase的基本架構和使用場景,重點分析了HBase關鍵特性在此場景下的表現,以及HBase在使用上尚存的痛點;同時介紹了華為自研的強一緻、持久化 NoSQL資料庫GaussDB(for Redis)(下文簡稱高斯Redis)在以上場景中的表現,以及對于HBase痛點問題的改善。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

HBase的實體結構主要包括ZooKeeper、 HMaster、 RegionServer、HDFS 等元件。 ZooKeeper 用以實作 HMaster 的高可用、 RegionServer 的監控、中繼資料的入口以及叢集配置的維護等工作。HMaster的作用是維護整個叢集的Region資訊,進行中繼資料變更及負載均衡工作。RegionServer是直接處理使用者讀寫請求的節點,實際處理所配置設定Region的讀寫、分裂等工作,并使用WAL實作容錯機制。HDFS提供最終的底層資料存儲服務,提供中繼資料和表資料的底層分布式存儲服務,同時利用資料多副本,保證的高可靠和高可用性。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

在邏輯結構中,RowKey是表的主鍵,并按照字典序進行排列,HRegion 達到一定大小後也會按照 RowKey 範圍進行裂變。ColumnFamily在縱向上對表進行切分,将多個Column分成一組進行管理,在HBase中,ColumnFamily是表的schema而Column不是。Cell則是儲存的具體value,在HBase中,所有的資料都是以位元組碼的方式進行存儲。

标簽資料是稀疏矩陣的代表,描述了實體的各類屬性,主要應用于智能推薦、商務智能或營銷引擎等領域。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

三個不同的使用者在同一公司旗下的不同APP中留下了大量的行為資料,這些資料中包含了直接填寫的使用者資料、使用APP的具體行為以及領域專家對某些現象的标記,通過背景的标簽算法可以得到這樣的資料:

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

我們能發現,對使用者行為采集存在局限性,是以所能得到的标簽種類各不相同,表中大量的資料項隻能被置空,也就是所謂的稀疏矩陣。而且随着使用者更深度的使用APP,可以預見到,對使用者感興趣領域/不感興趣領域會逐漸被發掘,那麼表的列也會随之增加。

這樣的特點對于MySQL是災難性的,這是因為在MySQL建表時就必須定義表結構,屬性的動态增删是巨大的工作量,同時大量NULL值的存儲會導緻存儲成本變得難以接受。但是使用HBase存儲時,未指定value的列不會占用任何的存儲空間,因而可以将有限的資源高效利用,且HBase表在建立時隻需指定ColumnFamily,而對于Column的增删極為容易,有利于應對未來屬性的擴張。

車聯網系統是利用車載裝置收集車輛運作時産生的各項資料,通過網絡實時上傳,在平台進行動态分析和利用。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

我們可以發現,車聯網系統所面對的資料特點是大量車輛終端高并發的不間斷寫入TB級甚至PB級的資料,而且對于實時分析來說,為了保證分析結果的時效性,又要求查詢的低延遲時間響應。

HBase采用LSM存儲模型,可以從容應對高并發寫入的場景,同時也能保證讀時延在可接受的範圍内。同時HBase具有良好的水準擴充能力。通過增減RegionServer來實作對存儲容量動态調整,滿足對使用成本的要求。

在移動支付領域,保證曆史交易記錄等敏感資訊的安全性是一個重要的話題。當資料中心遭遇自然災害、外部攻擊時,必須保證這些資訊不丢,而且從業務角度要保證RTO盡可能短、RPO盡可能為0。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

HBase基于底層的HDFS作為存儲系統,HDFS實作了三副本政策,按照一定的規則将副本放在不同的節點或機架中,本身具有較高的容災能力。在工程實踐中,也産生了Region replica、主備叢集、互備雙活等政策來盡可能進行災備并保證高可用。

從上文三個例子可以看出,HBase基于其本身的設計,在稀疏矩陣的存儲、抗高并發大流量寫入、高可用和高可靠場景下表現得相當優秀,但這并不意味着HBase可以沒有任何弱點的适應所有場景。

1. 朱麗葉暫停

Java系統繞不開Full GC的讨論。HBase在Full GC造成STW時,ZooKeeper将收不到來自RegionServer的心跳,進而将此節點判定為當機,由其他節點接管資料,當Full GC結束後,RegionServer為防止腦裂而主動自殺,稱之為朱麗葉暫停。這類問題一般需要資深的java程式員根據業務場景進行細緻的GC政策調優才能盡可能避免。

2. 資料類型少

HBase支援存儲的類型是位元組數組,在使用中需要将字元串、複雜對象、甚至圖像等資料轉化為位元組數組進行存儲。但是這樣的存儲隻能表示松散的資料關系,對于集合、隊列、Map等資料結構或資料關系,則需要開發人員編碼實作轉換邏輯才能進行存儲,靈活性較差。

3. 性能之瓶頸

HBase是按照RowKey的字典序分割為Region進行存儲的,不佳的RowKey設計方案會造成負載不均,請求大量打到某一個Region形成熱點,那麼所在RegionServer的IO有可能被打爆。

RegionServer掉線後,需要由ZooKeeper發現節點當機,将其負責的資料移動到其他節點接管,并對meta表中的Region資訊進行修改。在此過程中,RegionServer上的資料将變得不可用,對于這部分資料的請求會被阻塞。

開源Redis的特性在一定程度上解決了HBase的痛點問題,因其具有以下優點:

1. 更豐富的資料類型

Redis 5.0協定中包含了String、List、Set、ZSet、Hash、Bit Array、HyperLogLog、Geospatial Index、Streams九種資料類型,以及建立在這些資料類型上的相關操作。與HBase的單一資料類型相比,Redis給了開發人員更多的選擇空間來表達資料和資料間的互相關系。

2. 純記憶體的絲滑感受

開源Redis的本質是一個key-value類型的記憶體資料庫,整個資料庫都加載在記憶體中進行操作。這也就意味着Redis的響應速度和處理能力遠超過需要進行磁盤IO的HBase,目前大量的測試結果都表明,開源Redis的性能可以達到每秒10萬次讀寫。

純記憶體的操作也使得開源Redis有無法避免的弱點,主要展現在以下兩方面:

1. 大資料量下的噩夢

當資料量持續增大時,有限的記憶體成為使用限制。此時必須使用更大容量的記憶體才能完成資料的全量加載,而記憶體價格遠高于磁盤價格,會導緻使用成本的激增。同時常見的伺服器記憶體多是GB級,也嚴重限制了開源Redis在高量級資料庫領域的競争力。

2. 斷電後該何去何從

純記憶體操作的另一弊端是當機後資料會全部丢失。現有的解決方案是使用AOF或RDB的方式将資料持久化,程序重新開機後可以在記憶體中将資料恢複。但這兩種方式并不完備,AOF是執行指令的集合,是以恢複速度相對較慢;RDB是定期dump記憶體資料,是以存在資料丢失的風險。除此之外,在最壞場景下需要預留一半記憶體,降低了記憶體的使用率。

HBase和開源Redis各有所長,這時一句熟悉的話在腦海中浮現:小孩子才做選擇題,成年人當然是全都要,高斯Redis的兼具二者優點,更好的滿足了對資料庫服務的需求。

華為雲PB級資料庫GaussDB(for Redis)揭秘第九期:與HBase的對比

相容Redis5.0協定

延續開源Redis的豐富資料類型,為描述資料和資料關系提供更多選擇。例如在稀疏矩陣場景使用Hash類型,甚至無需定義HBase表ColumnFamily,可以更靈活的進行資料組織。

性能追平開源Redis

參考【華為雲高斯DB(for Redis)與開源Redis叢集性能對比】可以看出,高斯Redis與開源Redis的性能幾乎相同,在大流量高并發的場景中,可以提供比HBase更好的讀寫表現。

更高的災備可靠性

高斯Redis基于華為自研的分布式、強一緻資料湖DFV建構的存儲層,在部分局點的已經上線了3AZ特性,AZ間做到風火水電的實體隔離,一個AZ的故障不會影響到其他AZ,與HBase相比更好保證了關鍵資料的可靠性。

秒級彈性伸縮

高斯Redis使用存算分離架構,資料下沉至存儲池,計算節點擴縮容僅修改映射無需搬遷資料,實作秒級平滑伸縮,不存在HBase在Region上下線時出現的資料不可用問題。

低成本海量持久化存儲

全量資料經過邏輯和實體壓縮,将落入共享存儲池DFV持久化存儲,無當機資料丢失問題,每GB的綜合成本不到開源Redis的十分之一。實際應用中可根據業務需要随時對DFV容量進行擴容,不存在開源Redis存儲受限的問題。

自動化監控運維等其他優勢

高斯Redis配套全面的監控系統可對請求時延等關鍵性能名額可視化監控,同時可實作故障節點自動摘除、平滑移動、自動告警、自動恢複。此外,高斯Redis利用hash政策對資料進行均衡,與HBase相比更好的避免了熱點問題,而且不存在Full GC煩惱。

高斯Redis在相容Redis5.0協定的基礎上,兼具開源Redis和HBase各自優點,結合華為自研DFV存儲的相關特性,規避HBase和開源Redis在典型場景下的弱點,提供成本更低、性能更好、靈活性更強的資料庫服務。

本文作者:華為雲高斯Redis團隊。

杭州西安深圳履歷投遞:[email protected]

更多技術文章,請關注高斯Redis官方部落格:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

高斯Redis官方首頁:https://www.huaweicloud.com/product/gaussdbforredis.html

點選關注,第一時間了解華為雲新鮮技術~

繼續閱讀