如何評價小米開源資料庫 pegasus?
項目地址:XiaoMi/pegasus
引用:「Pegasus是小米雲存儲團隊開發的一個分散式Key-Value存儲系統,最初的動機是彌補HBase在可用性和性能上的不足。Pegasus系統的Server端完全採用C++語言開發,使用PacificA協議支持強一致性,使用RocksDB作為單機存儲引擎。」
作為Pegasus項目的發起者,我經歷了Pegasus系統從無到有的整個過程。
感興趣的可以看看wiki和ppt,wiki在 XiaoMi/pegasus ,ppt在 docs/ppt 文件夾下。
Pegasus是什麼?
Pegasus是小米雲存儲團隊開發的一個分散式Key-Value存儲系統,它的目標是高可用、高性能、強一致和高擴展。Pegasus系統的Server端完全採用C++語言開發,使用PacificA協議支持強一致性,使用RocksDB作為單機存儲引擎。經過兩年多的開發,Pegasus從無到有,到現在支持了近十個業務,正一步步向著最初定下的目標前進。
Pegasus有什麼特性?
- 高可用:系統是高可用的,即使在部分伺服器掛掉之後,也能在秒級的極短時間內恢復服務,盡量較少對用戶的影響,服務可用度達到99.99%以上。
- 高性能:系統能夠提供高性能的讀寫服務,線上99%的讀寫延遲控制在5毫秒以內。
- 強一致:系統對用戶提供強一致性的語義,使用戶編寫業務邏輯時更輕鬆。
- 高擴展:系統能夠很容易地增減節點,以應對業務負載的變化,並且運維是自動化的。
- 易使用:系統給用戶提供簡單易懂的庫和介面,方便用戶使用。
Pegasus有什麼價值?
首先,它可以滿足對延遲要求很高的在線業務的需求,譬如廣告業務。另外,它也可以替代Redis系統的一些使用場景,在滿足一定性能的同時,提供持久化、高可用、自動運維的特性。
為什麼要開源?
一方面,希望把有用的東西分享出去讓更多人使用,提升公司的技術影響力。另一方面,通過開源可以讓外部的力量參與貢獻,一起把系統做得更完善。
~~~~~~~~~~~~~~~~~~~~~~~~
國內開源的氛圍應當說越來越好,我們只是加了一片綠葉。
對Pegasus這個系統本身來說,開源只是一個新的開始。
~~~~~~~~~~~~~~~~~~~~~~~~
10/19更新
今天讓設計師mm幫忙設計了Pegasus的新LOGO,感覺還挺好看的,不是么?:-)
另外今天早上InfoQ將我們寫的一篇Pegasus相關的技術文章推送到了頭條:
小米開源分散式KV存儲系統Pegasus
文章的作者孫偉傑從浙大應屆碩士畢業就直接加入到這個項目,尤記得2015年4月項目之初,團隊就我和他兩個人,一起做調研、看論文,那時系統的名字都還沒想好。兩年多時間過去,Pegasus系統逐漸成型,而偉傑也從項目中獲得了很大的成長,無論分散式理論還是工程實踐上都是一把好手。今年7月,偉傑就在ArchSummit 2017深圳架構師峰會上做了演講,介紹了Pegasus實現背後的故事:全球架構師峰會深圳站2017。這篇文章就是在演講的基礎上整理而來,可以說是乾貨滿滿,感興趣的可以看看,相信能找到一些收穫。
而在此之前,我也曾在ArchSummit 2016北京架構師峰會做過演講,當時偏重於設計:從 Pegasus 看分散式系統的設計。這兩次演講的PPT都放到了GitHub上:https://github.com/XiaoMi/pegasus/tree/master/docs/ppt
這也從側面展現了我們團隊的技術氛圍還是蠻不錯的,能專註地做一些東西,為公司貢獻價值的同時,團隊成員自身也能得到成長。當然這離不開老大們的支持,他們一方面對項目有信心,另一方面也給了很大的空間和耐心。在項目推廣之初,業務方也給予了很多信任和理解,甘當小白鼠,幫我們踩了不少坑。
寫下上面這些文字的時候,我心中有激動有感恩有壓力,當然更多的是壓力。畢竟這才是開始,我清楚地知道系統離完善還有很大距離,後面還有很長的路要走,無論是支持公司內部的業務,還是在開源上的維護和推廣,都具有相當的挑戰。不過路是走出來的,我對自己和團隊都有信心。另外團隊還在招人,希望有更多牛人加入我們,一起來搞點事情。
沒想到還真有人使用微軟開源的rdsn分散式系統原型來做產品,本來要在專欄中寫幾篇關於rdsn的文章。現在看到小米竟然有人基於其做了分散式kv資料庫。值得一看,高可用性和穩定性不好說。
搞分散式系統的可以看下:
Microsoft/rDSN
這個項目是微軟亞研的系統組大牛: 郭振宇 https://imzhenyu.github.io/about/docs/ZhenyuGuo.CV.201608.pdf 帶頭做的一個銜生項目。其人之前是微軟亞研系統組的主任研究員最近聽說跳到螞蟻金服了。整個架構原型值得學習,更有多篇不錯的系統方面論文值得一看和借鑒。
我所在的項目是Pegasus孵化期的小白鼠,拋開細節,簡單說說整體上的主觀感受吧:
- HBase級別的容量。但是,不管是從易用性方面,還是性能方面,Pegasus好太多了;這直接導致我們項目組內把所有的HBase場景全部用Pegasus代替了;
- 略遜於MySQL的響應速度。絕大部分請求的響應速度都很不錯,監控上即使抽樣到99.99%也只有很少的較高延遲的情況,對我們業務來講夠用了。美中不足,個別的超時現象還是會存在,表現不如MySQL穩定;
- Redis級別的讀寫並發度。我們的業務場景QPS大概在1w左右,再綜合一些數據拓展,Pegasus的並發度能到好幾萬,目前Pegasus看起來還是遊刃有餘的樣子。
- 可以接受的穩定性,內測期間穩定性因為頻繁的升級可能會稍差一些,不過對於我們的線上服務來講已經夠了,將來應該會越變越好;
- 不足的地方,不支持服務端multiKey的查詢,有些場景很頭疼;偶爾的超時問題也很惹人煩;
總體上,這麼長時間使用下來,對Pegasus還是非常看好的。現在終於開源了,希望各界天才程序員能一起完善它,成為有分量的「國貨」(希望將來能有我的一行代碼,哪怕是注釋,哈哈)。
Pegasus,我看好你喲!
看了設計模型,看了部分代碼,值得學習,反正我寫不出來。
沒有看到第三方的benchmark結果之前,
一些開發者來現身說法,對於業內人士而言,宣傳效果不明顯。耐心等第三方benchmark。集合了HBase與Radis的優點,我覺得可以有。不知道有人願意做benchmark嗎?
兄弟,你這是自己人提問題,自己人回答啊。宣傳的節奏啊。
推薦閱讀: