粗看WASP :Alibaba的海量數據分布式數據庫探索

jopen 10年前發布 | 11K 次閱讀 WASP

==是什么 ==

 

Wasp是阿里集團開發的基于HBase的一個數據庫方案,其根本出發點是仿效GoogleMegastore,“在HBase系統上不犧牲線性拓展能力的同時又能提供跨行事務、索引、SQL的功能”

 

==架構原理 ==

 

其設計原理可以參考Megastore的相關論文,Wasp自己的相關設計使用文檔可以在下面兩個地方找到

 

https://github.com/alibaba/wasp/wiki/Chinese

http://wenku.baidu.com/view/c85f50d984254b35eefd345c.html

 

Megastore框架的核心思想是將數據分割成不同的EntityGroupEntityGroup的數據備份是跨Datacenter存放的,在EntityGroup內部提供完整的ACID支持,保證數據寫操作在所有數據中心的同步備份。

 

20130730144040453.png

 

 

從具體實現上來看,Wasp并沒有實現Megastore在跨Data Center方面的相關設計思想,僅僅只是采用了Entity Groups這樣的方案來劃分和管理數據。

 

Megastore在很多設計上都是圍繞超大規模的數據的并發這樣一個核心思想,比如Entity Groups的跨地域備份,讀數據時非主從式的平等節點由Paxos動態選主的思想等等,都是為了保證讀操作時的去中心化,以提高性能,而Wasp的架構方案更像HBase自身的方案,存在FMaster節點和FServer節點,通過Zookeeper確定當前FMaster,每個FServer管理若干Entity Groups,基本還是固定的主從中心式的。在Entity Group的使用上,Wasp則基本保留了Megastore的原始設計,通過RedoLog / MVCC / Entity兩階段提交等方式解決并發讀寫的一致性問題

 

==具體實現 ==

 

Wasp使用Alibaba自己的Druid項目實現SQL語法的解析,采用NettyProtobuf構建服務器內部通訊協議框架。

 

Wasp的數據主要映射為HBase上的4類表,全局的 _FMETA_ 表記錄所有Wasp表的meta信息,每個wasp表數據對應的entity表,相同Entitygroup Key管轄下所有表對應的Redolog表,以及索引表。

 

目前WaspSQL的語法支持還很簡陋,以Query為例,僅支持Equal condition和索引上的CompareRange condition。對Int等數據結構的支持,在比較操作中也存在bug,其它稍微復雜一點的SQL語法,如UDFlimit, having, group by, join, order by 等等操作目前都是沒有的,當然這可能也取決于wasp的具體應用場合,或許只需要最簡單的Equal和特定字段上的Range condition類的查詢。

 

此外從SQL Plan實現的角度來看,似乎目前只是簡單的轉換為Get/Put/DeleteHBase操作,以HBase的角度來看是純粹的客戶端應用程序,沒有使用任何Hbase RS端的能力,如filter,coprocessor等等加以優化,因此如果要實現Aggregation類的功能,在性能上大概會受到比較大的影響。

 

==總結 ==

 

總體看來,Wasp并不能提供一個海量數據跨數據中心的解決方案,其規模受單個Hbase cluster所限,因此一定程度上來說和MegaStore所解決的目標問題還是有很大差距的,Wasp更多的是在HBase之上提供一個增強的方案,提供簡單的SQL接口,和跨行事務的支持。如果光從SQLon HBase的角度上看,與SaleForcePhoenix有很大的差距。但在跨行事務支持方面還是優于Phoenix Phoenix的在事務方面的支持幾乎完全取決于HBase自身的能力),代碼功能等目前看來還不成熟,還要看將來的發展情況。當然,從代碼框架,設計模式等方面上看,作者的編程功力還是很不錯的,要學習。

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!