1. 程式人生 > >阿里雲資料庫全新功能Redis讀寫分離,全維度技術解析

阿里雲資料庫全新功能Redis讀寫分離,全維度技術解析

背景

目前的阿里雲redis不管主從版還是叢集規格,slave作為備庫不對外提供服務,只有在發生HA,slave提升為master後才承擔讀寫。這種架構讀寫請求都在master上完成,一致性較高,但效能受到master數量的限制。經常有使用者資料較少,但因為流量或者併發太高而不得不升級到更大的叢集規格。

為滿足讀多寫少的業務場景,最大化節約使用者成本,阿里雲redis推出了讀寫分離規格,為使用者提供透明、高可用、高效能、高靈活的讀寫分離服務。

架構

目前的redis叢集模式有redis-proxy, master,slave, HA等幾個角色,在讀寫分離中,新增readonly slave角色承擔讀流量,slave作為熱備不提供服務,架構上保持對現有叢集規格的相容性。redis-proxy按權重將讀寫請求轉發到master或者某個readonly slave上;HA負責監控DB節點的健康狀態,異常時發起主從切換或重搭readonly slave,並更新路由。

一般來說,根據master和readonly slave的資料同步方式,可以有兩種架構:星型複製,鏈式複製。

星型複製

星型複製就是將所有的readonly slave直接和master保持同步,每個readonly slave之間相互獨立,任何一個節點異常不影響到其他節點,同時因為複製鏈比較短,readonly slave上的複製延遲比較小。

redis是單程序單執行緒模型,主從之間的資料複製也在主執行緒中處理,readonly slave數量越多,資料同步對master的cpu消耗就越嚴重,叢集的寫入效能會隨著readonly slave的增加而降低。此外,星型架構會讓master的出口頻寬隨著readonly slave的增加而成倍增長。master上較高的CPU和網路負載又會抵消掉星型複製延遲較低的優勢。可以看出,星型複製架構會帶來比較嚴重的擴充套件問題,整個叢集的效能會受限於master。

鏈式複製

鏈式複製將所有的readonly slave組織成一個複製鏈,如下圖所示,master只需要將資料同步給slave和複製鏈上的第一個readonly slave。

鏈式複製解決了星型複製的擴充套件問題,理論上可以無限增加readonly slave的數量,隨著節點的增加整個叢集的效能也可以基本上呈線性增長。

鏈式複製的架構下,複製鏈越長,複製鏈末端的readonly slave和master之間的同步延遲就越大,考慮到讀寫分離主要使用在對一致性要求不高的場景下,這個缺點一般可以接受。但是如果複製鏈中的某個節點異常,會導致下游的所有節點資料都會大幅滯後,更加嚴重的是這可能帶來全量同步,並且全量同步將一直傳遞到複製鏈的末端,這會對服務帶來一定的影響,為了解決這個問題,讀寫分離的redis都使用阿里雲優化後的binlog複製版本,最大程度的降低全量同步的概率。

結合上述的討論和比較,redis的讀寫分離選擇鏈式複製的架構。

透明、相容

讀寫分離和普通叢集規格一樣,都使用了redis-proxy做請求轉發,多shard時部分命令使用存在一定的限制,但從主從升級單分片讀寫分離,或者從叢集升級到多分片的讀寫分離叢集可以做到完全相容。

在叢集模式下,有部分命令使用必須限制所有key在同一個slot中。

使用者和redis-proxy建立連線,redis-proxy會識別出客戶端連線傳送過來的請求是讀還是寫,然後按照權重作負載均衡,將請求轉發到後端不同的DB節點中,寫請求轉發給master,讀操作轉發給readonly slave(master預設也提供讀,可以通過權重控制)。

使用者只需要購買讀寫分離規格的例項,直接使用任何客戶端即可直接使用,業務不用做任何修改就可以開始享受讀寫分離服務帶來的巨大效能提升,接入成本幾乎為0。

高可用

高可用模組(HA)監控所有DB節點的健康狀態,為整個例項的可用性保駕護航,master宕機時自動切換到新主。如果某個readonly slave宕機,HA也能及時感知,然後重搭一個新的readonly slave,下線宕機節點。

除HA之外,redis-proxy也能實時感知每個readonly slave的狀態。在某個readonly slave異常期間,redis-proxy會自動降低這個節點的權重,如果發現某個readonly slave連續失敗超過一定次數以後,會暫時遮蔽異常節點,直到異常消失以後才會恢復其正常權重。

redis-proxy和HA一起做到儘量減少業務對後端異常的感知,提高服務可用性。

效能

對於讀多寫少的業務場景,直接使用叢集版本往往不是最合適的方案,現在讀寫分離提供了更多的選擇,業務可以根據場景選擇最適合的規格,充分利用每一個readonly slave的資源。

目前單shard對外售賣1master + 1/3/5 readonly slave多種規格(如果有更大的需求可以提工單反饋給我們),提供60W qps 和 192MByte/s的服務能力,在完全相容所有命令的情況下突破單機的資源限制。後續將去掉規格限制,讓使用者根據業務流量隨時自由的增加或減少readonly slave數量。

其他

redis主從非同步複製,從readonly slave中可能讀到舊的資料,使用讀寫分離需要業務可以容忍一定程度的資料不一致,後續將會給客戶更靈活的配置和更大的自由,比如配置可以容忍的最大延遲時間。

相關推薦

阿里資料庫全新功能Redis分離維度技術解析

背景 目前的阿里雲redis不管主從版還是叢集規格,slave作為備庫不對外提供服務,只有在發生HA,slave提升為master後才承擔讀寫。這種架構讀寫請求都在master上完成,一致性較高,但效能受到master數量的限制。經常有使用者資料較少,但因為流量或者併

阿里資料庫Redis分離維度技術解析

背景 目前的阿里雲redis不管主從版還是叢集規格,slave作為備庫不對外提供服務,只有在發生HA,slave提升為master後才承擔讀寫。這種架構讀寫請求都在master上完成,一致性較高,但效能受到master數量的限制。經常有使用者資料較少,但因為流量或者併發太高而不得不升級到更大的叢

資料庫也可以做分離為什麼要使用Redis擔任

資料庫也可以做讀寫分離,為什麼要使用Redis擔任讀呢,直接使用讀寫分離不就可以了嗎? 資料庫的讀寫分離的確可以解決問題,但是像Redis這種非關係型資料庫比較明顯的優點就是資料處理效率高,讀寫分離和Redis的效率相比較來說,個人感覺還是使用Redis可靠。 Redis擔任讀的問題

redis分離主從復制

req con word redis讀寫分離 分離 bsp onf 服務 master master配置:(主服務 redis.conf)   requirepass masterpassword (配置密碼)   port 6379 (配置端口) slave配置   re

阿里Redis分離典型場景:如何輕鬆搭建電商秒殺系統

背景 秒殺活動是絕大部分電商選擇的低價促銷,推廣品牌的方式。不僅可以給平臺帶來使用者量,還可以提高平臺知名度。一個好的秒殺系統,可以提高平臺系統的穩定性和公平性,獲得更好的使用者體驗,提升平臺的口碑,從而提升秒殺活動的最大價值。 本次主要討論阿里云云資料庫Redis

使用 Spring Aop 與 Mysql 的主從複製功能實現分離

使用 Spring Aop 與 Mysql 的主從複製功能實現讀寫分離。讀寫分離:將應用程式中對資料庫的寫的操作是一個數據庫;對資料庫讀取資料的是另外一個數據庫。而兩個資料庫的資料需要保證一致。 在應用程式中,可以使用 spring aop 對將要執行的業務方法的特徵進行判斷,如:包含 query、find

Redis主從複製分離主從切換

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命名資料夾子maste

redis的主從複製分離主從切換

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命名資料夾子master,slave1,slave2.這裡為在

redis分離機制與哨兵機制

一、在 /etc/redis/ 裡面使用命令 cp redis.conf /redis63791.conf, cp redis.conf /redis63792.conf , cp redis.conf /redis63793.conf到根目錄準備好 vim

四:redis主從分離哨兵模式與spring的整合

本篇主要介紹redis實現主從讀寫分離,採用哨兵模式後如何與spring整合在專案中進行開發 主要依賴的jar包,其他專案中實際依賴的jar包很多這裡就不一一列舉了: jar包依賴 <dependency> <grou

redis的主從複製分離主從切換 哨兵

當資料量變得龐大的時候,讀寫分離還是很有必要的。同時避免一個redis服務宕機,導致應用宕機的情況,我們啟用sentinel(哨兵)服務,實現主從切換的功能。 redis提供了一個master,多個slave的服務。 準備三個redis服務,依次命

Redis 分離

讀寫分離:對於讀佔比較高的場景,可以通過把一部分流量分攤匯出從節點(salve) 來減輕主節點(master)壓力,同時需要主要只對主節點執行寫操作,如下圖:當使用從節點響應讀請求時,業務端可能會遇到以下問題:複製資料延遲讀到過期資料從節點故障1.資料延遲Redis 複製數的

12.Redis 分離

1.Redis 通過讀寫分離承載 10w+ 的 QPS1、redis不能支撐高併發的瓶頸在哪裡? 單機 2、如果redis要支撐超過10萬+的併發,那應該怎麼做? 單機的redis幾乎不太可能說QPS超過10萬+,除非一些特殊情況,比如你的機器效能特別好,配置特別高,物

Redis分離

一、Redis介紹 Redis是當前比較熱門的NOSQL系統之一,它是一個key-value儲存系統。和Memcache類似,但很大程度補償了Memcache的不足,它支援儲存的value型別相對更多,包括string、list、set、zset和hash。這

Mysql資料庫的主從複製分離搭建過程與原理介紹

首先說明一下在搭建Mysql資料庫的主從複製與讀寫分離的過程中十分容易出錯,所以在搭建的過程中一定要謹慎注重每一步的細節。傳統資料庫中存在的問題1.傳統資料庫設計時,如果伺服器宕機,將不能為使用者提供服務導致整個系統崩潰.2.如果資料庫突然宕機.會導致資料丟失.3.為了防止資

資料庫分離主從同步實現方法

前言 眾所周知,隨著使用者量的增多,資料庫操作往往會成為一個系統的瓶頸所在,而且一般的系統“讀”的壓力遠遠大於“寫”,因此我們可以通過實現資料庫的讀寫分離來提高系統的效能。 實現思路 通過設定主從資料庫實現讀寫分離,主資料庫負責“寫操作”,從資料庫負責

資料庫資料庫負載均衡、分離技術

隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天百萬級甚至上億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。 一、負載均衡技術 負載均衡叢集是由一組相互獨立的計算機系統構成,通過

阿里資料庫再獲學術頂會認可一文覽VLDB最新亮點

一年一度的資料庫領域頂級會議VLDB 2019於當地時間8月26日-8月30日在洛杉磯圓滿落幕。在本屆大會上,阿里雲資料庫產品團隊

內含福利|阿里資料庫再獲學術頂會認可一文覽VLDB最新亮點

一年一度的資料庫領域頂級會議VLDB 2019於當地時間8月26日-8月30日在洛杉磯圓滿落幕。在本屆大會上,阿里雲資料庫產品團隊

EF通用數據層封裝類(支持分離一主多從)

dto cte 功能 pes getc mes 工廠 好的 靈活 淺談orm 記得四年前在學校第一次接觸到 Ling to Sql,那時候瞬間發現不用手寫sql語句是多麽的方便,後面慢慢的接觸了許多orm框架,像 EF,Dapper,Hibernate,ServiceSta