X-PipeRedis 多數(shù)據(jù)中心復(fù)制管理系統(tǒng)
X-Pipe 是由攜程框架部門研發(fā)的 Redis 多數(shù)據(jù)中心復(fù)制管理系統(tǒng)。。基于 Redis 的 Master-Slave 復(fù)制協(xié)議,實(shí)現(xiàn)低延時(shí)、高可用的 Redis 多數(shù)據(jù)中心復(fù)制,并且提供一鍵機(jī)房切換,復(fù)制監(jiān)控、異常報(bào)警等功能。
XPipe 解決什么問題
Redis 在攜程內(nèi)部得到了廣泛的使用,根據(jù)客戶端數(shù)據(jù)統(tǒng)計(jì),整個(gè)攜程全部 Redis 的讀寫請(qǐng)求在每秒 200W,其中寫請(qǐng)求約 10W,很多業(yè)務(wù)甚至?xí)?Redis 當(dāng)成內(nèi)存數(shù)據(jù)庫(kù)使用。這樣,就對(duì) Redis 多數(shù)據(jù)中心提出了很大的需求,一是為了提升可用性,解決數(shù)據(jù)中心 DR(Disaster Recovery) 問題,二是提升訪問性能,每個(gè)數(shù)據(jù)中心可以讀取當(dāng)前數(shù)據(jù)中心的數(shù)據(jù),無需跨機(jī)房讀數(shù)據(jù),在這樣的需求下,XPipe 應(yīng)運(yùn)而生 。
為了方便描述,后面用 DC 代表數(shù)據(jù)中心 (Data Center)。
整體架構(gòu)
-
Console 用來管理多機(jī)房的元信息數(shù)據(jù),同時(shí)提供用戶界面,供用戶進(jìn)行配置和 DR 切換等操作。
-
Keeper 負(fù)責(zé)緩存 Redis 操作日志,并對(duì)跨機(jī)房傳輸進(jìn)行壓縮、加密等處理。
-
Meta Server 管理單機(jī)房?jī)?nèi)的所有 keeper 狀態(tài),并對(duì)異常狀態(tài)進(jìn)行糾正。
Redis 數(shù)據(jù)復(fù)制問題
多數(shù)據(jù)中心首先要解決的是數(shù)據(jù)復(fù)制問題,即數(shù)據(jù)如何從一個(gè) DC 傳輸?shù)搅硗庖粋€(gè) DC。我們決定采用偽 slave 的方案,即實(shí)現(xiàn) Redis 協(xié)議,偽裝成為 Redis slave,讓 Redis master 推送數(shù)據(jù)至偽 slave。這個(gè)偽 slave,我們把它稱為 keeper,如下圖所示:
有了 keeper 之后,多數(shù)據(jù)中心之間的數(shù)據(jù)傳輸,可以通過 keeper 進(jìn)行。keeper 將 Redis 日志數(shù)據(jù)緩存到磁盤,這樣,可以緩存大量的日志數(shù)據(jù)(Redis 將數(shù)據(jù)緩存到內(nèi)存 ring buffer,容量有限),當(dāng)數(shù)據(jù)中心之間的網(wǎng)絡(luò)出現(xiàn)較長(zhǎng)時(shí)間異常時(shí)仍然可以續(xù)傳日志數(shù)據(jù)。
Redis 協(xié)議不可更改,而 keeper 之間的數(shù)據(jù)傳輸協(xié)議卻可以自定義。這樣就可以進(jìn)行壓縮,以提升系統(tǒng)性能,節(jié)約傳輸成本;多個(gè)機(jī)房之間的數(shù)據(jù)傳輸往往需要通過公網(wǎng)進(jìn)行,這樣數(shù)據(jù)的安全性變得極為重要,keeper 之間的數(shù)據(jù)傳輸也可以加密,提升安全性。
