CnosDB 涅槃重生:棄用Go, 全面擁抱Rust

語言: CN / TW / HK

CnosDB社群的愛碼士們,想必大家最近已經發現了,基於Rust版本的CnosDB Isipho已經切換到GitHub主站,並且社群團隊也不再維護與支援Go版本的CnosDB。首先還是給大家致以誠摯的歉意,之前的計劃和決策的倉促給大家帶來了不必要的麻煩。但是本著對社群負責的態度,在這裡也給大家一個詳細的解釋:為什麼我們放棄Go,擁抱Rust去構建一個新的時間序列資料庫。

 

CnosDB 涅槃重生:棄用Go, 全面擁抱Rust

CnosDB Isipho是什麼

CnosDB Isipho是一個基於Rust研發的時間序列資料庫,具有高效能、高壓縮比、高可用的特點,並且將來滿足分散式雲原生。從2022年3月開始,CnosDB團隊開始在GitHub上開源了Isipho的原始碼,並且持續構建系統。CnosDB Isipho致力於解決時間線膨脹問題、具備超大規模時間序列支援以及更好的生態特性。關於CnosDB Isipho的特點及集體功能架構,可以參閱CnosDB Isipho的路線圖:https://github.com/cnosdb/cnosdb/blob/main/README.md

相對於Go,Rust是一門更好的資料庫開發語言

第一個版本的CnosDB選取了Go作為開發語言,當時認為Go可以很好的處理易用性和系統性能的平衡,但是隨著對於Go語言的深入瞭解,我們也發現Go語言在資料庫系統編寫,尤其是時序資料庫編寫中的問題。

Go帶來的問題主要有:Go runtime帶來的 GC會引起效能抖動,而時序資料庫需要在大負載環境下極其穩定;Go對泛型支援也不好,語言表達能力受限,如果需要對資源進行更好的操作,對於開發人員的要求非常高。我們的Go版本的效能測評並沒有顯著優於已有頭部產品。Go版本仍然有很多的問題要去解決,為了應對雲原生帶來的挑戰,更好的服務好企業上雲,Go版本需要對原來的版本進行大規模重構,以便:提高分散式擴充套件性以及實現最終一致性模型;提升免運維的能力;提升儲存和查詢效能;同時支援多租戶,雲原生。

在我們困擾於Go語言所帶來的的問題時,CnosDB的Isipho團隊已經在Rust上開展了近五個月的工作。相對於Go語言,Rust具有以下特性:Rust 無GC,更精確的記憶體控制,硬體親和性高;Rust 支援範型 match 表示式,表達能力更加豐富;Rust 有更高的可靠性,可以在編譯期發現各種錯誤。開發者對Rust的喜愛也是溢於言表。

隨著Rust 在基礎軟體領域的應用也蓬勃發展,甚至Linux也開始使用Rust進行系統核心的重構( https://www.zdnet.com/article/linus-torvalds-is-cautiously-optimistic-about-bringing-rust-into-the-linux-kernels-next-release/ ),而且越來越多的資料庫廠商開始嘗試使用Rust去實現系統,我們也堅信,使用Rust可以構建更好的服務於客戶的時序資料庫。

為什麼放棄Go版本

對於一個初創團隊組織的開源社群,同時維護兩個不同技術棧的產品,十分困難;團隊也是很難進行有效的溝通和管理。開發團隊在技術棧割裂的情況下已經艱難地進行了兩個季度的工作,而我們觀察到在我們社群上也有了分裂的跡象,有些愛碼士傾向於Go版本的學習和使用,而更多的開發者湧入社群是因為我們的Rust版本和它的課程:《使用Rust構建一個TSDB》

如上文所述,時序資料庫在朝雲原生生態大幅度邁進,在Go版本上去實現諸如多租戶、雲原生等功能,幾乎就是把原來的程式碼推倒重新來。Rust版本的進展順利,讓我們選擇不繼續在錯誤的路上矇眼狂奔,而是進行了一個艱難的取捨,放棄Go語言版本,並將公司的全部開發力量投入Rust版本的研發,向社群和使用者交付更好的下一代時序資料庫產品。

現在,CnosDB Isipho版本的儲存引擎已經構建完畢,開發團隊正在全力開發查詢引擎和索引功能,計劃將在今年年底之前帶來單機版本的CnosDB Isipho。同時ConsDB也竭誠希望對時序資料庫、對Rust有興趣的愛碼士們加入CnosDB社群,貢獻程式碼或者成為全職開發者。社群活動不會減少,大家在期待CnosDB Isipho的同時,我們繼續推出豐富內容,包括但不限於混沌工程的課程以及Rust的後續課程。

始於萬物互聯,開源橫跨五洲。希望大家繼續關注和支援CnosDB!

 

參與 CnosDB 社群交流群:

 

掃描下方二維碼,加入 CC 進入 CnosDB 社群進入社群交流,CC 也會在群內分享直播連結噠

up-55fffc7defd74a930ab4770f21926394f77.png

up-e6ddac065b77926352ac91153d48f45518c.pngup-1ba48d2bed17e7c786f015c1ccc2838c1ec.gif