更新時(shí)間:2020-09-16 14:49:09 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1624次
客戶端分片
Redis Sharding是Redis Cluster出來(lái)之前,業(yè)界普遍使用的多Redis實(shí)例集群方法。其主要思想是采用哈希算法將Redis數(shù)據(jù)的key進(jìn)行散列,通過(guò)hash函數(shù),特定的key會(huì)映射到特定的Redis節(jié)點(diǎn)上。java redis客戶端驅(qū)動(dòng)jedis,支持Redis Sharding功能,即ShardedJedis以及結(jié)合緩存池的ShardedJedisPool。
Redis Sentinel提供了主備模式下Redis監(jiān)控、故障轉(zhuǎn)移功能達(dá)到系統(tǒng)的高可用性。在主Redis宕機(jī)時(shí),備Redis接管過(guò)來(lái),上升為主Redis,繼續(xù)提供服務(wù)。主備共同組成一個(gè)Redis節(jié)點(diǎn),通過(guò)自動(dòng)故障轉(zhuǎn)移,保證了節(jié)點(diǎn)的高可用性。
客戶端sharding技術(shù)其優(yōu)勢(shì)在于非常簡(jiǎn)單,服務(wù)端的Redis實(shí)例彼此獨(dú)立,相互無(wú)關(guān)聯(lián),每個(gè)Redis實(shí)例像單服務(wù)器一樣運(yùn)行,非常容易線性擴(kuò)展,系統(tǒng)的靈活性很強(qiáng)。
客戶端sharding的劣勢(shì)也是很明顯的。由于sharding處理放到客戶端,規(guī)模進(jìn)一步擴(kuò)大時(shí)給運(yùn)維帶來(lái)挑戰(zhàn)。客戶端sharding不支持動(dòng)態(tài)增刪節(jié)點(diǎn)。服務(wù)端Redis實(shí)例群拓?fù)浣Y(jié)構(gòu)有變化時(shí),每個(gè)客戶端都需要更新調(diào)整。連接不能共享,當(dāng)應(yīng)用規(guī)模增大時(shí),資源浪費(fèi)制約優(yōu)化。
基于代理的分片
客戶端發(fā)送請(qǐng)求到一個(gè)代理組件,代理解析客戶端的數(shù)據(jù),并將請(qǐng)求轉(zhuǎn)發(fā)至正確的節(jié)點(diǎn),最后將結(jié)果回復(fù)給客戶端。
該模式的特性如下:
1.透明接入,業(yè)務(wù)程序不用關(guān)心后端Redis實(shí)例,切換成本低。
2.Proxy的邏輯和存儲(chǔ)的邏輯是隔離的。
3.代理層多了一次轉(zhuǎn)發(fā),性能有所損耗。
簡(jiǎn)單的結(jié)構(gòu)圖如下:
主流的組件有:Twemproxy和Codis。
Codis
Codis是豌豆莢開源的redis集群方案,是一個(gè)分布式Redis解決方案,對(duì)于上層的應(yīng)用來(lái)說(shuō),連接到Codis Proxy和連接原生的Redis Server沒(méi)有顯著區(qū)別,上層應(yīng)用可以像使用單機(jī)的Redis一樣使用,Codis底層會(huì)處理請(qǐng)求的轉(zhuǎn)發(fā),不停機(jī)的數(shù)據(jù)遷移等工作,所有后邊的一切事情,對(duì)于前面的客戶端來(lái)說(shuō)是透明的,可以簡(jiǎn)單的認(rèn)為后邊連接的是一個(gè)內(nèi)存無(wú)限大的Redis服務(wù)。
Codis當(dāng)前最新release版本為codis-3.2,codis-server基于redis-3.2.8。有一下組件組成:
Codis
Codis Server:基于redis-3.2.8分支開發(fā)。增加了額外的數(shù)據(jù)結(jié)構(gòu),以支持slot有關(guān)的操作以及數(shù)據(jù)遷移指令。
Codis Proxy:客戶端連接的Redis代理服務(wù),實(shí)現(xiàn)了Redis協(xié)議。除部分命令不支持以外(不支持的命令列表),表現(xiàn)的和原生的Redis沒(méi)有區(qū)別(就像Twemproxy)。
Codis Dashboard:集群管理工具,支持codis-proxy、codis-server的添加、刪除,以及據(jù)遷移等操作。在集群狀態(tài)發(fā)生改變時(shí),codis-dashboard維護(hù)集群下所有codis-proxy的狀態(tài)的一致性。
對(duì)于同一個(gè)業(yè)務(wù)集群而言,同一個(gè)時(shí)刻codis-dashboard只能有0個(gè)或者1個(gè);所有對(duì)集群的修改都必須通過(guò)codis-dashboard完成。
Codis Admin:集群管理的命令行工具。
可用于控制codis-proxy、codis-dashboard狀態(tài)以及訪問(wèn)外部存儲(chǔ)。
Codis FE:集群管理界面。
多個(gè)集群實(shí)例共享可以共享同一個(gè)前端展示頁(yè)面;
通過(guò)配置文件管理后端codis-dashboard列表,配置文件可自動(dòng)更新。
Storage:為集群狀態(tài)提供外部存儲(chǔ)。
提供Namespace概念,不同集群的會(huì)按照不同product name進(jìn)行組織;目前僅提供了Zookeeper、Etcd、Fs三種實(shí)現(xiàn),但是提供了抽象的interface可自行擴(kuò)展。
至于具體的安裝與使用,見(jiàn)官網(wǎng)CodisLabs,不在此涉及。
Codis的特性:
Codis支持的命令更加豐富,基本支持redis的命令。
遷移成本低,遷移到codis沒(méi)這么麻煩,只要使用的redis命令在codis支持的范圍之內(nèi),只要修改一下配置即可接入。
Codis提供的運(yùn)維工具更加友好,提供web圖形界面管理集群。
支持多核心CPU,twemproxy只能單核
支持group劃分,組內(nèi)可以設(shè)置一個(gè)主多個(gè)從,通過(guò)sentinel監(jiān)控redis主從,當(dāng)主down了自動(dòng)將從切換為主
以上就是對(duì)“redis集群教程之實(shí)現(xiàn)的幾種方法”的介紹,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743