<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>

          binlog真的是銀彈嗎?有些時(shí)候也讓人頭疼

          共 2022字,需瀏覽 5分鐘

           ·

          2021-12-19 06:52

          點(diǎn)擊上方藍(lán)字“設(shè)為星標(biāo)”


          大家好,我是架構(gòu)擺渡人。這是實(shí)踐經(jīng)驗(yàn)系列的第三篇文章,這個(gè)系列會(huì)給大家分享很多在實(shí)際工作中有用的經(jīng)驗(yàn),如果有收獲,還請(qǐng)分享給更多的朋友。

          ?

          binlog 用于記錄用戶對(duì)數(shù)據(jù)庫(kù)操作的SQL語(yǔ)句信息,同時(shí)主從復(fù)制也是依靠binlog來(lái)實(shí)現(xiàn)的,由此可見(jiàn)binlog的重要性。


          ?

          在業(yè)務(wù)中的使用場(chǎng)景




          binlog除了數(shù)據(jù)庫(kù)本身使用它實(shí)現(xiàn)一些功能,在業(yè)務(wù)中我們也會(huì)經(jīng)常依靠binlog實(shí)現(xiàn)各種需求。

          ?




          數(shù)據(jù)異構(gòu)


          基于binlog的數(shù)據(jù)異構(gòu)是用的最多的一個(gè)場(chǎng)景,可以通過(guò)監(jiān)聽(tīng)binlog將數(shù)據(jù)異構(gòu)成其他維度,方便查詢。

          ?

          比如多表聚合成一張寬表,搜索相關(guān)的異構(gòu)到ES中,訂單可以異構(gòu)成買(mǎi)家視角,賣(mài)家視角等等諸多場(chǎng)景。

          ?




          緩存失效


          對(duì)于高并發(fā)的互聯(lián)網(wǎng)業(yè)務(wù),數(shù)據(jù)庫(kù)往往是最后的瓶頸,用緩存來(lái)提高性能是最常見(jiàn)的一種優(yōu)化手段。也就是在訪問(wèn)數(shù)據(jù)庫(kù)之后會(huì)將數(shù)據(jù)放入一份在緩存中,下次請(qǐng)求的時(shí)候直接從緩存取來(lái)提高響應(yīng)速度和減少對(duì)數(shù)據(jù)庫(kù)的壓力。

          ?

          一提到緩存,大家立馬能想到的問(wèn)題就是緩存和數(shù)據(jù)的一致性要怎么保障?這種還是得結(jié)合業(yè)務(wù)場(chǎng)景來(lái)講,本身能用緩存的業(yè)務(wù)基本上還是能夠接受短暫的不一致問(wèn)題,也就是并非強(qiáng)一致性。

          ?

          最常見(jiàn)的方式就是在操作數(shù)據(jù)后,立馬對(duì)緩存進(jìn)行操作。這樣的方式意味著業(yè)務(wù)代碼中都是這種緩存失效的代碼,當(dāng)然也有封裝成注解的形式,讓使用更加便捷。

          ?

          binlog在這個(gè)場(chǎng)景中也能產(chǎn)生重大作用,可以基于binlog的變更來(lái)淘汰對(duì)應(yīng)的緩存,而且可以和業(yè)務(wù)代碼解耦,為我們解決緩存數(shù)據(jù)一致性問(wèn)題多提供了一種方案。

          ?

          ?




          數(shù)據(jù)分發(fā)


          數(shù)據(jù)分發(fā)也是一種比較常見(jiàn)的業(yè)務(wù)場(chǎng)景,當(dāng)很多下游依賴上有的數(shù)據(jù),常見(jiàn)的實(shí)現(xiàn)方式有下面幾種:

          ?
          • 代碼中通過(guò)消息進(jìn)行數(shù)據(jù)分發(fā)
          ?

          如果自己在代碼中通過(guò)消息將數(shù)據(jù)分發(fā)出去,就會(huì)比較被動(dòng)。因?yàn)橐坏┯凶侄巫兏邢掠蜗胍渌臄?shù)據(jù),你都得需要改動(dòng)代碼來(lái)滿足下游的需求,基本上不可取。

          ?

          ?

          ?

          • 多搭建幾個(gè)從節(jié)點(diǎn),給下游直接使用從節(jié)點(diǎn)

          ?

          這種方式如果是在一個(gè)部門(mén)內(nèi)還好點(diǎn),如果是跨部門(mén)的,本來(lái)權(quán)限就管的比較嚴(yán),不可能讓其他部門(mén)直接連接你們的數(shù)據(jù)庫(kù),而且增加從節(jié)點(diǎn)的成本也是你們自己的,所以這種方式基本上也不會(huì)用。

          ?

          ?

          • 讓下游消費(fèi)binlog自己構(gòu)建數(shù)據(jù)

          ?

          下游需要使用數(shù)據(jù),那么就用下游自己的數(shù)據(jù)庫(kù),用什么庫(kù)都跟你沒(méi)關(guān)系。我們只需要通過(guò)中間件將binlog發(fā)布出去,哪個(gè)業(yè)務(wù)方需要數(shù)據(jù)就自己消費(fèi),自己存儲(chǔ)即可。

          ?

          ?

          這種方式我們既不用改業(yè)務(wù)代碼,也不用申請(qǐng)數(shù)據(jù)庫(kù)增加我們的成本,是一種完全解耦的方式,但是這種方式也是有弊端的,請(qǐng)繼續(xù)往下看。


          ?

          給業(yè)務(wù)帶來(lái)的風(fēng)險(xiǎn)點(diǎn)



          ?




          字段變更


          如果上游的字段發(fā)生了變更,比如把name換成了username,對(duì)消費(fèi)binlog的下游來(lái)說(shuō),這個(gè)字段就有可能影響了現(xiàn)有的邏輯,導(dǎo)致取值錯(cuò)誤。不過(guò)在實(shí)際工作中這種場(chǎng)景還是比較少的,一般都不會(huì)去隨意變更字段名稱,也不能說(shuō)完全沒(méi)有變更的情況。

          ?




          數(shù)據(jù)變更


          字段變更帶來(lái)的影響相對(duì)來(lái)說(shuō)較小,最讓人頭痛的就是數(shù)據(jù)的變更了。特別是數(shù)據(jù)量特別大的表進(jìn)行數(shù)據(jù)變更的時(shí)候,比如你的表有10億條數(shù)據(jù),當(dāng)然是分庫(kù)分表的。然后有個(gè)字段需要重新清洗下數(shù)據(jù),也就是update某個(gè)字段。看上去對(duì)業(yè)務(wù)沒(méi)有任何影響,其實(shí)對(duì)下游是有影響的。

          ?

          如果數(shù)據(jù)清洗過(guò)快,binlog就會(huì)很多,下游消費(fèi)不過(guò)來(lái)就會(huì)出現(xiàn)消息堆積,影響正常的業(yè)務(wù)邏輯,因?yàn)橄掠味家蕾嚵薭inlog做業(yè)務(wù)。

          ?

          所以在這種場(chǎng)景下,大家有數(shù)據(jù)清洗的需求,一定要考慮到對(duì)下游的影響,本來(lái)你洗數(shù)據(jù)可能一天就洗完了,但是下游扛不住,可能需要10天才能慢慢洗完。但是感覺(jué)不合理啊,我自己的表變更還要問(wèn)問(wèn)別人,我能洗這么快么?



          解決方案



          對(duì)于字段名稱盡量不做變更,非得變更的話得提前和下游溝通好,讓下游消費(fèi)2個(gè)字段,如果哪個(gè)有就消費(fèi)哪個(gè),這樣你改名稱之后就不會(huì)影響下游的邏輯。

          ?

          對(duì)于數(shù)據(jù)清洗之類(lèi)的導(dǎo)致大量binlog場(chǎng)景,最簡(jiǎn)單的就是控制清洗速度,始終保持下游能夠接受的程序去清洗,缺點(diǎn)就是時(shí)間會(huì)比較長(zhǎng)。

          ?

          另一種方案就是按需訂閱,比如有的場(chǎng)景你清洗的這個(gè)字段下游壓根就不消費(fèi),這個(gè)時(shí)候可以在消息投遞處進(jìn)行處理,按需進(jìn)行消息的投遞,比如對(duì)消息打Tag, 下游根據(jù)Tag進(jìn)行消息過(guò)濾。

          或者下游消費(fèi)時(shí)直接過(guò)濾,這樣速度也是很快的。

          ?

          如果你的改動(dòng)下游真的要感知,并且速度還不能慢,要趕時(shí)間,那么只能讓下游擴(kuò)容了。

          ?

          大家好,我是從古代穿越過(guò)來(lái)的美男子:架構(gòu)擺渡人。我將把我的武功秘籍全部傳授與你們,覺(jué)得有用請(qǐng)分享給身邊的朋友。來(lái)個(gè)三連吧,感謝各位!另外我還在B站錄制《真實(shí)訂單業(yè)務(wù),億級(jí)數(shù)據(jù)帶你實(shí)戰(zhàn)分庫(kù)分表》的實(shí)戰(zhàn)課程,記得去學(xué)習(xí)哦!


          點(diǎn)擊閱讀原文直達(dá)主頁(yè)

          瀏覽 43
          點(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>
                  青娱乐av免费观看 | 激情乱伦无码 | 黄色欧美视频 | 欧美日韩国产成人一区 | 欧美v精品 |