<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 做讀寫(xiě)分離有什么問(wèn)題?

          共 2688字,需瀏覽 6分鐘

           ·

          2021-07-14 10:08


          前幾天,一個(gè)讀者去面試,面試官就問(wèn)了他關(guān)于Redis讀寫(xiě)分離是怎么做的?本來(lái)腦子里也有不少知識(shí)要講,不過(guò)猛的被面試官一問(wèn)給當(dāng)場(chǎng)干懵逼了........。


          這不,昨天晚上他在微信上問(wèn)我,所以,今天給大家分享一下這方面的知識(shí)點(diǎn)。

          背景

          Redis 不管主從版還是集群規(guī)格,replica作為備庫(kù)不對(duì)外提供服務(wù),只有在發(fā)生HA的時(shí)候,replica提升為master后才承擔(dān)讀寫(xiě)流量。這種架構(gòu)讀寫(xiě)請(qǐng)求都在master上完成,一致性較高,但性能受到master數(shù)量的限制。經(jīng)常有用戶數(shù)據(jù)較少,但因?yàn)榱髁炕蛘卟l(fā)太高而不得不升級(jí)到更大的集群規(guī)格。

          為滿足讀多寫(xiě)少的業(yè)務(wù)場(chǎng)景,最大化節(jié)約用戶成本,云數(shù)據(jù)庫(kù)Redis版推出了讀寫(xiě)分離規(guī)格,為用戶提供透明、高可用、高性能、高靈活的讀寫(xiě)分離服務(wù)

          架構(gòu)

          Redis集群模式有redis-proxy、master、replica、HA等幾個(gè)角色。在讀寫(xiě)分離實(shí)例中,新增read-only replica角色來(lái)承擔(dān)讀流量,replica作為熱備不提供服務(wù),架構(gòu)上保持對(duì)現(xiàn)有集群規(guī)格的兼容性。redis-proxy按權(quán)重將讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到master或者某個(gè)read-only replica上;HA負(fù)責(zé)監(jiān)控DB節(jié)點(diǎn)的健康狀態(tài),異常時(shí)發(fā)起主從切換或重搭read-only replica,并更新路由。

          一般來(lái)說(shuō),根據(jù)master和read-only replica的數(shù)據(jù)同步方式,可以分為兩種架構(gòu):星型復(fù)制和鏈?zhǔn)綇?fù)制。

          星型復(fù)制

          星型復(fù)制就是將所有的read-only replica直接和master保持同步,每個(gè)read-only replica之間相互獨(dú)立,任何一個(gè)節(jié)點(diǎn)異常不影響到其他節(jié)點(diǎn),同時(shí)因?yàn)閺?fù)制鏈比較短,read-only replica上的復(fù)制延遲比較小。

          Redis是單進(jìn)程單線程模型,主從之間的數(shù)據(jù)復(fù)制也在主線程中處理,read-only replica數(shù)量越多,數(shù)據(jù)同步對(duì)master的CPU消耗就越嚴(yán)重,集群的寫(xiě)入性能會(huì)隨著read-only replica的增加而降低。此外,星型架構(gòu)會(huì)讓master的出口帶寬隨著read-only replica的增加而成倍增長(zhǎng)。Master上較高的CPU和網(wǎng)絡(luò)負(fù)載會(huì)抵消掉星型復(fù)制延遲較低的優(yōu)勢(shì),因此,星型復(fù)制架構(gòu)會(huì)帶來(lái)比較嚴(yán)重的擴(kuò)展問(wèn)題,整個(gè)集群的性能會(huì)受限于master。

          鏈?zhǔn)綇?fù)制

          鏈?zhǔn)綇?fù)制將所有的read-only replica組織成一個(gè)復(fù)制鏈,如下圖所示,master只需要將數(shù)據(jù)同步給replica和復(fù)制鏈上的第一個(gè)read-only replica。

          鏈?zhǔn)綇?fù)制解決了星型復(fù)制的擴(kuò)展問(wèn)題,理論上可以無(wú)限增加read-only replica的數(shù)量,隨著節(jié)點(diǎn)的增加整個(gè)集群的性能也可以基本上呈線性增長(zhǎng)。

          鏈?zhǔn)綇?fù)制的架構(gòu)下,復(fù)制鏈越長(zhǎng),復(fù)制鏈末端的read-only replica和master之間的同步延遲就越大,考慮到讀寫(xiě)分離主要使用在對(duì)一致性要求不高的場(chǎng)景下,這個(gè)缺點(diǎn)一般可以接受。但是如果復(fù)制鏈中的某個(gè)節(jié)點(diǎn)異常,會(huì)導(dǎo)致下游的所有節(jié)點(diǎn)數(shù)據(jù)都會(huì)大幅滯后。更加嚴(yán)重的是這可能帶來(lái)全量同步,并且全量同步將一直傳遞到復(fù)制鏈的末端,這會(huì)對(duì)服務(wù)帶來(lái)一定的影響。為了解決這個(gè)問(wèn)題,讀寫(xiě)分離的Redis都使用阿里云優(yōu)化后的binlog復(fù)制版本,最大程度的降低全量同步的概率。

          更多關(guān)于Redis技術(shù)棧的學(xué)習(xí),可以關(guān)注民工哥技術(shù)之路公眾號(hào),在 Redis專欄 中查看相關(guān)的技術(shù)文章、面試題及答案,非常詳細(xì),持續(xù)更新中。

          Redis讀寫(xiě)分離優(yōu)勢(shì)

          透明兼容

          讀寫(xiě)分離和普通集群規(guī)格一樣,都使用了redis-proxy做請(qǐng)求轉(zhuǎn)發(fā),多分片令使用存在一定的限制,但從主從升級(jí)單分片讀寫(xiě)分離,或者從集群升級(jí)到多分片的讀寫(xiě)分離集群可以做到完全兼容。

          用戶和redis-proxy建立連接,redis-proxy會(huì)識(shí)別出客戶端連接發(fā)送過(guò)來(lái)的請(qǐng)求是讀還是寫(xiě),然后按照權(quán)重作負(fù)載均衡,將請(qǐng)求轉(zhuǎn)發(fā)到后端不同的DB節(jié)點(diǎn)中,寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給master,讀操作轉(zhuǎn)發(fā)給read-only replica(master默認(rèn)也提供讀,可以通過(guò)權(quán)重控制)。

          用戶只需要購(gòu)買(mǎi)讀寫(xiě)分離規(guī)格的實(shí)例,直接使用任何客戶端即可直接使用,業(yè)務(wù)不用做任何修改就可以開(kāi)始享受讀寫(xiě)分離服務(wù)帶來(lái)的巨大性能提升,接入成本幾乎為0。

          高可用

          高可用模塊(HA)監(jiān)控所有DB節(jié)點(diǎn)的健康狀態(tài),為整個(gè)實(shí)例的可用性保駕護(hù)航。master宕機(jī)時(shí)自動(dòng)切換到新主。如果某個(gè)read-only replica宕機(jī),HA也能及時(shí)感知,然后重搭一個(gè)新的read-only replica,下線宕機(jī)節(jié)點(diǎn)。

          除HA之外,redis-proxy也能實(shí)時(shí)感知每個(gè)read-only replica的狀態(tài)。在某個(gè)read-only replica異常期間,redis-proxy會(huì)自動(dòng)降低這個(gè)節(jié)點(diǎn)的權(quán)重,如果發(fā)現(xiàn)某個(gè)read-only replica連續(xù)失敗超過(guò)一定次數(shù)以后,會(huì)暫時(shí)屏蔽異常節(jié)點(diǎn),直到異常消失以后才會(huì)恢復(fù)其正常權(quán)重。

          redis-proxy和HA一起做到盡量減少業(yè)務(wù)對(duì)后端異常的感知,提高服務(wù)可用性。可以參考:Redis低成本高可用方案

          高性能

          對(duì)于讀多寫(xiě)少的業(yè)務(wù)場(chǎng)景,直接使用集群版本往往不是最合適的方案,現(xiàn)在讀寫(xiě)分離提供了更多的選擇,業(yè)務(wù)可以根據(jù)場(chǎng)景選擇最適合的規(guī)格,充分利用每一個(gè)read-only replica的資源。

          目前單shard對(duì)外售賣(mài)1 master + 1/3/5 read-only replica多種規(guī)格(如果有更大的需求可以提工單反饋),提供60萬(wàn)QPS和192 MB/s的服務(wù)能力,在完全兼容所有命令的情況下突破單機(jī)的資源限制。后續(xù)將去掉規(guī)格限制,讓用戶根據(jù)業(yè)務(wù)流量隨時(shí)自由的增加或減少read-only replica數(shù)量。

          Redis主從異步復(fù)制,從read-only replica中可能讀到舊的數(shù)據(jù),使用讀寫(xiě)分離需要業(yè)務(wù)可以容忍一定程度的數(shù)據(jù)不一致,后續(xù)將會(huì)給客戶更靈活的配置和更大的自由,例如配置可以容忍的最大延遲時(shí)間。

          作者:小熱愛(ài) 
          來(lái)源:juejin.cn/post/6955355686108659726



          35 張圖帶你 MySQL 調(diào)優(yōu)


          顛覆認(rèn)知——Redis會(huì)遇到的15個(gè)「坑」,你踩過(guò)幾個(gè)?


          瀏覽 50
          點(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>
                  熟妇一区 | 伊人网综合 | 91麻豆精品国产91久久久 | 国产精品怡红院 | 性爱av在线观看 亚洲AV中文无码 亚洲精品人妻在线 |