粗看WASP :Alibaba的海量數據分布式數據庫探索
==是什么 ==
Wasp是阿里集團開發的基于HBase的一個數據庫方案,其根本出發點是仿效Google的Megastore,“在HBase系統上不犧牲線性拓展能力的同時又能提供跨行事務、索引、SQL的功能”
==架構原理 ==
其設計原理可以參考Megastore的相關論文,Wasp自己的相關設計使用文檔可以在下面兩個地方找到
https://github.com/alibaba/wasp/wiki/Chinese
http://wenku.baidu.com/view/c85f50d984254b35eefd345c.html
Megastore框架的核心思想是將數據分割成不同的EntityGroup,EntityGroup的數據備份是跨Datacenter存放的,在EntityGroup內部提供完整的ACID支持,保證數據寫操作在所有數據中心的同步備份。
從具體實現上來看,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語法的解析,采用Netty和Protobuf構建服務器內部通訊協議框架。
Wasp的數據主要映射為HBase上的4類表,全局的 _FMETA_ 表記錄所有Wasp表的meta信息,每個wasp表數據對應的entity表,相同Entitygroup Key管轄下所有表對應的Redolog表,以及索引表。
目前Wasp對SQL的語法支持還很簡陋,以Query為例,僅支持Equal condition和索引上的Compare類Range condition。對Int等數據結構的支持,在比較操作中也存在bug,其它稍微復雜一點的SQL語法,如UDF,limit, having, group by, join, order by 等等操作目前都是沒有的,當然這可能也取決于wasp的具體應用場合,或許只需要最簡單的Equal和特定字段上的Range condition類的查詢。
此外從SQL Plan實現的角度來看,似乎目前只是簡單的轉換為Get/Put/Delete等HBase操作,以HBase的角度來看是純粹的客戶端應用程序,沒有使用任何Hbase RS端的能力,如filter,coprocessor等等加以優化,因此如果要實現Aggregation類的功能,在性能上大概會受到比較大的影響。
==總結 ==
總體看來,Wasp并不能提供一個海量數據跨數據中心的解決方案,其規模受單個Hbase cluster所限,因此一定程度上來說和MegaStore所解決的目標問題還是有很大差距的,Wasp更多的是在HBase之上提供一個增強的方案,提供簡單的SQL接口,和跨行事務的支持。如果光從SQLon HBase的角度上看,與SaleForce的Phoenix有很大的差距。但在跨行事務支持方面還是優于Phoenix的 (Phoenix的在事務方面的支持幾乎完全取決于HBase自身的能力),代碼功能等目前看來還不成熟,還要看將來的發展情況。當然,從代碼框架,設計模式等方面上看,作者的編程功力還是很不錯的,要學習。