<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 生產(chǎn)架構(gòu)選型解決方案

          共 5050字,需瀏覽 11分鐘

           ·

          2022-01-22 14:04


          在寫(xiě)開(kāi)源項(xiàng)目的時(shí)候,想到了要支持多種redis部署方式,于是對(duì)于這塊的生產(chǎn)環(huán)境的架構(gòu)選型展開(kāi)調(diào)研

          有幫助的話,請(qǐng)點(diǎn)一個(gè)關(guān)注,支持我的繼續(xù)撰稿,謝謝~


          一 引擎版本
          推薦使用更新的引擎版本以支持更多的特性,

          Redis 6.0新特性說(shuō)明

          • 模塊系統(tǒng)新增多個(gè)API。

          • 支持SSL/TLS加密。

          • 支持新的Redis協(xié)議:

            RESP3。

          • 服務(wù)端支持多模式的客戶端緩存。

          • 支持多線程IO。

          • 副本中支持無(wú)盤(pán)復(fù)制(diskless replication)。

          • Redis-benchmark新增了Redis集群模式。

          • 支持重寫(xiě)Systemd。

          • 支持Disque模塊。

          Redis 5.0新特性說(shuō)明

          • 云數(shù)據(jù)庫(kù)Redis 5.0版本大幅度優(yōu)化內(nèi)核,運(yùn)行更加穩(wěn)定,同時(shí)新增Stream、賬號(hào)管理、審計(jì)日志等多種特性,滿足您更多場(chǎng)景下的使用需求。
          • 新的數(shù)據(jù)類型:
            流數(shù)據(jù)(Stream)。
            詳細(xì)說(shuō)明請(qǐng)參見(jiàn)Redis Streams。
          • 新增賬號(hào)管理功能。
          • 新增日志管理功能,支持審計(jì)日志、運(yùn)行日志和慢日志,您可以通過(guò)日志管理查詢讀寫(xiě)操作、敏感操作(如KEYS、FLUSHALL)和管理類命令的使用記錄以及慢日志。
          • 新增基于快照的緩存分析功能。
          • 新的定時(shí)器(Timers)、集群( Cluster)和字典(Dictionary)模塊的API。
          • RDB中增加LFU和LRU信息。
          • 集群管理器從Ruby (redis-trib.rb)移植到了redis-cli中的C語(yǔ)言代碼。
          • 新增有序集合(Sorted Set)命令ZPOPMIN、ZPOPMAX、BZPOPMIN和BZPOPMAX。
          • 升級(jí)Active Defragmentation至v2版本。
          • 增強(qiáng)HyperLogLog的實(shí)現(xiàn)。
          • 優(yōu)化內(nèi)存統(tǒng)計(jì)報(bào)告。
          • 為許多有子命令的命令增加了HELP子命令。
          • 提高了客戶端頻繁連接和斷開(kāi)連接時(shí)的性能表現(xiàn)。
          • 升級(jí)Jemalloc至5.1版本。
          • 新增命令CLIENT ID和CLIENT UNBLOCK。
          • 新增了為藝術(shù)而生的LOLWUT命令。
          • 棄用slave術(shù)語(yǔ)(需要API向后兼容的情況例外)。
          • 對(duì)網(wǎng)絡(luò)層進(jìn)行了多處優(yōu)化。
          • 進(jìn)行了一些Lua相關(guān)的改進(jìn)。
          • 新增動(dòng)態(tài)HZ(Dynamic HZ)以平衡空閑CPU使用率和響應(yīng)性。
          • 對(duì)Redis核心代碼進(jìn)行了重構(gòu)并在許多方面進(jìn)行了改進(jìn)。


          二 架構(gòu)

          您需要根據(jù)業(yè)務(wù)需求選擇:
          • 集群架構(gòu)可輕松突破Redis自身單線程瓶頸,滿足大容量、高性能的業(yè)務(wù)需求。

          • 主從架構(gòu),提供高性能的緩存服務(wù)和數(shù)據(jù)高可靠。

          • 讀寫(xiě)分離架構(gòu)提供高可用、高性能、高靈活的讀寫(xiě)分離服務(wù),解決熱點(diǎn)數(shù)據(jù)集中及高并發(fā)讀取的業(yè)務(wù)需求,最大化地節(jié)約用戶運(yùn)維成本。

          2.1 主從架構(gòu)-雙副本

          采用主從(master-replica)模式搭建。主節(jié)點(diǎn)提供日常服務(wù)訪問(wèn),備節(jié)點(diǎn)提供HA高可用,當(dāng)主節(jié)點(diǎn)發(fā)生故障,系統(tǒng)會(huì)自動(dòng)在30秒內(nèi)切換至備節(jié)點(diǎn),保證業(yè)務(wù)平穩(wěn)運(yùn)行。

          可靠性


          • 服務(wù)可靠采用雙機(jī)主從(master-replica)架構(gòu),主從節(jié)點(diǎn)位于不同物理機(jī)。

            主節(jié)點(diǎn)對(duì)外提供訪問(wèn),用戶可通過(guò)Redis命令行和通用客戶端進(jìn)行數(shù)據(jù)的增刪改查操作。

            當(dāng)主節(jié)點(diǎn)出現(xiàn)故障,HA系統(tǒng)會(huì)自動(dòng)進(jìn)行主從切換,保證業(yè)務(wù)平穩(wěn)運(yùn)行。

          • 數(shù)據(jù)可靠默認(rèn)開(kāi)啟數(shù)據(jù)持久化功能,數(shù)據(jù)全部落盤(pán)。

            支持?jǐn)?shù)據(jù)備份功能,用戶可以針對(duì)備份集回滾實(shí)例或者克隆實(shí)例,有效地解決數(shù)據(jù)誤操作等問(wèn)題。


          使用場(chǎng)景


          • Redis作為持久化數(shù)據(jù)存儲(chǔ)使用的業(yè)務(wù)標(biāo)準(zhǔn)版提供持久化機(jī)制及備份恢復(fù)機(jī)制,極大地保證數(shù)據(jù)可靠性。

          • 單個(gè)Redis性能壓力可控的業(yè)務(wù)由于Redis原生采用單線程機(jī)制,性能在10萬(wàn)QPS以下的業(yè)務(wù)建議使用。

            如果需要更高的性能要求,請(qǐng)選用集群版本。

          • Redis命令相對(duì)簡(jiǎn)單,排序、計(jì)算類命令較少的業(yè)務(wù)由于Redis的單線程機(jī)制,CPU會(huì)成為主要瓶頸。

            如排序、計(jì)算類較多的業(yè)務(wù)建議選用集群版配置。

          2.2 主從架構(gòu)-單副本

          可以在沒(méi)有數(shù)據(jù)可靠性要求的純緩存場(chǎng)景充分發(fā)揮性能優(yōu)勢(shì)。

          使用場(chǎng)景


          • 純緩存類業(yè)務(wù)場(chǎng)景

          單副本版本只有一個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn),節(jié)點(diǎn)出現(xiàn)故障時(shí),系統(tǒng)會(huì)重新拉起一個(gè)Redis進(jìn)程(沒(méi)有數(shù)據(jù)),當(dāng)節(jié)點(diǎn)故障業(yè)務(wù)自動(dòng)切換完成后,應(yīng)用程序需要將數(shù)據(jù)重新預(yù)熱,以免對(duì)后端數(shù)據(jù)庫(kù)產(chǎn)生訪問(wèn)壓力沖擊。單副本架構(gòu)不能提供數(shù)據(jù)可靠性,如果發(fā)生節(jié)點(diǎn)故障,您需要重新對(duì)業(yè)務(wù)進(jìn)行預(yù)熱,因此,在對(duì)數(shù)據(jù)可靠性要求較高的敏感性業(yè)務(wù)中,建議選用雙副本架構(gòu)。

          • 單個(gè)Redis性能壓力可控

          由于Redis原生采用單線程機(jī)制,CPU為單核能力,性能在8萬(wàn)QPS的業(yè)務(wù)建議使用。如果需要更高的性能要求,請(qǐng)選用集群版配置。

          • Redis命令相對(duì)簡(jiǎn)單,排序、計(jì)算類命令較少

          由于Redis的單線程機(jī)制,CPU為主要瓶頸。如排序、計(jì)算類較多的業(yè)務(wù)建議選用集群版配置。

          2.3 集群版-雙副本

          可輕松突破Redis自身單線程瓶頸,滿足大容量、高性能的業(yè)務(wù)需求。雙副本集群版實(shí)例采用集群架構(gòu),每個(gè)分片服務(wù)器采用主從(master-replica)雙副本模式。集群版支持代理和直連兩種連接模式,您可以根據(jù)本章節(jié)的說(shuō)明,選擇適合業(yè)務(wù)需求的連接模式。

          代理模式

          集群架構(gòu)的本地盤(pán)實(shí)例默認(rèn)采用代理(proxy)模式,支持通過(guò)一個(gè)統(tǒng)一的連接地址(域名)訪問(wèn)Redis集群,客戶端的請(qǐng)求通過(guò)代理服務(wù)器轉(zhuǎn)發(fā)到各數(shù)據(jù)分片,代理服務(wù)器、數(shù)據(jù)分片和配置服務(wù)器均不提供單獨(dú)的連接地址,降低了應(yīng)用開(kāi)發(fā)難度和代碼復(fù)雜度。代理模式的服務(wù)架構(gòu)圖和組件說(shuō)明如下。
          搜索公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù)“2T”,獲取一份驚喜禮包。


          直連模式

          因所有請(qǐng)求都要通過(guò)代理服務(wù)器轉(zhuǎn)發(fā),代理模式在降低業(yè)務(wù)開(kāi)發(fā)難度的同時(shí)也會(huì)小幅度影響Redis服務(wù)的響應(yīng)速度。如果業(yè)務(wù)對(duì)響應(yīng)速度的要求非常高,您可以使用直連模式,繞過(guò)代理服務(wù)器直接連接后端數(shù)據(jù)分片,從而降低網(wǎng)絡(luò)開(kāi)銷(xiāo)和服務(wù)響應(yīng)時(shí)間。直連模式的服務(wù)架構(gòu)和說(shuō)明如下。

          前提條件 使用Jedis、PhpRedis等支持Redis Cluster的客戶端。
          使用自定義連接池的示例代碼?
          import redis.clients.jedis.*;import java.util.HashSet;import java.util.Set; public class main {private static final int DEFAULT_TIMEOUT = 2000; private static final int DEFAULT_REDIRECTIONS = 5;private static final JedisPoolConfig DEFAULT_CONFIG = new JedisPoolConfig();

          public static void main(String args[]){ JedisPoolConfig config = new JedisPoolConfig(); // 最大空閑連接數(shù), 根據(jù)業(yè)務(wù)需要設(shè)置,不能超過(guò)實(shí)例規(guī)格規(guī)定的最大的連接數(shù) config.setMaxIdle(200); // 最大連接數(shù), 根據(jù)業(yè)務(wù)需要設(shè)置,不能超過(guò)實(shí)例規(guī)格規(guī)定的最大的連接數(shù) config.setMaxTotal(300); config.setTestOnBorrow(false); config.setTestOnReturn(false);
          // 開(kāi)通直連訪問(wèn)時(shí)申請(qǐng)到的直連地址 String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com"; int port = 6379; // 實(shí)例的密碼 String password = "xxxxx";
          Set jedisClusterNode = new HashSet(); jedisClusterNode.add(new HostAndPort(host, port)); JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_REDIRECTIONS,password, "clientName", config);}}

          2.4 集群版-單副本

          2.5 讀寫(xiě)分離版

          針對(duì)讀多寫(xiě)少的業(yè)務(wù)場(chǎng)景,提供高可用、高性能、靈活的讀寫(xiě)分離服務(wù),滿足熱點(diǎn)數(shù)據(jù)集中及高并發(fā)讀取的業(yè)務(wù)需求,最大化地節(jié)約運(yùn)維成本。讀寫(xiě)分離版主要由主備節(jié)點(diǎn)、只讀節(jié)點(diǎn)、Proxy(代理)節(jié)點(diǎn)和高可用系統(tǒng)組成。

          特點(diǎn)

          • 高可用
          1. 通過(guò)自研的高可用系統(tǒng)自動(dòng)監(jiān)控所有數(shù)據(jù)節(jié)點(diǎn)的健康狀態(tài),為整個(gè)實(shí)例的可用性保駕護(hù)航。
            主節(jié)點(diǎn)不可用時(shí)自動(dòng)選擇新的主節(jié)點(diǎn)并重新搭建復(fù)制拓?fù)洹?/span>
            某個(gè)只讀節(jié)點(diǎn)異常時(shí),高可用系統(tǒng)能夠自動(dòng)探知并重新啟動(dòng)新節(jié)點(diǎn)完成數(shù)據(jù)同步,下線異常節(jié)點(diǎn)。
          2. Proxy節(jié)點(diǎn)實(shí)時(shí)感知每個(gè)只讀實(shí)例的服務(wù)狀態(tài)。
            在某個(gè)只讀實(shí)例異常期間,Proxy會(huì)自動(dòng)降低該節(jié)點(diǎn)的服務(wù)權(quán)重,發(fā)現(xiàn)只讀節(jié)點(diǎn)連續(xù)失敗超過(guò)一定次數(shù)以后,會(huì)停止異常節(jié)點(diǎn)的服務(wù)權(quán)利,并具備繼續(xù)監(jiān)控后續(xù)重新啟動(dòng)節(jié)點(diǎn)服務(wù)的能力。
          • 高性能
          1. 讀寫(xiě)分離版采取鏈?zhǔn)綇?fù)制架構(gòu),可以通過(guò)擴(kuò)展只讀實(shí)例個(gè)數(shù)使整體實(shí)例性能呈線性增長(zhǎng),同時(shí)基于源碼層面對(duì)Redis復(fù)制流程的定制優(yōu)化,可以最大程度地提升線性復(fù)制的系統(tǒng)穩(wěn)定性,充分利用每一個(gè)只讀節(jié)點(diǎn)的物理資源。


          使用場(chǎng)景


          • 讀取請(qǐng)求QPS(Queries Per Second)壓力較大
          標(biāo)準(zhǔn)版Redis無(wú)法支撐較大的QPS,如果業(yè)務(wù)類型是讀多寫(xiě)少類型,需要采用多個(gè)只讀節(jié)點(diǎn)的部署方式來(lái)突破Redis單線程的性能瓶頸。Redis集群版提供1個(gè)、3個(gè)、5個(gè)只讀節(jié)點(diǎn)的配置,相比標(biāo)準(zhǔn)版可以將QPS提升近5倍。
          對(duì)Redis協(xié)議兼容性要求較高的業(yè)務(wù) 讀寫(xiě)分離版完全兼容Redis協(xié)議命令,可將自建Redis數(shù)據(jù)庫(kù)遷移至讀寫(xiě)分離版,同時(shí)支持從Redis標(biāo)準(zhǔn)版(雙副本)一鍵平滑升級(jí)至讀寫(xiě)分離版。


          建議與使用須知


          • 當(dāng)一個(gè)只讀節(jié)點(diǎn)發(fā)生故障時(shí),請(qǐng)求會(huì)轉(zhuǎn)發(fā)到其他節(jié)點(diǎn);如果所有只讀節(jié)點(diǎn)均不可用,請(qǐng)求會(huì)全部轉(zhuǎn)發(fā)到主節(jié)點(diǎn)。只讀節(jié)點(diǎn)異常可能導(dǎo)致主節(jié)點(diǎn)負(fù)載提高、響應(yīng)時(shí)間變長(zhǎng),因此在讀負(fù)載高的業(yè)務(wù)場(chǎng)景建議使用多個(gè)只讀節(jié)點(diǎn)。
          • 某些場(chǎng)景會(huì)觸發(fā)只讀節(jié)點(diǎn)的全量同步,例如在主節(jié)點(diǎn)觸發(fā)高可用切換后。全量同步期間只讀節(jié)點(diǎn)不提供服務(wù)并返回-LOADING Redis is loading the dataset in memory\r\n信息。


          全棧架構(gòu)社區(qū)交流群

          ?「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進(jìn)行加群。歡迎有想法、樂(lè)于分享的朋友們一起交流學(xué)習(xí)。

          掃描添加好友邀你進(jìn)架構(gòu)師群,加我時(shí)注明姓名+公司+職位】

          看完本文有收獲?請(qǐng)轉(zhuǎn)發(fā)分享給更多人


          往期資源:


          Flutter 移動(dòng)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 視頻(開(kāi)發(fā)你自己的抖音APP)
          Java面試進(jìn)階訓(xùn)練營(yíng) 第2季(分布式篇)
          Java高級(jí) - 分布式系統(tǒng)開(kāi)發(fā)技術(shù)視頻
          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  考逼免费网站 | 插人网站在线看 | 久久小视频 | 国产色婷婷手机在线 | 国产乱伦三级片导航 |