日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...

發(fā)布時(shí)間:2025/4/5 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

歡迎關(guān)注頭條號:石杉的架構(gòu)筆記

周一至周五早八點(diǎn)半!精品技術(shù)文章準(zhǔn)時(shí)送上!!!


目錄

一、前情提示

二、什么是數(shù)據(jù)一致性?

三、一個(gè)數(shù)據(jù)計(jì)算鏈路的梳理

四、數(shù)據(jù)計(jì)算鏈路的bug

五、電商庫存數(shù)據(jù)的不一致問題

六、大型系統(tǒng)的數(shù)據(jù)不一致排查有多困難

七、下篇預(yù)告


一、前情提示

這篇文章,咱們繼續(xù)來聊聊之前的億級流量架構(gòu)的演進(jìn),之前對這個(gè)系列的文章已經(jīng)更新到了可擴(kuò)展架構(gòu)的設(shè)計(jì),如果有不太清楚的同學(xué),建議一定先回看一下之前的文章:

1、億級流量系統(tǒng)架構(gòu)之如何支撐百億級數(shù)據(jù)的存儲與計(jì)算

2、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)高容錯分布式計(jì)算系統(tǒng)

3、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)承載百億流量的高性能架構(gòu)

4、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)每秒十萬查詢的高并發(fā)架構(gòu)

5、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)全鏈路99.99%高可用架構(gòu)

6、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(上)?

7、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(中)?

8、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(下)?

老規(guī)矩!我們首先看一下這個(gè)復(fù)雜的系統(tǒng)架構(gòu)演進(jìn)到當(dāng)前階段,整體的架構(gòu)圖是什么樣子的。

筆者再次友情提醒,如果各位小伙伴對下面這個(gè)復(fù)雜的架構(gòu)圖還有什么不理解的地方,一定要先回看之前的文章,因?yàn)橄盗形谋仨殞ι舷挛挠星逦睦斫夂驼J(rèn)識。

接著文本我們來聊聊一個(gè)核心系統(tǒng)每天承載百億流量的背景下,應(yīng)該如何來保證復(fù)雜系統(tǒng)中的數(shù)據(jù)一致性?


二、什么是數(shù)據(jù)一致性?

簡單來說,在一個(gè)復(fù)雜的系統(tǒng)中一定會對一些數(shù)據(jù)做出非常復(fù)雜的處理,而且可能是多個(gè)不同的子系統(tǒng),甚至是多個(gè)服務(wù)。

對一個(gè)數(shù)據(jù)按照一定的順序依次做出復(fù)雜的業(yè)務(wù)邏輯的執(zhí)行,最終可能就會生產(chǎn)出一份寶貴的系統(tǒng)核心數(shù)據(jù),落地到存儲里去,比如說在數(shù)據(jù)庫里存儲。

給大家來一張手繪彩圖,感受下這個(gè)現(xiàn)場的氛圍:

從上圖中我們就可以看到,多個(gè)系統(tǒng)如何對一個(gè)數(shù)據(jù)依次進(jìn)行處理,最終拿到一份核心數(shù)據(jù),并落地到存儲里去。

那么在這個(gè)過程中,就可能會產(chǎn)生所謂的數(shù)據(jù)不一致的問題。

什么意思呢?給大家舉一個(gè)最簡單的例子,我們本來期望數(shù)據(jù)的變化過程是:數(shù)據(jù)1 -> 數(shù)據(jù)2 -> 數(shù)據(jù)3 -> 數(shù)據(jù)4。

那么最后落地到數(shù)據(jù)庫里的應(yīng)該是數(shù)據(jù)4,對不對?

結(jié)果呢?不知道為啥,經(jīng)過上面那個(gè)復(fù)雜的分布式系統(tǒng)中的各個(gè)子系統(tǒng),或者是各個(gè)服務(wù)的協(xié)作處理,最后居然搞出來一個(gè)數(shù)據(jù)87。

搞了半天,搞了一個(gè)跟數(shù)據(jù)4風(fēng)馬牛不相及的一個(gè)東西,最后落地到了數(shù)據(jù)庫里。

然后啊,這套系統(tǒng)的最終用戶,可能通過前臺的界面看到了一個(gè)莫名其妙的數(shù)據(jù)87。

這就尷尬了,用戶明顯會覺得這個(gè)數(shù)據(jù)有錯誤,就會反饋給公司的客服,此時(shí)就會上報(bào)bug到工程師團(tuán)隊(duì),大家就開始吭哧吭哧的找問題。

上面說的這個(gè)場景,其實(shí)就是一種數(shù)據(jù)不一致的問題,也是我們接下來幾篇文章要討論的一個(gè)問題。

實(shí)際上,在任何一個(gè)大規(guī)模分布式系統(tǒng)里,都會存在類似的問題。無論是電商,O2O,還是本文舉例的數(shù)據(jù)平臺系統(tǒng),都一樣。


三、一個(gè)數(shù)據(jù)計(jì)算鏈路的梳理

那么既然已經(jīng)明確了問題,接下來就來看看在數(shù)據(jù)平臺這個(gè)系統(tǒng)里,到底是什么問題可能會導(dǎo)致一個(gè)最終落地存儲的數(shù)據(jù)的異常呢?

要明白這個(gè)問題,咱們先回過頭看看,在之前提過的數(shù)據(jù)平臺這個(gè)項(xiàng)目里,一個(gè)最終落地的數(shù)據(jù)的計(jì)算鏈路是什么樣的?

大家看看下面的圖:

如上圖所示,其實(shí)從最簡單的一個(gè)角度來說,這個(gè)數(shù)據(jù)計(jì)算的鏈路大概也就是上面的那個(gè)樣子。

  • 首先,通過MySQL binlog采集中間件獲取到數(shù)據(jù),轉(zhuǎn)發(fā)給數(shù)據(jù)接入層。
  • 然后,數(shù)據(jù)接入層會把原始數(shù)據(jù)落地到kv存儲里去
  • 接著,是實(shí)時(shí)計(jì)算平臺會從kv存儲里提取數(shù)據(jù)進(jìn)行計(jì)算
  • 最后,會將計(jì)算結(jié)果寫入到數(shù)據(jù)庫+緩存的集群里。數(shù)據(jù)查詢平臺會從數(shù)據(jù)庫 + 緩存的集群里提取數(shù)據(jù),提供用戶來進(jìn)行查詢
  • 看起來很簡單,對吧?

    但是哪怕是這個(gè)系統(tǒng)里,數(shù)據(jù)計(jì)算鏈路,也絕對不是這么簡單的。

    如果大家看過之前的系列文章的話,就應(yīng)該知道,這個(gè)系統(tǒng)為了支撐高并發(fā)、高可用、高性能等場景,引入了大量的復(fù)雜機(jī)制。

    所以實(shí)際上一條原始數(shù)據(jù)進(jìn)入到系統(tǒng),一直到最后落地到存儲里,計(jì)算鏈路還會包含下面的東西:

  • 接入層的限流處理
  • 實(shí)時(shí)計(jì)算層的失敗重試
  • 實(shí)時(shí)計(jì)算層的本地內(nèi)存存儲的降級機(jī)制
  • 數(shù)據(jù)分片的聚合與計(jì)算,單條數(shù)據(jù)在這里可能會進(jìn)入一個(gè)數(shù)據(jù)分片里
  • 數(shù)據(jù)查詢層的多級緩存機(jī)制
  • 上面只不過是隨便列舉了幾條。然而哪怕只是上述幾條,都可以把一個(gè)數(shù)據(jù)的計(jì)算鏈路變得復(fù)雜很多倍了。


    四、數(shù)據(jù)計(jì)算鏈路的bug

    既然大家已經(jīng)明白了,在一個(gè)復(fù)雜系統(tǒng)里,一份核心數(shù)據(jù)可能是經(jīng)過一個(gè)極為復(fù)雜的計(jì)算鏈路的處理,中間百轉(zhuǎn)千回,任何可能的情況都會發(fā)生。

    那么就可以理解在大型分布式系統(tǒng)中,數(shù)據(jù)不一致的問題是如何產(chǎn)生的了。

    其實(shí)原因非常的簡單,說白了,就是數(shù)據(jù)計(jì)算鏈路的bug。

    也就是說,在數(shù)據(jù)的計(jì)算過程中,某個(gè)子系統(tǒng)出現(xiàn)了bug,并沒有按照我們預(yù)期的行為去處理,導(dǎo)致最終產(chǎn)出去的數(shù)據(jù)變得錯誤了。

    那么,為什么會在數(shù)據(jù)計(jì)算鏈路中出現(xiàn)這種bug呢?

    原因很簡單,如果大家曾經(jīng)參與過上百人協(xié)作的大型分布式系統(tǒng),或者是主導(dǎo)過上百人協(xié)作開發(fā)的大型分布式系統(tǒng)的架構(gòu)設(shè)計(jì),應(yīng)該對核心數(shù)據(jù)的異常和錯誤非常熟悉,并且會感到頭疼不已。

    大規(guī)模分布式系統(tǒng)中,動輒上百人協(xié)作開發(fā)。很可能某個(gè)子系統(tǒng)或者是某個(gè)服務(wù)的負(fù)責(zé)人,對數(shù)據(jù)的處理邏輯理解偏差了,代碼里寫了一個(gè)隱藏的bug。

    而這個(gè)bug,輕易不會觸發(fā),并且在QA測試環(huán)境還沒測出來,結(jié)果帶著一顆定時(shí)炸彈,系統(tǒng)上線。

    最后在線上某種特殊的場景下,觸發(fā)了這個(gè)bug,導(dǎo)致最終的數(shù)據(jù)出現(xiàn)問題。


    五、電商庫存數(shù)據(jù)的不一致問題

    接觸過電商的同學(xué),可能此時(shí)腦子里就可以快速的想到一個(gè)類似的經(jīng)典場景:電商中的庫存

    在大規(guī)模的電商系統(tǒng)中,庫存數(shù)據(jù)絕對是核心中的核心。但是實(shí)際上,在一個(gè)分布式系統(tǒng)中,很多系統(tǒng)可能都會采用一定的邏輯來更新庫存。

    這就可能導(dǎo)致跟上述說的場景類似的問題,就是多個(gè)系統(tǒng)都更新庫存,但就是某個(gè)系統(tǒng)對庫存的更新出現(xiàn)了bug。

    這可能是因?yàn)槟莻€(gè)系統(tǒng)的負(fù)責(zé)人沒理解到底應(yīng)該如何更新庫存,也或者是他更新的時(shí)候采用的邏輯,沒有考慮到一些特殊情況。

    這樣導(dǎo)致的結(jié)果就是,系統(tǒng)里的庫存和倉庫中實(shí)際的庫存,死活對不上。但就是不知道到底哪個(gè)環(huán)節(jié)出了問題,導(dǎo)致庫存數(shù)據(jù)出錯。

    這個(gè),其實(shí)就是一個(gè)典型的數(shù)據(jù)不一致的問題。


    六、大型系統(tǒng)的數(shù)據(jù)不一致排查有多困難

    當(dāng)面對一個(gè)大型分布式系統(tǒng)時(shí),如果你之前壓根兒沒考慮過數(shù)據(jù)不一致的問題,那么我敢打賭,當(dāng)你負(fù)責(zé)的系統(tǒng)在線上被客服反饋有某個(gè)核心數(shù)據(jù)不一致的時(shí)候,你絕對會一臉蒙圈。

    因?yàn)橐粋€(gè)核心數(shù)據(jù)的處理,少則涉及幾個(gè)系統(tǒng)的協(xié)作處理,多則涉及十個(gè)以上的系統(tǒng)的協(xié)作處理。

    如果你沒有留存任何日志、或者僅僅就是有部分日志,然后基本就只能所有人干瞪眼,大家大眼對小眼,都盯著自己的代碼看。

    大家根據(jù)一個(gè)數(shù)據(jù)最后的錯誤結(jié)果,比如數(shù)據(jù)87。10多個(gè)人對著自己的代碼,反復(fù)的思考,冥思苦想。

    然后每個(gè)人都在大腦中瘋狂的模擬自己代碼的運(yùn)行,但是就是想不明白,為什么本來應(yīng)該是數(shù)據(jù)4的,結(jié)果出來了一個(gè)數(shù)據(jù)87?

    所以現(xiàn)實(shí)問題就是這樣,這種數(shù)據(jù)不一致的問題,大概有以下幾個(gè)痛點(diǎn)

  • 自己基本無法主動提前感知到數(shù)據(jù)問題,要被動等待用戶發(fā)現(xiàn),反饋給客服,這很可能導(dǎo)致你的產(chǎn)品被大量投訴,老板很生氣,后果很嚴(yán)重。
  • 即使客服告訴了你數(shù)據(jù)錯了,但是你們沒法還原現(xiàn)場,沒有留存證據(jù),基本就是一群工程師對著代碼想象,猜測。
  • 即使你解決了一次數(shù)據(jù)不一致的問題,但是以后也許還有下一次,這樣搞下去,會導(dǎo)致團(tuán)隊(duì)里好幾個(gè)能干的小伙兒時(shí)間都搭在這種破事兒上。

  • 七、下篇預(yù)告

    所以針對本文描述的大型分布式系統(tǒng)數(shù)據(jù)不一致的問題,下篇文章我們將給出:在百億流量的場景下,一套復(fù)雜系統(tǒng)我們是如何構(gòu)建整套核心數(shù)據(jù)保證方案的。

    敬請期待:

    • 億級流量系統(tǒng)架構(gòu)之如何保證百億流量下的數(shù)據(jù)一致性(中)?
    • 億級流量系統(tǒng)架構(gòu)之如何保證百億流量下的數(shù)據(jù)一致性(下)?

    end

    如有收獲,請幫忙轉(zhuǎn)發(fā),您的鼓勵是作者最大的動力,謝謝!

    一大波微服務(wù)、分布式、高并發(fā)、高可用的原創(chuàng)系列文章正在路上,

    歡迎關(guān)注頭條號:石杉的架構(gòu)筆記

    周一至周五早八點(diǎn)半!精品技術(shù)文章準(zhǔn)時(shí)送上!!!

    十余年BAT架構(gòu)經(jīng)驗(yàn)傾囊相授

    推薦閱讀

    1、拜托!面試請不要再問我Spring Cloud底層原理!

    2、微服務(wù)注冊中心如何承載大型系統(tǒng)的千萬級訪問?

    3、「性能優(yōu)化之道」每秒上萬并發(fā)下的Spring Cloud參數(shù)優(yōu)化實(shí)戰(zhàn)

    4、「“剁手黨”狂歡的背后」微服務(wù)架構(gòu)如何保障99.99%的高可用?

    5、兄弟,用大白話告訴你小白都能看懂的Hadoop架構(gòu)原理

    6、大規(guī)模集群下Hadoop NameNode如何承載每秒上千次的高并發(fā)訪問

    7、「性能優(yōu)化的秘密」Hadoop如何將TB級大文件的上傳性能優(yōu)化上百倍

    8、拜托,面試請不要再問我TCC分布式事務(wù)的實(shí)現(xiàn)原理!

    9、最終一致性分布式事務(wù)如何保障實(shí)際生產(chǎn)中99.99%高可用?

    10、拜托,面試請不要再問我Redis分布式鎖的實(shí)現(xiàn)原理

    11、Hadoop底層算法如何優(yōu)雅的將大規(guī)模集群性能提升10倍以上?

    12、億級流量系統(tǒng)架構(gòu)之如何支撐百億級數(shù)據(jù)的存儲與計(jì)算

    13、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)高容錯分布式計(jì)算系統(tǒng)

    14、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)承載百億流量的高性能架構(gòu)

    15、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)每秒十萬查詢的高并發(fā)架構(gòu)

    16、億級流量系統(tǒng)架構(gòu)之如何設(shè)計(jì)全鏈路99.99%高可用架構(gòu)

    17、七張圖徹底講清楚ZooKeeper分布式鎖的實(shí)現(xiàn)原理

    18、大白話聊聊Java并發(fā)面試問題之volatile到底是什么?

    19、大白話聊聊Java并發(fā)面試問題之Java 8如何優(yōu)化CAS性能?

    20、大白話聊聊Java并發(fā)面試問題之談?wù)勀銓QS的理解?

    21、大白話聊聊Java并發(fā)面試問題之微服務(wù)注冊中心的讀寫鎖優(yōu)化

    22、互聯(lián)網(wǎng)公司的面試官是如何360°無死角考察候選人的?(上篇)

    23、互聯(lián)網(wǎng)公司面試官是如何360°無死角考察候選人的?(下篇)

    24、「Java進(jìn)階面試系列之一」你們系統(tǒng)架構(gòu)中為何要引入消息中間件?

    25、「Java進(jìn)階面試系列之二」系統(tǒng)架構(gòu)引入消息中間件有什么缺點(diǎn)

    26、「行走的Offer收割機(jī)」一位朋友斬獲BAT技術(shù)專家Offer的面試經(jīng)歷

    27、「Java進(jìn)階面試系列之三」消息中間件在你們項(xiàng)目里是如何落地的?

    28、扎心!線上服務(wù)宕機(jī)時(shí),如何保證數(shù)據(jù)100%不丟失?

    29、 一次JVM FullGC的背后,竟隱藏著驚心動魄的線上生產(chǎn)事故!

    30、「高并發(fā)優(yōu)化實(shí)踐」10倍請求壓力來襲,你的系統(tǒng)會被擊垮嗎?

    31、消息中間件集群崩潰,如何保證百萬生產(chǎn)數(shù)據(jù)不丟失?

    32、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(上)?

    33、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(中)?

    34、億級流量系統(tǒng)架構(gòu)之如何在上萬并發(fā)場景下設(shè)計(jì)可擴(kuò)展架構(gòu)(下)?

    35、億級流量架構(gòu)第二彈:你的系統(tǒng)真的無懈可擊嗎?

    總結(jié)

    以上是生活随笔為你收集整理的redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。