新聞中心
我們都知道Redis是單機(jī)單進(jìn)程的,在之前的測(cè)試中,我們也知道Redis的單機(jī)性能是有限的,并且高性能的機(jī)器其實(shí)非常昂貴。一個(gè)好漢三個(gè)幫,分布式系統(tǒng)正是利用了多臺(tái)普通計(jì)算器從而被大量互聯(lián)網(wǎng)公司所使用,今天我們來(lái)聊一聊Redis集群的一種解決方案--Codis。

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、新平網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、成都商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為新平等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
Codis,Github上面近萬(wàn)star,是一款由中國(guó)人開(kāi)源的Redis集群解決方案,由前豌豆夾團(tuán)隊(duì)提供。Codis,它是一款Redis的Proxy,主要負(fù)責(zé)把Redis的請(qǐng)求分發(fā)到不同的Redis實(shí)例當(dāng)中。
我們從一次get請(qǐng)求來(lái)解釋一下,Codis是如何工作的。因?yàn)镃odis代理了Redis服務(wù),所以我們發(fā)起請(qǐng)求的時(shí)候,并不是請(qǐng)求到Redis-server所在的機(jī)器上,而是到Codis機(jī)器上,Codis機(jī)器再根據(jù)一定的路由規(guī)則進(jìn)行分發(fā),最終請(qǐng)求到Redis-Server的機(jī)器上,也就是說(shuō),如果我們使用一個(gè)mget請(qǐng)求,可能會(huì)到多臺(tái)機(jī)器上。
很顯然,這樣子Codis也會(huì)存在單點(diǎn)問(wèn)題,好在Codis是一個(gè)無(wú)狀態(tài)的服務(wù),所以我們可以同時(shí)部署多個(gè)Codis實(shí)例。
Codis是如何把對(duì)應(yīng)的key分配到不同機(jī)器的呢?奧秘就在于Codis的Slot,Codis切分出1024(可配置)個(gè)Slot,每個(gè)Slot會(huì)綁定不同的Redis實(shí)例,這里為什么要切分到1024個(gè)呢?這是一個(gè)不錯(cuò)的思考題?可以從擴(kuò)容縮容方向進(jìn)行考慮。
那么不同的Codis實(shí)力是如何同步Slot的數(shù)據(jù)呢?Codis的方法非常簡(jiǎn)單粗暴,那便是使用ZooKeeper。ZooKeeper不是發(fā)現(xiàn)服務(wù)么?怎么還能用來(lái)存儲(chǔ)數(shù)據(jù)?ZooKeeper其實(shí)為每個(gè)目錄提供了1M的存儲(chǔ)空間,通過(guò)Quorum的2pc機(jī)制來(lái)做數(shù)據(jù)一致性。所以,ZooKeeper可以偷偷用來(lái)做數(shù)據(jù)小,吞吐不是那么大的數(shù)據(jù)存儲(chǔ)。
Codis提供一個(gè)Dashboard給用戶編輯Slot的情況,當(dāng)用戶編輯的時(shí)候,會(huì)由Zookeeper分發(fā)給所有的Codis實(shí)例。優(yōu)點(diǎn)
Codis非常的簡(jiǎn)單,無(wú)論是理解上,問(wèn)題排查上還是部署上,都非常的簡(jiǎn)單。他把一些分布式一致性的東西交給了另外的開(kāi)源方案Zookeeper去解決,自身非常輕量級(jí)。
缺點(diǎn)
由于Codis的數(shù)據(jù)是落在多臺(tái)機(jī)器上的,所以,Redis的事務(wù)功能就不能使用了,對(duì)于批量查詢接口,Codis需要到多臺(tái)機(jī)器上去獲取結(jié)果,這就不能保證數(shù)據(jù)的一致性。會(huì)存在這樣的情況,使用Codis同時(shí)獲取key1與key2,同時(shí)Update兩者的值,可能獲取到的Value1是新版本,而Value2為舊版本。
Codis會(huì)對(duì)Slot進(jìn)行數(shù)據(jù)遷移,如果key-value的數(shù)據(jù)太小太大的話,就會(huì)影響遷移的效率,所以Codis官方推薦Codis的key-value大小不要超過(guò)1M。
由于Codis不是Redis的官方項(xiàng)目,所以每當(dāng)Redis發(fā)布新版本的時(shí)候,Codis都會(huì)瑟瑟發(fā)抖,隨著Redis退出自己的親兒子Redis-Cluster,Codis的競(jìng)爭(zhēng)力都在減弱。
今天我們對(duì)Github上面10kstar的Codis就介紹到這里,如果你有興趣,歡迎關(guān)注我,我們后面再繼續(xù)分析,談一談Codis中是如何做數(shù)據(jù)遷移的。
分享題目:Github上近萬(wàn)Star!Codis,中國(guó)人開(kāi)源的Redis集群部署解決方案
當(dāng)前網(wǎng)址:http://www.fisionsoft.com.cn/article/cdojohc.html


咨詢
建站咨詢
