百度BDRP 分布式 redis 集群

背景簡(jiǎn)介
BDRP(baidu distributed redis platform)是包含twemproxy嘲玫,redis,redis-sentinel 等多個(gè)模塊開發(fā)的分布式 redis 平臺(tái)并扇。bdrp 已經(jīng)在 github 上進(jìn)行了開源去团,bdrp 的 github 項(xiàng)目點(diǎn)這里
系統(tǒng)架構(gòu)


目前 redis 集群架構(gòu)主要有以下幾個(gè)組件: twemproxy:redis 的代理系統(tǒng),可以選擇多種數(shù)據(jù)分片算法 redis:集群的 redis 存儲(chǔ)節(jié)點(diǎn) sentinel:redis 官方的集群高可用組件穷蛹,可以監(jiān)控 redis 主節(jié)點(diǎn)故障土陪,并進(jìn)行主備切換
對(duì)比開源版本 twemproxy 解決方案,我們?yōu)榧禾砑恿嗣總€(gè) redis 數(shù)據(jù)分片的主從架構(gòu)肴熏,并且添加了 sentinel 模塊鬼雀,基于這些架構(gòu)的拓展,我們實(shí)現(xiàn)了集群的高可用蛙吏,數(shù)據(jù)高可靠的解決方案源哩,集群數(shù)據(jù)讀寫請(qǐng)求分離方案。另外鸦做,針對(duì)線上的復(fù)雜應(yīng)用環(huán)境励烦,我們還未 twemproxy 增加了權(quán)限管理,流量控制(開發(fā)中)兩個(gè)功能泼诱。 下面我們就分別簡(jiǎn)單介紹下這四個(gè)新添加的功能坛掠。
功能介紹
1,高可用切換
由于 twemproxy 開源版本對(duì)于集群的高可用方案只提供了自動(dòng)彈出數(shù)據(jù)分片功能治筒,因此如果應(yīng)用方如果需要高可用集群的話屉栓,需要打開自動(dòng)彈出功能。但是耸袜,即便是對(duì)于一致性哈希分片算法友多,彈出一個(gè)分片也是會(huì)造成一個(gè)分片的數(shù)據(jù)丟失的。對(duì)于數(shù)據(jù)可靠性的要求比較高的服務(wù)來說堤框,如果丟失整個(gè)分片的數(shù)據(jù)是無法接受的域滥。 我們基于 redis 官方的 sentinel 模塊纵柿,實(shí)現(xiàn)了 redis 集群的節(jié)點(diǎn)高可用,數(shù)據(jù)高可靠方案骗绕。如上面的架構(gòu)圖所示藐窄,redis 集群的所有 redis 分片资昧,都配置了對(duì)應(yīng)的從庫酬土,通過 redis 主從傳輸進(jìn)行元數(shù)據(jù)復(fù)制。同時(shí)格带,每個(gè) redis 分片都會(huì)用 sentinel 進(jìn)行監(jiān)控撤缴,當(dāng)分片的主 redis 節(jié)點(diǎn)故障時(shí),sentinel 會(huì)將該分片的從節(jié)點(diǎn)切換成主節(jié)點(diǎn)叽唱。 twemproxy 和 sentinel 之前維護(hù)一個(gè)長連接屈呕,并訂閱 sentinel 的主從切換事件頻道。一旦 sentinel 上發(fā)生了 redis 的主從切換棺亭,twemproxy 馬上就能感知到虎眨,然后調(diào)整自己的分片拓?fù)鋱D,將后續(xù)的請(qǐng)求發(fā)送到新的主庫上镶摘。 twemproxy 在每次和 sentinel 建立連接后嗽桩,都會(huì)從 sentinel 拉取全量的數(shù)據(jù)分片地址信息,避免啟動(dòng)時(shí)的配置錯(cuò)誤凄敢,或者運(yùn)行中連接重建碌冶,丟失主從切換信息。
2涝缝,讀寫分離
bdrp2
bdrp2

對(duì)于數(shù)據(jù)量不是很大扑庞,但是請(qǐng)求量很大的服務(wù)來說,數(shù)據(jù)分片拆分并不是很好的解決方案拒逮,產(chǎn)品線通常會(huì)給數(shù)據(jù)分片配置多個(gè)只讀從庫罐氨,分擔(dān)讀請(qǐng)求。為了支持這種需求滩援,我們給 twemproxy 增加了讀寫分離功能岂昭。 如上架構(gòu)圖,展示了一個(gè) server pool 下面掛接兩個(gè)數(shù)據(jù)分片狠怨,每個(gè)數(shù)據(jù)分片掛接兩個(gè)只讀從庫的情景下的架構(gòu)圖约啊。通過 redis 主從復(fù)制,給每個(gè)數(shù)據(jù)分片配置多個(gè)只讀從庫佣赖。Proxy 從配置中加載到分片從庫信息后恰矩,在每次轉(zhuǎn)發(fā)請(qǐng)求時(shí),判斷請(qǐng)求的類型憎蛤,然后根據(jù)請(qǐng)求是否修改 redis 元數(shù)據(jù)外傅,來決定轉(zhuǎn)發(fā)到主庫或者從庫纪吮。對(duì)于配置了多個(gè)從庫的情況,我們會(huì)對(duì)這幾個(gè)從庫進(jìn)行 round-robin 輪詢 同樣的萎胰,當(dāng)一個(gè)從庫發(fā)生故障碾盟,proxy 會(huì)自動(dòng)剔除這個(gè)從庫,當(dāng)全部從庫都故障技竟,proxy 會(huì)將只讀請(qǐng)求發(fā)送到主庫上冰肴。剔除故障從庫之后,proxy 會(huì)定期對(duì)故障從庫進(jìn)行健康檢查榔组,如果從庫恢復(fù)熙尉,proxy 會(huì)自動(dòng)將該從庫加回讀請(qǐng)求輪詢列表當(dāng)中。
3搓扯,權(quán)限驗(yàn)證白名單
對(duì)于線上服務(wù)來說检痰,完善的權(quán)限管理是必不可少的。但是 twemproxy 并沒有提供權(quán)限驗(yàn)證相關(guān)的功能锨推。我們添加了基于 IP 白名單的權(quán)限驗(yàn)證功能铅歼。用戶可以配置某些 IP 可以擁有的權(quán)限(讀 / 寫),在 client 連接上來之后换可,proxy 會(huì)去判斷 client ip 是否在白名單之內(nèi)椎椰,如果在的話,會(huì)將對(duì)應(yīng)權(quán)限賦予該 client 連接锦担,否則將會(huì)強(qiáng)行斷掉連接俭识。當(dāng)連接上的 client 發(fā)送命令過來后,會(huì)驗(yàn)證該 client 是否有該命令對(duì)應(yīng)的權(quán)限(讀 / 寫)洞渔,如果沒有的話套媚,該連接將會(huì)被強(qiáng)行關(guān)閉。
4磁椒,流量控制
twemproxy 本身支持開啟多個(gè) server_pool堤瘤,后端掛接不同的 redis 數(shù)據(jù)分片。這樣浆熔,單個(gè) proxy 實(shí)例可以服務(wù)多個(gè)應(yīng)用方本辐。但是對(duì)于這種多個(gè)服務(wù)混用 proxy 的情況,twemproxy 并沒有對(duì)各個(gè)應(yīng)用方做流量控制医增。這樣造成的一個(gè)問題是慎皱,可能一個(gè)應(yīng)用方的請(qǐng)求異常突增,占用了過多的 proxy 資源叶骨,從而影響了其他的應(yīng)用方的正常服務(wù)請(qǐng)求茫多。 針對(duì)這種情況,我們決定開發(fā)一個(gè)基于 proxy 的 server pool 的流控忽刽。簡(jiǎn)單來說就是給每個(gè) server pool 一定的配額天揖,當(dāng)某個(gè)應(yīng)用方請(qǐng)求異常突增將其配額耗盡后夺欲,我們將會(huì)拒絕這個(gè)應(yīng)用方的請(qǐng)求,從而避免該異常應(yīng)用方請(qǐng)求影響到其他應(yīng)用方今膊。 流控功能還在設(shè)計(jì)開發(fā)當(dāng)中些阅,因而本次開源版本中并不包括這個(gè)功能。
5斑唬,其他說明
github 上面的開源方案使用的 redis 版本是 2.6.16市埋,這個(gè)版本是沒有主從數(shù)據(jù)增量重傳(partial synchronization)功能的,從庫宕機(jī)需要進(jìn)行全量重傳赖钞,造成性能抖動(dòng)腰素。因此我們 merge 了 2.8 的增量重傳代碼以規(guī)避此問題聘裁。
應(yīng)用范圍
bdrp 在百度檢索系統(tǒng)雪营,百度商業(yè)產(chǎn)品體系,LBS 產(chǎn)品體系等在線業(yè)務(wù)廣泛應(yīng)用衡便。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末献起,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镣陕,更是在濱河造成了極大的恐慌谴餐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呆抑,死亡現(xiàn)場(chǎng)離奇詭異岂嗓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鹊碍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門厌殉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侈咕,你說我怎么就攤上這事公罕。” “怎么了耀销?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵楼眷,是天一觀的道長。 經(jīng)常有香客問我熊尉,道長罐柳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任狰住,我火速辦了婚禮张吉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘转晰。我一直安慰自己芦拿,他們只是感情好士飒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔗崎,像睡著了一般酵幕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缓苛,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天芳撒,我揣著相機(jī)與錄音,去河邊找鬼未桥。 笑死笔刹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冬耿。 我是一名探鬼主播舌菜,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼亦镶!你這毒婦竟也來了日月?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤缤骨,失蹤者是張志新(化名)和其女友劉穎爱咬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绊起,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡精拟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虱歪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂绎。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖实蔽,靈堂內(nèi)的尸體忽然破棺而出荡碾,到底是詐尸還是另有隱情,我是刑警寧澤局装,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布坛吁,位于F島的核電站,受9級(jí)特大地震影響铐尚,放射性物質(zhì)發(fā)生泄漏拨脉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一宣增、第九天 我趴在偏房一處隱蔽的房頂上張望玫膀。 院中可真熱鬧,春花似錦爹脾、人聲如沸帖旨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽解阅。三九已至落竹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間货抄,已是汗流浹背述召。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟹地,地道東北人积暖。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像怪与,于是被迫代替她去往敵國和親夺刑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 分布式系統(tǒng)(Distributed System)資料 希望轉(zhuǎn)載的朋友琼梆,你可以不用聯(lián)系我.但是一定要保留原文鏈接性誉,...
    Albert陳凱閱讀 3,759評(píng)論 0 33
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,118評(píng)論 25 707
  • 有句話說“現(xiàn)在過的每一天都是余生中最年輕的一天”窿吩。時(shí)間茎杂,到底是好是壞,明明是我們看不見摸不著的東西纫雁,卻對(duì)...
    饅頭大人呀閱讀 174評(píng)論 0 0
  • ** 原創(chuàng)文章煌往,如有轉(zhuǎn)載請(qǐng)注明來源! **.Net下Memcached的引用環(huán)境包很多轧邪,EnyimMemcache...
    zeor2016閱讀 2,771評(píng)論 0 4