predixy一款高性能全功能redis代理

介紹

redis作為一款優(yōu)秀的NoSQL代表軟件绪钥,正變得越來越流行痒蓬,雖然Redis很容易就可以啟動并使用王财,但是要想在線上用好它卻也并非易事徽级。redis的高可用和可擴(kuò)展無論是自帶的Redis Sentinel還是Redis Cluster都要求客戶端進(jìn)行額外的支持舌剂,而目前基本上沒有合適的客戶端能夠做這些事情济锄,實際上客戶端來做這些事情也并不合適,它會讓維護(hù)變得特別困難霍转。因此在客戶端和redis服務(wù)端之間加一層代理成了一種理想的方案荐绝,代理屏蔽后端Redis實現(xiàn)細(xì)節(jié)向客戶端提供redis服務(wù),可以完美的解決Redis的高可用和擴(kuò)展性問題避消,同時代理的引入也使得Redis維護(hù)變得更加簡單低滩。在本文所要介紹的代理predixy之前,已經(jīng)有幾款流行的redis代理岩喷,它們各具特色恕沫。接下來,我們就來比較以下代理:

代理 簡介
predixy 高性能全特征redis代理均驶,支持Redis Sentinel和Redis Cluster
twemproxy 快速昏兆、輕量級memcached和redis代理
codis redis集群代理解決方案
redis-cerberus Redis Cluster代理

詳細(xì)功能對比

特性 predixy twemproxy codis redis-cerberus
高可用 Redis Sentinel或Redis Cluster 一致性哈希 Redis Sentinel Redis Cluster
可擴(kuò)展 Key哈希分布或Redis Cluster Key哈希分布 Key哈希分布 Redis Cluster
開發(fā)語言 C++ C GO C++
多線程
事務(wù) Redis Sentinel模式單Redis組下支持 不支持 不支持 不支持
BLPOP/BRPOP/BLPOPRPUSH 支持 不支持 不支持 支持
Pub/Sub 支持 不支持 不支持 支持
Script 支持load 不支持 不支持 不支持
Scan 支持 不支持 不支持 不支持
Select DB 支持 不支持 支持 Redis Cluster只有一個DB
Auth 支持定義多個密碼,給予不同讀寫及管理權(quán)限和Key訪問空間 不支持 同redis 不支持
讀從節(jié)點 支持妇穴,可定義豐富規(guī)則讀指定的從節(jié)點 不支持 支持爬虱,簡單規(guī)則 支持,簡單規(guī)則
多機(jī)房支持 支持腾它,可定義豐富規(guī)則調(diào)度流量 不支持 有限支持 有限支持
統(tǒng)計信息 豐富 豐富 豐富 簡單

簡單來說跑筝,predixy既支持Redis Sentinel也支持Redis Cluster

  • 后端為Redis Sentinel監(jiān)控的一組Redis,功能完全等同于原始Redis
  • 后端為Redis Sentinel監(jiān)控的多組Redis瞒滴,則有部分功能受限
  • 后端為Redis Cluster曲梗,功能完全等同于Redis Cluster

性能

作為redis代理,高性能是硬性要求妓忍,為了測試上面四款代理的性能接下來我們就來做個簡單的評測虏两,測試平臺及各代理具體的版本信息如下:

名稱 內(nèi)容
CPU AMD Ryzen 7 1700X Eight-Core Processor 3.775GHz
內(nèi)存 16GB DDR4 3000
系統(tǒng) x86_64 GNU/Linux 4.10.0-27-generic #30~16.04.2-Ubuntu
predixy 版本1.0.1,源碼默認(rèn)參數(shù)編譯
twemproxy 版本0.4.1世剖,源碼默認(rèn)參數(shù)編譯
codis 二進(jìn)制發(fā)布版本codis3.2.0-go1.8.1-linux.tar.gz
cerberus github遷出8d68a5d源碼默認(rèn)參數(shù)編譯

redis-server定罢、各代理、redis-benchmark均在這一臺機(jī)器上運行旁瘫。

redis部署:

代理 redis后端部署
predixy redis cluster模式部署三個redis主節(jié)點, slots平分
twemproxy 三個redis主節(jié)點祖凫,采用crc16哈希琼蚯,modula分布
codis 三個redis主節(jié)點,slots平分
cerberus redis cluster模式部署三個redis主節(jié)點, slots平分

以下測試的結(jié)果中惠况,橫坐標(biāo)為數(shù)據(jù)大小遭庶、縱坐標(biāo)為qps或者毫秒。

單線程SET/GET測試

這里單線程是指四款代理都運行在單線程下(下同)稠屠,redis-benchmark默認(rèn)并發(fā)50個客戶端連接峦睡,每個連接每次發(fā)送一個命令收到響應(yīng)后再發(fā)下一個命令。這是很多線上實際的場景权埠。

測試命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 1000000 -d xxx                                                           

測試結(jié)果:

結(jié)果說明:

在吞吐上赐俗,四款代理的性能排列的整齊有序,predixy大幅領(lǐng)先于另外三款代理弊知,而twemproxy又以較大優(yōu)勢領(lǐng)先另外兩個阻逮,剩下的兩個codis在數(shù)據(jù)量小于512的時候稍稍領(lǐng)先cerberus,而當(dāng)數(shù)據(jù)量大于512的時候秩彤,codis對cerberus的領(lǐng)先越來越大叔扼。整體上在數(shù)據(jù)量達(dá)到16KB時,由于redis-benchmark本身成為瓶頸漫雷,predixy和twemproxy的SET成績差不多了瓜富。
在延時上,codis由于語言的問題降盹,一直都大于另外三款代理与柑,后續(xù)測試也一樣。

單線程PIPELINE SET/GET測試

在有些場景下蓄坏,客戶端可能在處理一個請求時可能需要發(fā)起多次redis請求价捧,這時如果把多個redis請求pipeline一起請求的話,會大幅改善性能涡戳。本輪測試就來看看當(dāng)客戶端一次發(fā)送多個請求時我們各代理表現(xiàn)如何结蟋?Redis-benchmark依舊是并發(fā)50個連接,但是一次發(fā)送20個命令渔彰。

測試命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 5000000 -P 20 -d xxx

測試結(jié)果:

結(jié)果說明:

在吞吐上嵌屎,redis-benchmark一次pipeline 20個命令后,各代理的吞吐量全都猛增恍涂。predixy更是一騎絕塵宝惰,遙遙領(lǐng)先另外三個,而最后看到在GET 4K數(shù)量據(jù)的時候predixy表現(xiàn)和其它代理差不多是因為對predixy來說再沧,當(dāng)數(shù)據(jù)量大于2K時redis-benchmark自身已經(jīng)成為瓶頸尼夺。另外三款代理,在上輪測試中落后的cerberus在本輪測試一開始表現(xiàn)遠(yuǎn)好過twemproxy和codis,但cerberus還是存在隨著數(shù)據(jù)量變大性能迅速降低的問題汞斧。twemproxy和codis在本輪測試中表現(xiàn)基本相當(dāng)。
在時延上什燕,codis固有的問題表現(xiàn)較差粘勒,另外三款在數(shù)據(jù)量較小時差別較小,而當(dāng)數(shù)據(jù)量超過512時屎即,predixy則表現(xiàn)出較明顯的優(yōu)勢庙睡。

雙線程PIPELINE SET/GET測試

測完了單線程,現(xiàn)在我們開始多線程測試技俐,由于twemproxy不支持多線程乘陪,因此twemproxy不參與多線程的測試〉窭蓿考慮到redis-benchmark本身是個單線程程序啡邑,在多線程代理下如果我們再測單個命令的性能,那redis-benchmark很可能就是瓶頸井赌,則無法更明確的看出各代理的性能差異谤逼,因此我們直接測試pipeline,還跟上輪一樣仇穗,50個并發(fā)連接流部,一次發(fā)送20個命令。

測試命令:

$ redis-benchmark -p xxx -t set,get -r 3000 -n 10000000 -P 20 -d xxx

測試結(jié)果:

結(jié)果說明:

總體趨勢和第二輪單線程pipeline測試一致纹坐,predixy在本輪測試中依舊取得了領(lǐng)先枝冀,不過在開始階段cerberus和predixy遙遙領(lǐng)先于codis,cerberus和predixy差距不大耘子。但是隨著數(shù)據(jù)量的變大果漾,cerberus再次顯示出了性能急劇降低的問題,到1K以后甚至就比codis差了谷誓。

結(jié)論

在功能的對比上跨晴,predixy相比另外三款代理更為全面,基本可以完全適用原生redis的使用場景片林。在性能上端盆,predixy在各輪測試中都以較大優(yōu)勢領(lǐng)先。對各代理的總結(jié)如下:

  • predixy:功能全面费封,既可以使用單個主從redis焕妙,也可使用Redis Cluster;性能優(yōu)異弓摘。
  • twemproxy:高可用依賴一致性哈希焚鹊,僅在緩存場景下適用,不適用存儲使用韧献;性能中等末患。
  • codis:適用redis集群使用研叫;性能一般。
  • cerberus:適用使用Redis Cluster璧针;在數(shù)據(jù)量較小且pipeline使用情況下性能尚可嚷炉,否則性能較差。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末探橱,一起剝皮案震驚了整個濱河市申屹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隧膏,老刑警劉巖哗讥,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胞枕,居然都是意外死亡杆煞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門腐泻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來索绪,“玉大人,你說我怎么就攤上這事贫悄∪鹎” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵窄坦,是天一觀的道長唤反。 經(jīng)常有香客問我,道長鸭津,這世上最難降的妖魔是什么彤侍? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮逆趋,結(jié)果婚禮上盏阶,老公的妹妹穿的比我還像新娘。我一直安慰自己闻书,他們只是感情好名斟,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著魄眉,像睡著了一般砰盐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坑律,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天岩梳,我揣著相機(jī)與錄音,去河邊找鬼。 笑死冀值,一個胖子當(dāng)著我的面吹牛也物,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播列疗,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼滑蚯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了作彤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤乌逐,失蹤者是張志新(化名)和其女友劉穎竭讳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浙踢,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绢慢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洛波。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰舆。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蹬挤,靈堂內(nèi)的尸體忽然破棺而出缚窿,到底是詐尸還是另有隱情,我是刑警寧澤焰扳,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布倦零,位于F島的核電站,受9級特大地震影響吨悍,放射性物質(zhì)發(fā)生泄漏扫茅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一育瓜、第九天 我趴在偏房一處隱蔽的房頂上張望葫隙。 院中可真熱鬧,春花似錦躏仇、人聲如沸恋脚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慧起。三九已至,卻和暖如春册倒,著一層夾襖步出監(jiān)牢的瞬間蚓挤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留灿意,地道東北人估灿。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像缤剧,于是被迫代替她去往敵國和親馅袁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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