<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 生產架構選型解決方案

          共 5512字,需瀏覽 12分鐘

           ·

          2021-07-28 02:21

          不點藍字,我們哪來故事?

          每天 11 點更新文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          來源:juejin.cn/post/6955355807231770631

          • 一 引擎版本
            • Redis 6.0新特性說明
            • Redis 5.0新特性說明
          • 二 架構
            • 2.1 主從架構-雙副本
            • 2.2 主從架構-單副本
            • 2.3 集群版-雙副本
            • 2.4 集群版-單副本
            • 2.5 讀寫分離版



          在寫開源項目的時候,想到了要支持多種redis部署方式,于是對于這塊的生產環(huán)境的架構選型展開調研

          有幫助的話,請點一個關注,支持我的繼續(xù)撰稿,謝謝~

          一 引擎版本

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

          Redis 6.0新特性說明

          • 模塊系統(tǒng)新增多個API。
          • 支持SSL/TLS加密。
          • 支持新的Redis協(xié)議:RESP3。
          • 服務端支持多模式的客戶端緩存。
          • 支持多線程IO。
          • 副本中支持無盤復制(diskless replication)。
          • Redis-benchmark新增了Redis集群模式。
          • 支持重寫Systemd。
          • 支持Disque模塊。

          Redis 5.0新特性說明

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

          二 架構

          您需要根據(jù)業(yè)務需求選擇:

          • 集群架構 可輕松突破Redis自身單線程瓶頸,滿足大容量、高性能的業(yè)務需求。
          • 主從架構 ,提供高性能的緩存服務和數(shù)據(jù)高可靠。
          • 讀寫分離架構 提供高可用、高性能、高靈活的讀寫分離服務,解決熱點數(shù)據(jù)集中及高并發(fā)讀取的業(yè)務需求,最大化地節(jié)約用戶運維成本。

          2.1 主從架構-雙副本

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

          可靠性

          • 服務可靠采用雙機主從(master-replica)架構,主從節(jié)點位于不同物理機。主節(jié)點對外提供訪問,用戶可通過Redis命令行和通用客戶端進行數(shù)據(jù)的增刪改查操作。當主節(jié)點出現(xiàn)故障,HA系統(tǒng)會自動進行主從切換,保證業(yè)務平穩(wěn)運行。
          • 數(shù)據(jù)可靠默認開啟數(shù)據(jù)持久化功能,數(shù)據(jù)全部落盤。支持數(shù)據(jù)備份功能,用戶可以針對備份集回滾實例或者克隆實例,有效地解決數(shù)據(jù)誤操作等問題。

          使用場景

          • Redis作為持久化數(shù)據(jù)存儲使用的業(yè)務標準版提供持久化機制及備份恢復機制,極大地保證數(shù)據(jù)可靠性。
          • 單個Redis性能壓力可控的業(yè)務由于Redis原生采用單線程機制,性能在10萬QPS以下的業(yè)務建議使用。如果需要更高的性能要求,請選用集群版本。
          • Redis命令相對簡單,排序、計算類命令較少的業(yè)務由于Redis的單線程機制,CPU會成為主要瓶頸。如排序、計算類較多的業(yè)務建議選用集群版配置。

          2.2 主從架構-單副本

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

          使用場景

          • 純緩存類業(yè)務場景

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

          • 單個Redis性能壓力可控

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

          • Redis命令相對簡單,排序、計算類命令較少

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

          2.3 集群版-雙副本

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

          代理模式

          集群架構的本地盤實例默認采用代理(proxy)模式 ,支持通過一個統(tǒng)一的連接地址(域名)訪問Redis集群,客戶端的請求通過代理服務器轉發(fā)到各數(shù)據(jù)分片,代理服務器、數(shù)據(jù)分片和配置服務器均不提供單獨的連接地址,降低了應用開發(fā)難度和代碼復雜度。代理模式的服務架構圖和組件說明如下。

          image.png
          image.png

          直連模式

          因所有請求都要通過代理服務器轉發(fā),代理模式在降低業(yè)務開發(fā)難度的同時也會小幅度影響Redis服務的響應速度。如果業(yè)務對響應速度的要求非常高,您可以使用直連模式,繞過代理服務器直接連接后端數(shù)據(jù)分片,從而降低網絡開銷和服務響應時間。直連模式的服務架構和說明如下。

          image.png

          前提條件 使用Jedis、PhpRedis等支持Redis Cluster的客戶端。

          • 使用不支持Redis Cluster的客戶端,可能因客戶端無法重定向請求到正確的分片而獲取不到需要的數(shù)據(jù)。
          • Jedis對于Redis Cluster的支持是基于JedisCluster這個類,詳細說明請參見Jedis文檔。
          • 您可以在Redis官網的客戶端列表里查找更多支持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è)務需要設置,不能超過實例規(guī)格規(guī)定的最大的連接數(shù)
              config.setMaxIdle(200);
              // 最大連接數(shù), 根據(jù)業(yè)務需要設置,不能超過實例規(guī)格規(guī)定的最大的連接數(shù)
              config.setMaxTotal(300);
              config.setTestOnBorrow(false);
              config.setTestOnReturn(false);

              // 開通直連訪問時申請到的直連地址
              String host = "r-bp1xxxxxxxxxxxx.redis.rds.aliyuncs.com";
              int port = 6379;
              // 實例的密碼
              String password = "xxxxx";

              Set<HostAndPort> jedisClusterNode = new HashSet<HostAndPort>();
              jedisClusterNode.add(new HostAndPort(host, port));
              JedisCluster jc = new JedisCluster(jedisClusterNode, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT,
                      DEFAULT_REDIRECTIONS,password, "clientName", config);
          }

          }`

          2.4 集群版-單副本

          image.png
          image.png

          2.5 讀寫分離版

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

          image.png
          image.png

          特點

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

          使用場景

          • 讀取請求QPS(Queries Per Second)壓力較大

          標準版Redis無法支撐較大的QPS,如果業(yè)務類型是讀多寫少類型,需要采用多個只讀節(jié)點的部署方式來突破Redis單線程的性能瓶頸。Redis集群版提供1個、3個、5個只讀節(jié)點的配置,相比標準版可以將QPS提升近5倍。

          對Redis協(xié)議兼容性要求較高的業(yè)務 讀寫分離版完全兼容Redis協(xié)議命令,可將自建Redis數(shù)據(jù)庫遷移至讀寫分離版,同時支持從Redis標準版(雙副本)一鍵平滑升級至讀寫分離版。

          建議與使用須知

          • 當一個只讀節(jié)點發(fā)生故障時,請求會轉發(fā)到其他節(jié)點;如果所有只讀節(jié)點均不可用,請求會全部轉發(fā)到主節(jié)點。只讀節(jié)點異??赡軐е轮鞴?jié)點負載提高、響應時間變長,因此在讀負載高的業(yè)務場景建議使用多個只讀節(jié)點。
          • 某些場景會觸發(fā)只讀節(jié)點的全量同步,例如在主節(jié)點觸發(fā)高可用切換后。全量同步期間只讀節(jié)點不提供服務并返回-LOADING Redis is loading the dataset in memory\r\n信息。
          - END -

          往期推薦

          用好 Java 中的枚舉,讓你的工作效率飛起來!

          Java工具庫,減少90%代碼量

          MyBatis 流式查詢,有點東西

          Spring為什么建議使用構造器來注入?

          下方二維碼關注我

          技術草根堅持分享 編程,算法,架構

          看完文章,餓了點外賣,點擊 ??《無門檻外賣優(yōu)惠券,每天免費領!》

          朋友,助攻一把!點個在看
          瀏覽 66
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  人妻无码专区 | 欧洲性爱网址 | 亚洲激情视频 | 成人网站在线观看18 | 国产3344在线观看视频 |