自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

存儲(chǔ) 存儲(chǔ)軟件 Redis
Redis 多副本,采用主從(replication)部署結(jié)構(gòu),相較于單副本而言最大的特點(diǎn)就是主從實(shí)例間數(shù)據(jù)實(shí)時(shí)同步,并且提供數(shù)據(jù)持久化和備份策略。

本文主要針對 Redis 常見的幾種使用方式及其優(yōu)缺點(diǎn)展開分析。

[[279832]]

一、常見使用方式

Redis 的幾種常見使用方式包括:

  • Redis 單副本
  • Redis 多副本(主從)
  • Redis Sentinel(哨兵)
  • Redis Cluster
  • Redis 自研

二、各種使用方式的優(yōu)缺點(diǎn)

1、Redis 單副本

Redis 單副本,采用單個(gè) Redis 節(jié)點(diǎn)部署架構(gòu),沒有備用節(jié)點(diǎn)實(shí)時(shí)同步數(shù)據(jù),不提供數(shù)據(jù)持久化和備份策略,適用于數(shù)據(jù)可靠性要求不高的純緩存業(yè)務(wù)場景。 

阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

架構(gòu)簡單,部署方便;

高性價(jià)比:緩存使用時(shí)無需備用節(jié)點(diǎn)(單實(shí)例可用性可以用 supervisor 或 crontab 保證),當(dāng)然為了滿足業(yè)務(wù)的高可用性,也可以犧牲一個(gè)備用節(jié)點(diǎn),但同時(shí)刻只有一個(gè)實(shí)例對外提供服務(wù);

高性能。

缺點(diǎn):

不保證數(shù)據(jù)的可靠性;

在緩存使用,進(jìn)程重啟后,數(shù)據(jù)丟失,即使有備用的節(jié)點(diǎn)解決高可用性,但是仍然不能解決緩存預(yù)熱問題,因此不適用于數(shù)據(jù)可靠性要求高的業(yè)務(wù);

高性能受限于單核 CPU 的處理能力(Redis 是單線程機(jī)制),CPU 為主要瓶頸,所以適合操作命令簡單,排序、計(jì)算較少的場景。也可以考慮用 Memcached 替代。

2、Redis 多副本(主從)

Redis 多副本,采用主從(replication)部署結(jié)構(gòu),相較于單副本而言最大的特點(diǎn)就是主從實(shí)例間數(shù)據(jù)實(shí)時(shí)同步,并且提供數(shù)據(jù)持久化和備份策略。主從實(shí)例部署在不同的物理服務(wù)器上,根據(jù)公司的基礎(chǔ)環(huán)境配置,可以實(shí)現(xiàn)同時(shí)對外提供服務(wù)和讀寫分離策略。 

阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

高可靠性:一方面,采用雙機(jī)主備架構(gòu),能夠在主庫出現(xiàn)故障時(shí)自動(dòng)進(jìn)行主備切換,從庫提升為主庫提供服務(wù),保證服務(wù)平穩(wěn)運(yùn)行;另一方面,開啟數(shù)據(jù)持久化功能和配置合理的備份策略,能有效的解決數(shù)據(jù)誤操作和數(shù)據(jù)異常丟失的問題;

讀寫分離策略:從節(jié)點(diǎn)可以擴(kuò)展主庫節(jié)點(diǎn)的讀能力,有效應(yīng)對大并發(fā)量的讀操作。

缺點(diǎn):

故障恢復(fù)復(fù)雜,如果沒有 RedisHA 系統(tǒng)(需要開發(fā)),當(dāng)主庫節(jié)點(diǎn)出現(xiàn)故障時(shí),需要手動(dòng)將一個(gè)從節(jié)點(diǎn)晉升為主節(jié)點(diǎn),同時(shí)需要通知業(yè)務(wù)方變更配置,并且需要讓其它從庫節(jié)點(diǎn)去復(fù)制新主庫節(jié)點(diǎn),整個(gè)過程需要人為干預(yù),比較繁瑣;

主庫的寫能力受到單機(jī)的限制,可以考慮分片;

主庫的存儲(chǔ)能力受到單機(jī)的限制,可以考慮 Pika;

原生復(fù)制的弊端在早期的版本中也會(huì)比較突出,如:Redis 復(fù)制中斷后,Slave 會(huì)發(fā)起 psync,此時(shí)如果同步不成功,則會(huì)進(jìn)行全量同步,主庫執(zhí)行全量備份的同時(shí)可能會(huì)造成毫秒或秒級的卡頓;又由于 COW 機(jī)制,導(dǎo)致極端情況下的主庫內(nèi)存溢出,程序異常退出或宕機(jī);主庫節(jié)點(diǎn)生成備份文件導(dǎo)致服務(wù)器磁盤 IO 和 CPU(壓縮)資源消耗;發(fā)送數(shù) GB 大小的備份文件導(dǎo)致服務(wù)器出口帶寬暴增,阻塞請求,建議升級到最新版本。

3、Redis Sentinel(哨兵)

Redis Sentinel 是社區(qū)版本推出的原生高可用解決方案,其部署架構(gòu)主要包括兩部分:Redis Sentinel 集群和 Redis 數(shù)據(jù)集群。

其中 Redis Sentinel 集群是由若干 Sentinel 節(jié)點(diǎn)組成的分布式集群,可以實(shí)現(xiàn)故障發(fā)現(xiàn)、故障自動(dòng)轉(zhuǎn)移、配置中心和客戶端通知。Redis Sentinel 的節(jié)點(diǎn)數(shù)量要滿足 2n+1(n>=1)的奇數(shù)個(gè)。 

阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析
阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

Redis Sentinel 集群部署簡單;

能夠解決 Redis 主從模式下的高可用切換問題;

很方便實(shí)現(xiàn) Redis 數(shù)據(jù)節(jié)點(diǎn)的線形擴(kuò)展,輕松突破 Redis 自身單線程瓶頸,可極大滿足 Redis 大容量或高性能的業(yè)務(wù)需求;

可以實(shí)現(xiàn)一套 Sentinel 監(jiān)控一組 Redis 數(shù)據(jù)節(jié)點(diǎn)或多組數(shù)據(jù)節(jié)點(diǎn)。

缺點(diǎn):

部署相對 Redis 主從模式要復(fù)雜一些,原理理解更繁瑣;

資源浪費(fèi),Redis 數(shù)據(jù)節(jié)點(diǎn)中 slave 節(jié)點(diǎn)作為備份節(jié)點(diǎn)不提供服務(wù);

Redis Sentinel 主要是針對 Redis 數(shù)據(jù)節(jié)點(diǎn)中的主節(jié)點(diǎn)的高可用切換,對 Redis 的數(shù)據(jù)節(jié)點(diǎn)做失敗判定分為主觀下線和客觀下線兩種,對于 Redis 的從節(jié)點(diǎn)有對節(jié)點(diǎn)做主觀下線操作,并不執(zhí)行故障轉(zhuǎn)移。

不能解決讀寫分離問題,實(shí)現(xiàn)起來相對復(fù)雜。

建議:

如果監(jiān)控同一業(yè)務(wù),可以選擇一套 Sentinel 集群監(jiān)控多組 Redis 數(shù)據(jù)節(jié)點(diǎn)的方案,反之選擇一套 Sentinel 監(jiān)控一組 Redis 數(shù)據(jù)節(jié)點(diǎn)的方案。

sentinel monitor配置中的建議設(shè)置成 Sentinel 節(jié)點(diǎn)的一半加 1,當(dāng) Sentinel 部署在多個(gè) IDC 的時(shí)候,單個(gè) IDC 部署的 Sentinel 數(shù)量不建議超過(Sentinel 數(shù)量 – quorum)。

合理設(shè)置參數(shù),防止誤切,控制切換靈敏度控制:

a. quorum

b. down-after-milliseconds 30000

c. failover-timeout 180000

d. maxclient

e. timeout

部署的各個(gè)節(jié)點(diǎn)服務(wù)器時(shí)間盡量要同步,否則日志的時(shí)序性會(huì)混亂。

Redis 建議使用 pipeline 和 multi-keys 操作,減少 RTT 次數(shù),提高請求效率。

自行搞定配置中心(zookeeper),方便客戶端對實(shí)例的鏈接訪問。

4、Redis Cluster

Redis Cluster 是社區(qū)版推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求,比如,當(dāng)遇到單機(jī)內(nèi)存,并發(fā)和流量等瓶頸的時(shí)候,Redis Cluster 能起到很好的負(fù)載均衡的目的。

Redis Cluster 集群節(jié)點(diǎn)最小配置 6 個(gè)節(jié)點(diǎn)以上(3 主 3 從),其中主節(jié)點(diǎn)提供讀寫操作,從節(jié)點(diǎn)作為備用節(jié)點(diǎn),不提供請求,只作為故障轉(zhuǎn)移使用。

Redis Cluster 采用虛擬槽分區(qū),所有的鍵根據(jù)哈希函數(shù)映射到 0~16383 個(gè)整數(shù)槽內(nèi),每個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所印映射的鍵值數(shù)據(jù)。 

阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

無中心架構(gòu);

數(shù)據(jù)按照 slot 存儲(chǔ)分布在多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)間數(shù)據(jù)共享,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布;

可擴(kuò)展性:可線性擴(kuò)展到 1000 多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除;

高可用性:部分節(jié)點(diǎn)不可用時(shí),集群仍可用。通過增加 Slave 做 standby 數(shù)據(jù)副本,能夠?qū)崿F(xiàn)故障自動(dòng) failover,節(jié)點(diǎn)之間通過 gossip 協(xié)議交換狀態(tài)信息,用投票機(jī)制完成 Slave 到 Master 的角色提升;

降低運(yùn)維成本,提高系統(tǒng)的擴(kuò)展性和可用性。

缺點(diǎn):

Client 實(shí)現(xiàn)復(fù)雜,驅(qū)動(dòng)要求實(shí)現(xiàn) Smart Client,緩存 slots mapping 信息并及時(shí)更新,提高了開發(fā)難度,客戶端的不成熟影響業(yè)務(wù)的穩(wěn)定性。目前僅 JedisCluster 相對成熟,異常處理部分還不完善,比如常見的“max redirect exception”。

節(jié)點(diǎn)會(huì)因?yàn)槟承┰虬l(fā)生阻塞(阻塞時(shí)間大于 clutser-node-timeout),被判斷下線,這種 failover 是沒有必要的。

數(shù)據(jù)通過異步復(fù)制,不保證數(shù)據(jù)的強(qiáng)一致性。

多個(gè)業(yè)務(wù)使用同一套集群時(shí),無法根據(jù)統(tǒng)計(jì)區(qū)分冷熱數(shù)據(jù),資源隔離性較差,容易出現(xiàn)相互影響的情況。

Slave 在集群中充當(dāng)“冷備”,不能緩解讀壓力,當(dāng)然可以通過 SDK 的合理設(shè)計(jì)來提高 Slave 資源的利用率。

Key 批量操作限制,如使用 mset、mget 目前只支持具有相同 slot 值的 Key 執(zhí)行批量操作。對于映射為不同 slot 值的 Key 由于 Keys 不支持跨 slot 查詢,所以執(zhí)行 mset、mget、sunion 等操作支持不友好。

Key 事務(wù)操作支持有限,只支持多 key 在同一節(jié)點(diǎn)上的事務(wù)操作,當(dāng)多個(gè) Key 分布于不同的節(jié)點(diǎn)上時(shí)無法使用事務(wù)功能。

Key 作為數(shù)據(jù)分區(qū)的最小粒度,不能將一個(gè)很大的鍵值對象如 hash、list 等映射到不同的節(jié)點(diǎn)。

不支持多數(shù)據(jù)庫空間,單機(jī)下的 redis 可以支持到 16 個(gè)數(shù)據(jù)庫,集群模式下只能使用 1 個(gè)數(shù)據(jù)庫空間,即 db 0。

復(fù)制結(jié)構(gòu)只支持一層,從節(jié)點(diǎn)只能復(fù)制主節(jié)點(diǎn),不支持嵌套樹狀復(fù)制結(jié)構(gòu)。

避免產(chǎn)生 hot-key,導(dǎo)致主庫節(jié)點(diǎn)成為系統(tǒng)的短板。

避免產(chǎn)生 big-key,導(dǎo)致網(wǎng)卡撐爆、慢查詢等。

重試時(shí)間應(yīng)該大于 cluster-node-time 時(shí)間。

Redis Cluster 不建議使用 pipeline 和 multi-keys 操作,減少 max redirect 產(chǎn)生的場景。

5、Redis 自研

Redis 自研的高可用解決方案,主要體現(xiàn)在配置中心、故障探測和 failover 的處理機(jī)制上,通常需要根據(jù)企業(yè)業(yè)務(wù)的實(shí)際線上環(huán)境來定制化。 

阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析
阿里架構(gòu)師進(jìn)階專題:Redis集群的5種使用方式,各自優(yōu)缺點(diǎn)分析

優(yōu)點(diǎn):

高可靠性、高可用性;

自主可控性高;

貼切業(yè)務(wù)實(shí)際需求,可縮性好,兼容性好。

缺點(diǎn):

實(shí)現(xiàn)復(fù)雜,開發(fā)成本高;

需要建立配套的周邊設(shè)施,如監(jiān)控,域名服務(wù),存儲(chǔ)元數(shù)據(jù)信息的數(shù)據(jù)庫等;

維護(hù)成本高。

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2009-09-01 10:00:55

Tomcat集群方式

2024-08-27 08:29:49

2009-11-23 14:02:39

服務(wù)器虛擬化集群

2010-06-21 14:14:33

OSPF協(xié)議

2020-05-13 17:12:21

大數(shù)據(jù)分布式引擎

2024-05-06 00:00:00

Redis持久化備份

2017-10-23 13:20:37

2023-10-08 08:46:29

Java遍歷方式

2025-01-21 09:10:00

2017-03-06 14:45:27

超線程技術(shù)處理器技術(shù)服務(wù)器

2010-06-21 14:46:30

EIGRP路由協(xié)議

2010-11-11 17:15:13

SQL Server視

2019-07-25 15:32:35

分布式事務(wù)微服務(wù)系統(tǒng)架構(gòu)

2020-05-26 11:39:05

WebReact組件

2011-09-13 09:35:37

SQL Server集群

2009-04-13 16:37:33

JSPWeb標(biāo)簽

2014-07-10 10:30:24

2011-04-27 17:03:43

投影機(jī)

2020-04-28 10:05:33

JavaScript繼承前端

2020-11-13 06:18:07

JupyterPython數(shù)據(jù)分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號