雲數據庫Redis版無論主從版仍是集羣規格,replica做爲備庫不對外提供服務,只有在發生HA的時候,replica提高爲master後才承擔讀寫流量。這種架構讀寫請求都在master上完成,一致性較高,但性能受到master數量的限制。常常有用戶數據較少,但由於流量或者併發過高而不得不升級到更大的集羣規格。redis
爲知足讀多寫少的業務場景,最大化節約用戶成本,雲數據庫Redis版推出了讀寫分離規格,爲用戶提供透明、高可用、高性能、高靈活的讀寫分離服務。數據庫
Redis集羣模式有redis-proxy、master、replica、HA等幾個角色。在讀寫分離實例中,新增read-only replica角色來承擔讀流量,replica做爲熱備不提供服務,架構上保持對現有集羣規格的兼容性。redis-proxy按權重將讀寫請求轉發到master或者某個read-only replica上;HA負責監控DB節點的健康狀態,異常時發起主從切換或重搭read-only replica,並更新路由。 後端
通常來講,根據master和read-only replica的數據同步方式,能夠分爲兩種架構:星型複製和鏈式複製。markdown
星型複製網絡
星型複製就是將全部的read-only replica直接和master保持同步,每一個read-only replica之間相互獨立,任何一個節點異常不影響到其餘節點,同時由於複製鏈比較短,read-only replica上的複製延遲比較小。 架構
Redis是單進程單線程模型,主從之間的數據複製也在主線程中處理,read-only replica數量越多,數據同步對master的CPU消耗就越嚴重,集羣的寫入性能會隨着read-only replica的增長而下降。此外,星型架構會讓master的出口帶寬隨着read-only replica的增長而成倍增加。Master上較高的CPU和網絡負載會抵消掉星型複製延遲較低的優點,所以,星型複製架構會帶來比較嚴重的擴展問題,整個集羣的性能會受限於master。併發
鏈式複製負載均衡
鏈式複製將全部的read-only replica組織成一個複製鏈,以下圖所示,master只須要將數據同步給replica和複製鏈上的第一個read-only replica。異步
鏈式複製解決了星型複製的擴展問題,理論上能夠無限增長read-only replica的數量,隨着節點的增長整個集羣的性能也能夠基本上呈線性增加。性能
鏈式複製的架構下,複製鏈越長,複製鏈末端的read-only replica和master之間的同步延遲就越大,考慮到讀寫分離主要使用在對一致性要求不高的場景下,這個缺點通常能夠接受。可是若是複製鏈中的某個節點異常,會致使下游的全部節點數據都會大幅滯後。更加嚴重的是這可能帶來全量同步,而且全量同步將一直傳遞到複製鏈的末端,這會對服務帶來必定的影響。爲了解決這個問題,讀寫分離的Redis都使用阿里雲優化後的binlog複製版本,最大程度的下降全量同步的機率。
結合上述的討論和比較,Redis讀寫分離選擇鏈式複製的架構。
透明兼容
讀寫分離和普通集羣規格同樣,都使用了redis-proxy作請求轉發,多分片令使用存在必定的限制,但從主從升級單分片讀寫分離,或者從集羣升級到多分片的讀寫分離集羣能夠作到徹底兼容。
用戶和redis-proxy創建鏈接,redis-proxy會識別出客戶端鏈接發送過來的請求是讀仍是寫,而後按照權重做負載均衡,將請求轉發到後端不一樣的DB節點中,寫請求轉發給master,讀操做轉發給read-only replica(master默認也提供讀,能夠經過權重控制)。
用戶只須要購買讀寫分離規格的實例,直接使用任何客戶端便可直接使用,業務不用作任何修改就能夠開始享受讀寫分離服務帶來的巨大性能提高,接入成本幾乎爲0。
高可用
高可用模塊(HA)監控全部DB節點的健康狀態,爲整個實例的可用性保駕護航。master宕機時自動切換到新主。若是某個read-only replica宕機,HA也能及時感知,而後重搭一個新的read-only replica,下線宕機節點。
除HA以外,redis-proxy也能實時感知每一個read-only replica的狀態。在某個read-only replica異常期間,redis-proxy會自動下降這個節點的權重,若是發現某個read-only replica連續失敗超過必定次數之後,會暫時屏蔽異常節點,直到異常消失之後纔會恢復其正常權重。
redis-proxy和HA一塊兒作到儘可能減小業務對後端異常的感知,提升服務可用性。
高性能
對於讀多寫少的業務場景,直接使用集羣版本每每不是最合適的方案,如今讀寫分離提供了更多的選擇,業務能夠根據場景選擇最適合的規格,充分利用每個read-only replica的資源。
目前單shard對外售賣1 master + 1/3/5 read-only replica多種規格(若是有更大的需求能夠提工單反饋),提供60萬QPS和192 MB/s的服務能力,在徹底兼容全部命令的狀況下突破單機的資源限制。後續將去掉規格限制,讓用戶根據業務流量隨時自由的增長或減小read-only replica數量。
規格 | QPS | 帶寬 |
---|---|---|
1 master | 8-10萬讀寫 | 10-48 MB |
1 master + 1 read-only replica | 10萬寫 + 10萬讀 | 20-64 MB |
1 master + 3 read-only replica | 10萬寫 + 30萬讀 | 40-128 MB |
1 master + 5 read-only replica | 10萬寫 + 50萬讀 | 60-192 MB |