雙十一的資料庫,資料庫的雙十一

微信公眾號:飛總聊IT

我一個做資料庫多年的朋友給我轉了一篇文章,是發表在InfoQ上的,題目是「阿里自研分散式強一致關係型資料庫--X-DB」。朋友想問一下我的看法。讀了這篇文章之後,我的第一個感覺這個資料庫真牛逼。有一副對聯可以估計可以形容之。上聯是「拳打Oceanbase」,下聯是「腳踢PorlaDB」。橫批「跑過雙十一」。

當然這是個玩笑話。我仔細的閱讀了這篇文章。簡單來說,這篇文章介紹了X-DB選擇了和MySQL的兼容策略。如果我透過字裡行間理解的正確的話,這個資料庫的代碼應該是復用了MySQL的很多代碼。而不是如同Oceanbase那樣萬丈高樓平地起。一切都是自己搭的。

文章的第二部分主要強調了這個系統使用的自己優化的Paxos版本X-Paxos,以及各方面的優化。從而讓這個系統具備了全球容錯能力。文章的第三部分則講了如何在強一致下保持系統的高性能。但是裡面描述的一些東西比如一體化日誌其實並不新鮮,無論PolarDB還是Aurora都對MySQL的日誌進行了大量改動,減少了IO消耗。

我順著這篇文章提到的一些辭彙搜到了一個叫做何登成的博客。恕我孤陋寡聞第一次聽說這個人。但是看完他博客的文章,我必須說這個人做學問的態度非常的踏實,他的博客寫的也真心是好。我有很久沒有仔細的一篇一篇的閱讀下來了。所以如果從作者的角度來講,我相信X-DB可能是一個好東西。

2但是我也有很多困惑。這個困惑主要還是X-DB到底是一個什麼樣的產品。其成熟度有多高。是不是一個只支持特定業務的產品。也許全球容錯做得很好,因為X-Paxos做得不錯,是不是有什麼其他的缺陷。

對於InfoQ這篇文章的閱讀,讓我頗有回到上個世紀,閱讀畝產萬斤的水稻的感覺。又覺得真是自己的幸運,生活在這個時代,可以見證宇宙第一牛逼資料庫在2017年底在阿里集團誕生。這種感覺和我讀何老師的博客的謙虛謹慎,嚴謹踏實做學問的態度,形成了非常強烈的反差。

好在文章里最後寫了一段有關X-DB的展望,我就把全文貼一下:

X-DB 1.0 是整個 X-DB 的計劃的一部分,整個 X-DB 計劃將按照三步進行

  1. X-DB 1.0(X-Cluster): 集成 X-Paxos,實現金融級分散式強一致能力、一體化的架構設計以及統一的生態環境。
  2. X-DB 2.0: 基於自研高性能低成本存儲引擎 X-Engine,與分散式存儲結合打造的計算與存儲分離架構,能獨立擴展計算和存儲的能力,為業務在不同場景的負載下,提供靈活的伸縮能力。同時得益於全新設計的存儲引擎,能夠提供其他同類產品難以匹敵的性能。
  3. X-DB 3.0: 新一代分散式關係型資料庫,同時支持了數據自動分片負載均衡,多點可讀可寫,跨域強同步,AZ 內快速擴充計算節點的計算存儲分離架構,應用了一系列技術:為充分發揮硬體性能的軟硬體結合技術以及根據數據冷熱特點的分層混合存儲技術,無論上是在擴展性和高可用性,還是成本和性能上都做到極致,是 X-DB 計劃資料庫系統演進的最終形態。

所以我們大致可以認為,現在的X-DB其實就是X-Paxos和Alisql給整合了。而接下去會替換innodb這個存儲引擎。而X-DB3.0這裡確實是泄露了很多的天機。簡單的來說,這個系統目前應該只支持靜態的sharding。做不到自動分片。它的一致性模型到底是什麼也寫的稀里糊塗的。如果是Alisql整合了X-Paxos,估計是不可能支持全局一致性的。至於多點可讀可寫,上次我寫了Oceanbase的研究以後,Oceanbase的人告訴我最新的版本裡面已經支持自動分區和多點可寫可讀了。

所以我們可以這樣認為,X-DB現在最牛的估計就是他們組做的這套X-Paxos了。從何老師的博客文章來看,顯然X-Paxos確實應該有真材實料的。那麼我們是否可以認為,這個系統其實就是Paxos的實現上比較強,其他方面基本上也就是沿用了Alisql的源代碼。

這牽扯到了我一直以來很困惑的問題。我覺得研究阿里巴巴的資料庫產品的實現很痛苦。一方面,每個阿里巴巴出品的資料庫都告訴我說自己跑過雙十一,非常的牛逼。另外一方面,我能夠搜集到的介紹技術實現的資料屈指可數。而宣傳文稿則總是慷慨激昂,讓我不知道到底哪些應該相信,哪些不應該相信。

舉個例子來說,2014年在VLDB的阿里之夜活動上我聽陽老師介紹Oceanbase是怎麼樣取代Oracle的,就讓我對Oceanbase的實現非常的有興趣。但是我在網上可以找到的Oceanbase的細節並不多。雖然有一些ppt,也找到了早年陽老師在華東師範大學學報上發表的關於Oceanbase的一篇文章。

所以我自己去讀這些東西,整理出Oceanbase到底做了什麼,怎麼做的。這個過程並不是一件很愉快的事情。等我把公眾號文章寫出去以後,很多知情人士會跳出來告訴我,我寫的東西不是過時了就是錯了。說真話,這真不賴我。

當然我也可以不需去研究。但是如果不研究一下的話,我怎麼去相信這個資料庫,那個資料庫,還有那個資料庫都很牛逼呢?有時候文章寫的和實際上到底怎麼樣,之間顯然是有距離的。

通過分析來看,我應該可以相信X-DB這個系統在Paxos的實現上應該很厲害。而且看起來是一個早起的產品。那麼如果拿X-DB的Paxos實現和Oceanbase的Paxos的實現比一下,結果是什麼呢?如果X-DB脫離了目前相對簡單靜態sharding的情況,要做動態分區分裂的話,這個Paxos的實現會有什麼樣的變化呢?我知道Oceanbase用的是Paxos而不是Raft主要還是陽老師在知乎上面的答疑問讓我豁然開朗。從知乎的答疑上扒信息,去研究一個產品,也是做學問做的辛苦。

我今年在德國慕尼黑開會的時候有幸和Oceanbase的一些人聊聊Oceanbase的實現。同時我也見到了尚未正式發布的PolarDB的主創者。單純就和這些人接觸來看,無論是Oceanbase的人還是PolarDB的人,對不同問題的看法可能有不一樣的見解,但是都是很踏實做資料庫的人。給我的感官都很好。

只是作為一個用戶來說,我覺得阿里巴巴集團推出來的資料庫產品有點多。多的讓我不知道怎麼去選。我不知道什麼樣的業務場景下PolarDB是最合適的,什麼樣的業務場景應該上Oceanbase,又需要在什麼樣的情況下用X-DB。

如果這些東西我都不知道的話,又假設這些都作為雲服務開放出來,我想作為客戶來說,肯定會有選擇困難症。而且還有一點,我當然知道雙十一很牛。但是換句話說,到底有多少客戶需要用到雙十一這樣的規模的數據量,並發度等等等等,我是很存疑的。大體上在我看來,用得到這樣規模的,一般不會去上阿里雲,來上阿里雲的,肯定用不到這種極端情況。

所以這些資料庫也許都是宇宙無敵超級牛的資料庫。也許這些資料庫都可以取代Oracle。但是我覺得一個在極端情況下能夠成功運行的系統,很大程度上會針對特定場景進行優化,也有可能出現單機性能不怎麼樣的現象。譬如說,spanner這個很牛的newsql的單機性能就頗一般。

這種單機性能的損失,對很多小用戶來說,就是問題了。畢竟是真金白銀花出去,低效率的東西用起來。從這個角度來看,我會覺得那個單個mySQL容量超大,一般用戶不用去擔心分區問題的PolarDB可能是對很多用戶最好的選擇。然而,我必須說,即使各個都很牛各個都上過雙十一,我作為用戶,我不知道要選哪個DB。

從另外一個角度來說,一個系統到底牛不牛,還是需要外界來評價的。比如說谷歌的spanner好歹也是發了OSDI的論文的。亞馬遜的Aurora也是寫了SIGMOD論文的。在比較權威的國際會議上發表一下一個系統的實現,既能讓國際同行給一個中肯的評價,又可以展示一下自己的肌肉,一舉兩得。

我是做學問出身的人。儘管學術界里也有這樣那樣的問題,我還是相信,一個發不出國際論文的系統,無論說的有多好,畢竟自己給自己畫餅。可信程度總是要打個折扣的。再說如果沒有谷歌等公司發表的論文告訴大家Paxos要踩什麼坑,我想後來者估計也會更艱難一些。

所以如果X-Paxos,X-DB或者Oceanbase什麼時候能真的寫一篇論文,得到業界的人的認可,那既免除了像我這樣要學習這個系統的實現,到處找材料最後還被告知我說的很多都是錯的尷尬,又可以在國內國際上都正本清源,確確實實的讓大家承認這系統就是牛。至於是不是跑了雙十一,有沒有經過考驗,也許這對團隊的業績很重要,僅僅是這個不足以讓我相信這個系統是宇宙無敵資料庫。

我們還可以再加一點,不妨X-DB公布一下自己跑benchmark比如TPC-C的情況。當然從何老師的博客看,transaction處理速度的數量級是非常嚇人的。所以估計跑個benchmark應該問題不大,數字應該很好看。這個其實也同樣適用於Oceanbase。在我和Oceanbase的團隊交流的過程中,儘管各方面我都感覺到對方技術非常的紮實,但是對方說TPC-C也有人在做,但是不是隊伍的優先順序。我始終不知道,這難道是說穩定的跑起來TPC-C對於一個可以取代Oracle的資料庫有那麼難?


推薦閱讀:

oceanbase號稱全球第一個分散式關係型金融資料庫,牛叉在哪裡?在cap框架下有什麼技術突破嗎?
OceanBase的memtable設計成key為主鍵,value為行操作鏈表的目的是什麼?
阿里的Oceanbase做異地多活, 而阿里又說異地多活是由DTS來做,那麼問題來了,到底用的是哪個?
oceanbase和oracle未來會怎樣?會代替掉oracle嗎?或者說oracle以後會沒落嗎?

TAG:OceanBase | AliSQL | 数据库 |