全部產品
Search
文件中心

ApsaraDB for Redis:Redis Proxy特性說明

更新時間:Jun 19, 2024

ApsaraDB for Redis叢集架構和讀寫分離架構中,Proxy 伺服器(Proxy)承擔著路由轉寄、負載平衡和容錯移轉等職責,可以協助您簡化用戶端的邏輯,同時支援多資料庫(DB)、緩衝熱點資料等進階功能。通過瞭解Proxy的路由轉寄規則和特定命令的處理方式,有助於您設計更高效的業務系統。

Proxy介紹

圖 1. 叢集和讀寫分離架構圖叢集和讀寫分離架構圖

Proxy 伺服器(Proxy)是Redis執行個體中的一個組件(單節點架構),不會佔用資料分區的資源,通過多個Proxy節點實現負載平衡及容錯移轉。

Proxy能力

說明

叢集版使用模式轉換

Proxy能夠實現架構轉換,協助您如同在使用標準架構一樣地使用叢集架構。Proxy支援對DELEXISTSMGETMSETSDIFFUNLINK等命令進行跨Slot的多Key操作,更多資訊請參見代理模式(Proxy)支援的命令列表

當標準架構無法支撐業務發展時,您無需修改代碼即可將標準架構的資料移轉至帶有Proxy的叢集架構,大幅度降低業務改造成本。

負載平衡和路由轉寄

Proxy與後端的資料分區建立長串連,負責請求負載平衡和路由轉寄操作,關於轉寄規則的介紹,請參見Proxy的路由轉寄規則

管理唯讀節點流量

Proxy會即時探測唯讀節點的狀態,當出現下述情況時,Proxy會執行流量管控動作:

  • 唯讀節點處於異常狀態:Proxy會降低該節點的服務權重,如果多次無法串連該節點,Proxy會停止該節點的服務(即不再將流量轉寄至該節點),待該異常被修複後重新啟用該節點。

  • 唯讀節點處於全量同步狀態:Proxy會暫時停止該節點的服務,直到該節點完成全量同步。

緩衝熱點Key資訊

開啟代理查詢快取功能(Proxy Query Cache)後,Proxy會緩衝熱點Key對應的請求和返回資訊,當在有效時間內收到同樣的請求時直接返回結果至用戶端,無需和後端的資料分區互動,可更好地改善對熱點Key的發起大量讀請求導致的訪問傾斜。更多資訊,請參見通過Proxy Query Cache最佳化熱點Key問題

說明

該功能僅Tair記憶體型叢集架構執行個體支援。

支援多資料庫(DB)

叢集模式下,原生Redis和Cluster client均不支援多資料庫(DB)功能,只使用預設的0號資料庫,也不支援SELECT命令。但您可以通過Proxy訪問叢集執行個體,支援多資料庫(DB)功能,支援使用SELECT命令,叢集版執行個體預設為256個DB。

說明

若您使用StackExchange.Redis用戶端,請使用StackExchange.Redis 2.7.20及以上版本,否則會產生報錯,更多資訊請參見StackExchange.Redis升級公告

說明

由於Proxy的演化,Proxy的個數並不完全代表Proxy處理能力,阿里雲會保證叢集規格中Proxy的配比符合規格說明的要求。

Proxy的路由轉寄規則

說明

關於各類命令的介紹,請參見Redis命令概覽

架構

轉寄規則

說明

叢集架構

基礎轉寄規則

  • 對於操作單個Key的命令,Proxy會根據Key所屬的Slot(槽)將請求發送給所屬的資料分區。

  • 對於操作多個Key的命令,如果這些Key是儲存在不同的資料分區,Proxy會將命令拆分成多個命令分別發送給對應的分區。

特定命令轉寄規則

  • 發布訂閱類命令

    對於PUBLISHSUBSCRIBE等發布訂閱命令,Proxy會根據channel name進行Hash計算,並分區至對應資料分區。

    說明

    您可以在控制台的效能監控頁面選擇數據節點,然後將自訂監控項設定為Pub/Sub監控組,即可查看各資料分區(預設展示第一個資料分區)中發布與訂閱(Pub/Sub)相關命令的監控資訊。具體操作,請參見查看效能監控

  • 阿里雲自研的命令

    使用阿里雲自研的命令(例如IINFOISCAN等)時,如果通過idx參數指定了資料分區ID,Proxy會將這些命令發送到指定的資料分區。更多資訊,請參見阿里雲自研的Proxy命令

讀寫分離架構

基礎轉寄規則

  • 寫請求:Proxy將其直接轉寄到主節點(Master)。

  • 讀請求:Proxy將讀請求平均分配到主節點和唯讀節點,暫不支援自訂控制。例如擁有3個唯讀節點的執行個體,主節點和3個唯讀讀權重均為25%。

    說明

    SLOWLOGDBSIZE也屬於讀命令。

特定命令轉寄規則

  • SCAN類命令

    當您執行HSCANSSCANZSCAN命令時,Proxy會先計算Key所屬的Slot,並對主節點和所有隻讀節點進行模數計算,將請求發送至對應節點。

  • 阿里雲自研的命令

    使用阿里雲自研的命令(例如RIINFORIMONITOR等)時,可通過ro_slave_idx參數指定該命令要轉寄到的唯讀節點,通過idx參數指定該命令要轉寄到的資料分區。更多資訊,請參見阿里雲自研的Proxy命令

  • 其他命令

    Proxy會將事務命令(MULTIEXEC)、Lua指令碼命令 (EVALEVALSHA)、SCANINFO、發布訂閱命令(PUBLISHSUBSCRIBE等)轉寄至主節點。

串連數使用說明

通常情況下,Proxy通過與資料分區建立長串連來處理請求。當請求中包含以下命令時,Proxy會根據命令的處理需求在相應的資料分區上建立額外的串連,此時串連無法彙總,執行個體的最大串連數和每秒建立串連數都會受到資料節點單個分區的限制(單個分區的限制請參見具體的執行個體規格)。您需要合理使用下述命令,避免串連數超限。

說明

代理模式下,Redis社區版執行個體每個資料分區的串連數上限為10,000,Tair(Redis企業版)執行個體每個資料分區的串連數上限為30,000。

  • 阻塞類命令:BRPOPBRPOPLPUSHBLPOPBZPOPMAXBZPOPMINBLMOVEBLMPOPBZMPOP

  • 事務類命令:MULTIEXECWATCH

  • MONITOR類命令:MONITORIMONITORRIMONITOR

  • 訂閱命令:SUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBESSUBSCRIBESUNSUBSCRIBE

常見問題

  • Q:是否支援將只進行讀操作的Lua指令碼轉寄至唯讀節點嗎?

    A:支援,但需要滿足以下條件。

    • 使用唯讀帳號,更多資訊請參見建立與管理帳號

    • 將執行個體的readonly_lua_route_ronode_enable參數的值設定為1,即僅包含讀操作的Lua指令碼會被轉寄到唯讀副本處理。具體操作,請參見設定執行個體參數

  • Q:代理(Proxy)模式和直連模式有什麼區別,推薦使用什麼模式?

    A:推薦使用代理模式,介紹與區別如下:

    • 代理模式:用戶端的請求由代理節點轉寄至資料分區,可享受代理節點帶來的負載平衡、讀寫分離、容錯移轉、代理查詢快取、長串連等特效能力。

    • 直連模式:可通過直連地址繞過代理,直接存取後端的資料分區(類似串連原生Redis叢集)。相比代理模式,直連模式節約了通過代理處理請求的時間,可以在一定程度上提高Redis服務的響應速度。

  • Q:如果後端的某個資料分區出現異常,對資料讀寫有什麼影響?

    A:資料分區均採用主備高可用架構,當主節點發生故障後,系統會自動進行主備切換保證服務高可用。在特別極端情境下某個資料分區出現異常後,對資料的影響及最佳化方案如下。

    情境

    影響與最佳化方案

    圖 2. 多Key命令情境多Key命令情境

    • 影響:

      用戶端通過4個串連發送4個請求,當資料分區2處於異常狀態時,僅有請求1(GET Key1可正常讀取到資料),其他請求會訪問到資料分區2會返回逾時。

    • 最佳化方案:

      • 降低多Key命令(例如MGET)的使用頻率,或降低一次請求中包含的Key的數量,避免因單個資料分區異常導致該請求全部返回失敗。

      • 降低事務類命令的使用頻率或降低事務大小,避免因某個子事務失敗導致整個事務失敗。

    圖 3. 單串連情境單串連情境

    • 影響:

      用戶端通過1個串連分別發送2個請求,當資料分區2處於異常狀態時,請求2(GET Key2)將返回逾時,同時由於請求1(GET Key1)和請求2共用同一串連,導致請求1也無法正常返回。

    • 最佳化方案:

      • 避免或降低對pipeline的使用。

      • 避免使用單串連的用戶端,推薦使用串連池的用戶端,例如通過用戶端程式串連Redis(需設定合理的逾時時間和串連池大小)。