Redis中國用戶組|唯品會多線程redis設(shè)計與實現(xiàn)

Paste_Image.png

作者介紹

申政,開源愛好者,唯品會高級DBA,主要負(fù)責(zé)Redis相關(guān)領(lǐng)域的源碼研究和研發(fā)工作朵夏。

開源項目:

_ redis cluster的C客戶端(hiredis-vip)_

_ 集群遷移工具(redis-migrate-tool)_

_ 多線程版Twemproxy(Twemproxies)_

大家好唤反,我是deep绅作,今天跟大家分享下我們正在開發(fā)的多線程redis魁蒜。在我們的redis使用中憔恳,發(fā)現(xiàn)了一些痛點問題摔刁,涉及到了redis框架的設(shè)計挥转。

Paste_Image.png

我們線上有大量的redis實例在運行,規(guī)模比較龐大共屈,有些redis集群實例規(guī)模超過100+绑谣,我們開始對redis進(jìn)行了多線程版本的改造,就是我們現(xiàn)在正在開發(fā)的產(chǎn)品vire拗引。

Paste_Image.png

這是vire的一個現(xiàn)狀借宵,分幾個階段進(jìn)行開發(fā),現(xiàn)在是0.1.0版本矾削。

Paste_Image.png

以上是vire0.1.0的一些設(shè)計思路壤玫。下面說說具體實現(xiàn):

Paste_Image.png

這是vire的多線程模型豁护,借鑒于memcached,master+worker線程模型欲间。

Paste_Image.png

這個圖比較直觀的反映了線程模型的工作原理楚里,多線程不可避免會用到鎖,以下是vire的鎖機制:

Paste_Image.png

這里有個邏輯DB的概念猎贴,其實就是把多個redis db偽裝成一個DB提供給用戶班缎。DB級別的鎖,會不會性能很差呢她渴?后續(xù)會有測試報告給出达址。

Paste_Image.png

用戶使用的所有key,是通過key的hash值被分散到了各個物理db上趁耗,目的就是降低DB鎖的競爭提升qps苏携,可以通過info 命令看到物理db中key的分布:

Paste_Image.png

下面來看下成功執(zhí)行一個redis命令要走的流程:

Paste_Image.png

我們的db鎖是在哪一步使用呢?

Paste_Image.png

有可能用到db鎖的步驟就是紅框中的兩步对粪,但像ping這樣命令,在整個過程中是用不到db鎖的装蓬,可以看出著拭,Worker線程在一部分時間是完全并行執(zhí)行的,關(guān)于vire中的后臺線程:

Paste_Image.png

Worker線程專注于處理客戶端的請求牍帚,雜活累活有backend線程來做儡遮,backend線程在vire后續(xù)版本中,會發(fā)揮更重要的作用暗赶。

Paste_Image.png

這里是Vire代碼內(nèi)部對object的處理鄙币,這里會有些性能退化。

Paste_Image.png

這是vire對多key命令的一些特殊處理蹂随,死鎖的問題十嘿,導(dǎo)致個別redis命令在vire中暫時無法實現(xiàn)。

Paste_Image.png

Vire中增加了一些權(quán)限管理岳锁,vire增加了管理員的角色绩衷,保證了一些危險命令不被開發(fā)執(zhí)行。
下面說說vire的測試:

Paste_Image.png

這里著重說說abtest和性能測試
為了保證vire的命令執(zhí)行起來與redis一模一樣激率,我們開發(fā)了abtest測試框架咳燕。詳細(xì)說說abtest框架中各模塊的作用:

Paste_Image.png
Paste_Image.png

這個測試框架有效的幫我們發(fā)現(xiàn)了一些bug,以下是性能測試:

Paste_Image.png
Paste_Image.png
Paste_Image.png

我們的目標(biāo)就是性能接近或跟mc一樣乒躺,以下是hotkey測試:

Paste_Image.png

hotkey的效果還不錯招盲。

Paste_Image.png

加入Redis中國用戶組

QQ群: 374538650, 521503946
微信群:Redis中國用戶組

Q&A:

  1. Q: 客戶端需要換嗎?
    A:客戶端兼容嘉冒,無需更換曹货,使用起來跟原生redis一樣
  2. Q: worker和db的關(guān)系是什么咆繁?
    A: worker和db沒有關(guān)系, client是數(shù)據(jù)worker線程的, DB是完全獨立的
  3. Q: 后期主備會支持嗎?
    A: 以后會支持主備控乾,集群和腳本等高級功能
  4. Q: 有沒有想過把鎖降低至key級別?
    A: 沒必要key級別的鎖
  5. Q: 死鎖問題為何不通過順序鎖定相關(guān)db來解決呢么介,我們的redis是分布式鎖,通過按統(tǒng)一的順序鎖定蜕衡,就可以避免死鎖
    A: 鎖的數(shù)量會太多壤短,你說的這個死鎖問題很好,有這樣的想法慨仿,但還沒有時間去驗證可不可行久脯,以后可以嘗試。
  6. Q: vire和redis-cluster比起來哪個性能更好镰吆?
    A: redis-cluster是集群模式帘撰,vire是單實例,沒辦法比較性能万皿,vire最后一個版本希望能支持到集群
  7. Q: 給我的理解vire的多個邏輯db的設(shè)計原理和redis-cluster里多個分片原理是一樣吧摧找?
    A: 非常類似, 只不過redis-cluster里的slot是海量的,16384
  8. Q: 現(xiàn)在redis-cluster的解決方案是客戶端自己計算slot的位置牢硅,可以通過根據(jù)操作的讀寫類型蹬耘,實現(xiàn)負(fù)載均衡,vire采取的多db+多worker的方案减余,他這樣的優(yōu)勢在哪里综苔?
    A: 主要是提升單個實例的qps能力
  9. Q: 現(xiàn)在的設(shè)計是全部基于內(nèi)存上的?服務(wù)器宕機是不是數(shù)據(jù)全都會消失
    A: vire0.1.0版本數(shù)據(jù)全部在內(nèi)存位岔,只適合于做緩存, vire后續(xù)版本會做持久化和復(fù)制如筛,甚至是集群
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抒抬,隨后出現(xiàn)的幾起案子杨刨,更是在濱河造成了極大的恐慌,老刑警劉巖擦剑,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拭嫁,死亡現(xiàn)場離奇詭異,居然都是意外死亡抓于,警方通過查閱死者的電腦和手機做粤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捉撮,“玉大人怕品,你說我怎么就攤上這事〗碓猓” “怎么了肉康?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵闯估,是天一觀的道長。 經(jīng)常有香客問我吼和,道長涨薪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任炫乓,我火速辦了婚禮刚夺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘末捣。我一直安慰自己侠姑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布箩做。 她就那樣靜靜地躺著莽红,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邦邦。 梳的紋絲不亂的頭發(fā)上安吁,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天,我揣著相機與錄音燃辖,去河邊找鬼鬼店。 笑死,一個胖子當(dāng)著我的面吹牛郭赐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播确沸,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼捌锭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罗捎?” 一聲冷哼從身側(cè)響起观谦,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桨菜,沒想到半個月后豁状,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡倒得,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年泻红,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霞掺。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡谊路,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菩彬,到底是詐尸還是另有隱情缠劝,我是刑警寧澤潮梯,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站惨恭,受9級特大地震影響秉馏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脱羡,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一萝究、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轻黑,春花似錦糊肤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至抖拦,卻和暖如春升酣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背态罪。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工噩茄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人复颈。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓绩聘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耗啦。 傳聞我的和親對象是個殘疾皇子凿菩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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