唯品會多執行緒Redis設計與實現
宣告:本文來自京東張開濤的微信公眾號(kaitao-1234567),授權CSDN轉載,如需轉載請聯絡作者。
作者:申政,開源愛好者,唯品會高階DBA,主要負責Redis相關領域的原始碼研究和研發工作。
責編:錢曙光,關注架構和演算法領域,尋求報道或者投稿請發郵件[email protected],另有「CSDN 高階架構師群」,內有諸多知名網際網路公司的大牛架構師,歡迎架構師加微信qshuguang2008申請入群,備註姓名+公司+職位。
本文將向大家分享下我們正在開發的多執行緒Redis。在我們的Redis使用中,發現了一些痛點問題,涉及到了Redis框架的設計。
我們線上有大量的Redis例項在執行,規模比較龐大,有些Redis叢集例項規模超過100+,我們開始對Redis進行了多執行緒版本的改造,就是我們現在正在開發的產品Vire。
這是Vire的一個現狀,分幾個階段進行開發,現在是0.1.0版本。
以上是Vire 0.1.0的一些設計思路。下面說說具體實現:
這是Vire的多執行緒模型,借鑑於memcached,master+worker執行緒模型。
這個圖比較直觀的反映了執行緒模型的工作原理,多執行緒不可避免會用到鎖,以下是Vire的鎖機制:
這裡有個邏輯DB的概念,其實就是把多個Redis DB偽裝成一個DB提供給使用者。DB級別的鎖,會不會效能很差呢?後續會有測試報告給出。
使用者使用的所有key,是通過key的Hash值被分散到了各個物理DB上,目的就是降低DB鎖的競爭提升QPS,可以通過info命令看到物理db中key的分佈:
下面來看下成功執行一個Redis命令要走的流程:
我們的DB鎖是在哪一步使用呢?
有可能用到DB鎖的步驟就是紅框中的兩步,但像ping這樣命令,在整個過程中是用不到DB鎖的,可以看出,Worker執行緒在一部分時間是完全並行執行的,關於Vire中的後臺執行緒:
Worker執行緒專注於處理客戶端的請求,雜活累活有backend執行緒來做,backend執行緒在Vire後續版本中,會發揮更重要的作用。
這裡是Vire程式碼內部對object的處理,這裡會有些效能退化。
這是Vire對多key命令的一些特殊處理,死鎖的問題,導致個別Redis命令在Vire中暫時無法實現。
Vire中增加了一些許可權管理,Vire增加了管理員的角色,保證了一些危險命令不被開發執行。
下面說說Vire的測試:
這裡著重說說abtest和效能測試,為了保證Vire的命令執行起來與Redis一模一樣,我們開發了abtest測試框架。詳細說說abtest框架中各模組的作用:
這個測試框架有效的幫我們發現了一些bug,以下是效能測試:
我們的目標就是效能接近或跟mc一樣,以下是hotkey測試:
hotkey的效果還不錯。
Q&A
Q:客戶端需要換嗎?
A:客戶端相容,無需更換,使用起來跟原生redis一樣Q:Worker和DB的關係是什麼?
A:Worker和DB沒有關係, client是資料Worker執行緒的, DB是完全獨立的Q:後期主備會支援嗎?
A:以後會支援主備,叢集和指令碼等高階功能Q:有沒有想過把鎖降低至key級別?
A:沒必要key級別的鎖Q:死鎖問題為何不通過順序鎖定相關DB來解決呢,我們的Redis是分散式鎖,通過按統一的順序鎖定,就可以避免死鎖
A:鎖的數量會太多,你說的這個死鎖問題很好,有這樣的想法,但還沒有時間去驗證可不可行,以後可以嘗試。Q:Vire和Redis-cluster比起來哪個效能更好?
A:Redis-cluster是叢集模式,Vire是單例項,沒辦法比較效能,Vire最後一個版本希望能支援到叢集Q:給我的理解Vire的多個邏輯DB的設計原理和Redis-cluster裡多個分片原理是一樣吧?
A:非常類似, 只不過Redis-cluster裡的slot是海量的,16384Q:現在Redis-cluster的解決方案是客戶端自己計算slot的位置,可以通過根據操作的讀寫型別,實現負載均衡,Vire採取的多DB+多Worker的方案,他這樣的優勢在哪裡?
A:主要是提升單個例項的QPS能力Q:現在的設計是全部基於記憶體上的?伺服器宕機是不是資料全都會消失
A:Vire0.1.0版本資料全部在記憶體,只適合於做快取, Vire後續版本會做持久化和複製,甚至是叢集
2016年9月22日-23日,[SDCC 2016大資料技術&架構實戰峰會](http://bss.csdn.net/m/topic/sdcc_invite/hangzhou /)將在杭州舉行,兩場峰會大牛講師來自阿里、京東、蘇寧、唯品會、美團點評、遊族、餓了麼、有贊、Echo等知名網際網路公司,共同探討海量資料下的應用監控系統建設、異常檢測的演算法和實現、大資料基礎架構實踐、敏捷型資料平臺的構建及應用、音訊分析的機器學習演算法應用,以及高可用/高併發/高效能系統架構設計、電商架構、分散式架構等話題與技術。
9月5日~18日是八折優惠票價階段,5人以上團購或者購買兩場峰會通票更有特惠,限時折扣,預購從速。(票務詳情連結)。