近日,阿里云宣布正式開源基于MongoDB的MongoShake數(shù)據(jù)同步平臺(github地址),該系統(tǒng)可以跨數(shù)據(jù)中心進(jìn)行數(shù)據(jù)同步,最高處理QPS可達(dá)50萬左右,使得跨數(shù)據(jù)中心的高效的災(zāi)備和多活業(yè)務(wù)成為可能,解決了之前多個數(shù)據(jù)中心部署災(zāi)備不靈活、單點可寫的問題,給業(yè)務(wù)帶來便利,減輕運(yùn)維壓力,其相比于業(yè)內(nèi)現(xiàn)有的方案具有較強(qiáng)的功能和性能方面的提升。
同時,MongoShake是一個通用型平臺服務(wù),作為數(shù)據(jù)連通的橋梁,打通各個閉環(huán)節(jié)點的通道。通過MongoShake的訂閱消費(fèi),可以靈活對接以適應(yīng)不同場景,例如日志訂閱、數(shù)據(jù)中心同步、監(jiān)控審計等。其中,集群數(shù)據(jù)同步作為核心應(yīng)用場景,能夠靈活實現(xiàn)災(zāi)備和多活的業(yè)務(wù)場景。
實現(xiàn)災(zāi)備、多活,解決多數(shù)據(jù)中同步兩大難題
在當(dāng)前的數(shù)據(jù)庫系統(tǒng)生態(tài)中,大部分系統(tǒng)都支持多個節(jié)點實例間的數(shù)據(jù)同步機(jī)制,如Mysql Master/Slave主從同步,Redis AOF主從同步等,MongoDB更是支持3節(jié)點及以上的副本集同步,上述機(jī)制很好的支撐了一個邏輯單元的數(shù)據(jù)冗余高可用。
跨邏輯單元,甚至跨單元、跨數(shù)據(jù)中心的數(shù)據(jù)同步,在業(yè)務(wù)層有時候就顯得很重要,它使得同城多機(jī)房的負(fù)載均衡,多機(jī)房的互備,甚至是異地多數(shù)據(jù)中心容災(zāi)和多活成為可能。由于目前MongoDB副本集內(nèi)置的主從同步對于這種業(yè)務(wù)場景有一定的局限性,為此,我們開發(fā)了MongoShake系統(tǒng),可以應(yīng)用在實例間同步,機(jī)房間、跨數(shù)據(jù)中心同步,滿足災(zāi)備和多活需求。
災(zāi)備、多活部署實例
數(shù)據(jù)庫的多活和災(zāi)備指的是數(shù)據(jù)庫在多個機(jī)房部署,互為備份,可以同時提供讀寫服務(wù)。目前MongoDB數(shù)據(jù)庫比較欠缺這樣的平臺,有些現(xiàn)有平臺能滿足部分需求,但是在性能甚至功能上比較欠缺,為此,我們開源了我們的MongoShake系統(tǒng),能夠較大程度上滿足開發(fā)者和應(yīng)用者的功能需求。為了提高性能,我們采用了多端拉取、并行執(zhí)行、沖突檢測、異步優(yōu)化等多種方式提高系統(tǒng)的性能,滿足性能需求。功能方面,我們支持對數(shù)據(jù)庫DML和DDL語言的同步,保證數(shù)據(jù)的正確性。
MongoShake數(shù)據(jù)流示例
MongoShake早已在阿里巴巴內(nèi)部經(jīng)歷千錘百煉,目前已經(jīng)在高德、天貓、淘寶等廣泛應(yīng)用。
歷經(jīng)多年的技術(shù)沉淀,阿里云數(shù)據(jù)庫團(tuán)隊不斷對MongoDB產(chǎn)品進(jìn)行打磨,MongoShake作為MongoDB核心的生態(tài)化產(chǎn)品,致力于更好的為阿里云用戶提供服務(wù),也為廣大開源用戶提供服務(wù)。MongoShake的開源絕對不是發(fā)展的終點,我們會不斷對產(chǎn)品進(jìn)行迭代優(yōu)化,也歡迎大家一起加入,共同維護(hù)MongoDB生態(tài),推出更好的服務(wù)。