redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...
歡迎關注頭條號:石杉的架構筆記
周一至周五早八點半!精品技術文章準時送上!!!
目錄
一、前情提示
二、什么是數據一致性?
三、一個數據計算鏈路的梳理
四、數據計算鏈路的bug
五、電商庫存數據的不一致問題
六、大型系統的數據不一致排查有多困難
七、下篇預告
一、前情提示
這篇文章,咱們繼續來聊聊之前的億級流量架構的演進,之前對這個系列的文章已經更新到了可擴展架構的設計,如果有不太清楚的同學,建議一定先回看一下之前的文章:
1、億級流量系統架構之如何支撐百億級數據的存儲與計算
2、億級流量系統架構之如何設計高容錯分布式計算系統
3、億級流量系統架構之如何設計承載百億流量的高性能架構
4、億級流量系統架構之如何設計每秒十萬查詢的高并發架構
5、億級流量系統架構之如何設計全鏈路99.99%高可用架構
6、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(上)?
7、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(中)?
8、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(下)?
老規矩!我們首先看一下這個復雜的系統架構演進到當前階段,整體的架構圖是什么樣子的。
筆者再次友情提醒,如果各位小伙伴對下面這個復雜的架構圖還有什么不理解的地方,一定要先回看之前的文章,因為系列文必須對上下文有清晰的理解和認識。
接著文本我們來聊聊一個核心系統每天承載百億流量的背景下,應該如何來保證復雜系統中的數據一致性?
二、什么是數據一致性?
簡單來說,在一個復雜的系統中一定會對一些數據做出非常復雜的處理,而且可能是多個不同的子系統,甚至是多個服務。
對一個數據按照一定的順序依次做出復雜的業務邏輯的執行,最終可能就會生產出一份寶貴的系統核心數據,落地到存儲里去,比如說在數據庫里存儲。
給大家來一張手繪彩圖,感受下這個現場的氛圍:
從上圖中我們就可以看到,多個系統如何對一個數據依次進行處理,最終拿到一份核心數據,并落地到存儲里去。
那么在這個過程中,就可能會產生所謂的數據不一致的問題。
什么意思呢?給大家舉一個最簡單的例子,我們本來期望數據的變化過程是:數據1 -> 數據2 -> 數據3 -> 數據4。
那么最后落地到數據庫里的應該是數據4,對不對?
結果呢?不知道為啥,經過上面那個復雜的分布式系統中的各個子系統,或者是各個服務的協作處理,最后居然搞出來一個數據87。
搞了半天,搞了一個跟數據4風馬牛不相及的一個東西,最后落地到了數據庫里。
然后啊,這套系統的最終用戶,可能通過前臺的界面看到了一個莫名其妙的數據87。
這就尷尬了,用戶明顯會覺得這個數據有錯誤,就會反饋給公司的客服,此時就會上報bug到工程師團隊,大家就開始吭哧吭哧的找問題。
上面說的這個場景,其實就是一種數據不一致的問題,也是我們接下來幾篇文章要討論的一個問題。
實際上,在任何一個大規模分布式系統里,都會存在類似的問題。無論是電商,O2O,還是本文舉例的數據平臺系統,都一樣。
三、一個數據計算鏈路的梳理
那么既然已經明確了問題,接下來就來看看在數據平臺這個系統里,到底是什么問題可能會導致一個最終落地存儲的數據的異常呢?
要明白這個問題,咱們先回過頭看看,在之前提過的數據平臺這個項目里,一個最終落地的數據的計算鏈路是什么樣的?
大家看看下面的圖:
如上圖所示,其實從最簡單的一個角度來說,這個數據計算的鏈路大概也就是上面的那個樣子。
看起來很簡單,對吧?
但是哪怕是這個系統里,數據計算鏈路,也絕對不是這么簡單的。
如果大家看過之前的系列文章的話,就應該知道,這個系統為了支撐高并發、高可用、高性能等場景,引入了大量的復雜機制。
所以實際上一條原始數據進入到系統,一直到最后落地到存儲里,計算鏈路還會包含下面的東西:
上面只不過是隨便列舉了幾條。然而哪怕只是上述幾條,都可以把一個數據的計算鏈路變得復雜很多倍了。
四、數據計算鏈路的bug
既然大家已經明白了,在一個復雜系統里,一份核心數據可能是經過一個極為復雜的計算鏈路的處理,中間百轉千回,任何可能的情況都會發生。
那么就可以理解在大型分布式系統中,數據不一致的問題是如何產生的了。
其實原因非常的簡單,說白了,就是數據計算鏈路的bug。
也就是說,在數據的計算過程中,某個子系統出現了bug,并沒有按照我們預期的行為去處理,導致最終產出去的數據變得錯誤了。
那么,為什么會在數據計算鏈路中出現這種bug呢?
原因很簡單,如果大家曾經參與過上百人協作的大型分布式系統,或者是主導過上百人協作開發的大型分布式系統的架構設計,應該對核心數據的異常和錯誤非常熟悉,并且會感到頭疼不已。
大規模分布式系統中,動輒上百人協作開發。很可能某個子系統或者是某個服務的負責人,對數據的處理邏輯理解偏差了,代碼里寫了一個隱藏的bug。
而這個bug,輕易不會觸發,并且在QA測試環境還沒測出來,結果帶著一顆定時炸彈,系統上線。
最后在線上某種特殊的場景下,觸發了這個bug,導致最終的數據出現問題。
五、電商庫存數據的不一致問題
接觸過電商的同學,可能此時腦子里就可以快速的想到一個類似的經典場景:電商中的庫存。
在大規模的電商系統中,庫存數據絕對是核心中的核心。但是實際上,在一個分布式系統中,很多系統可能都會采用一定的邏輯來更新庫存。
這就可能導致跟上述說的場景類似的問題,就是多個系統都更新庫存,但就是某個系統對庫存的更新出現了bug。
這可能是因為那個系統的負責人沒理解到底應該如何更新庫存,也或者是他更新的時候采用的邏輯,沒有考慮到一些特殊情況。
這樣導致的結果就是,系統里的庫存和倉庫中實際的庫存,死活對不上。但就是不知道到底哪個環節出了問題,導致庫存數據出錯。
這個,其實就是一個典型的數據不一致的問題。
六、大型系統的數據不一致排查有多困難
當面對一個大型分布式系統時,如果你之前壓根兒沒考慮過數據不一致的問題,那么我敢打賭,當你負責的系統在線上被客服反饋有某個核心數據不一致的時候,你絕對會一臉蒙圈。
因為一個核心數據的處理,少則涉及幾個系統的協作處理,多則涉及十個以上的系統的協作處理。
如果你沒有留存任何日志、或者僅僅就是有部分日志,然后基本就只能所有人干瞪眼,大家大眼對小眼,都盯著自己的代碼看。
大家根據一個數據最后的錯誤結果,比如數據87。10多個人對著自己的代碼,反復的思考,冥思苦想。
然后每個人都在大腦中瘋狂的模擬自己代碼的運行,但是就是想不明白,為什么本來應該是數據4的,結果出來了一個數據87?
所以現實問題就是這樣,這種數據不一致的問題,大概有以下幾個痛點:
七、下篇預告
所以針對本文描述的大型分布式系統數據不一致的問題,下篇文章我們將給出:在百億流量的場景下,一套復雜系統我們是如何構建整套核心數據保證方案的。
敬請期待:
- 億級流量系統架構之如何保證百億流量下的數據一致性(中)?
- 億級流量系統架構之如何保證百億流量下的數據一致性(下)?
end
如有收獲,請幫忙轉發,您的鼓勵是作者最大的動力,謝謝!
一大波微服務、分布式、高并發、高可用的原創系列文章正在路上,
歡迎關注頭條號:石杉的架構筆記
周一至周五早八點半!精品技術文章準時送上!!!
十余年BAT架構經驗傾囊相授
推薦閱讀
1、拜托!面試請不要再問我Spring Cloud底層原理!
2、微服務注冊中心如何承載大型系統的千萬級訪問?
3、「性能優化之道」每秒上萬并發下的Spring Cloud參數優化實戰
4、「“剁手黨”狂歡的背后」微服務架構如何保障99.99%的高可用?
5、兄弟,用大白話告訴你小白都能看懂的Hadoop架構原理
6、大規模集群下Hadoop NameNode如何承載每秒上千次的高并發訪問
7、「性能優化的秘密」Hadoop如何將TB級大文件的上傳性能優化上百倍
8、拜托,面試請不要再問我TCC分布式事務的實現原理!
9、最終一致性分布式事務如何保障實際生產中99.99%高可用?
10、拜托,面試請不要再問我Redis分布式鎖的實現原理
11、Hadoop底層算法如何優雅的將大規模集群性能提升10倍以上?
12、億級流量系統架構之如何支撐百億級數據的存儲與計算
13、億級流量系統架構之如何設計高容錯分布式計算系統
14、億級流量系統架構之如何設計承載百億流量的高性能架構
15、億級流量系統架構之如何設計每秒十萬查詢的高并發架構
16、億級流量系統架構之如何設計全鏈路99.99%高可用架構
17、七張圖徹底講清楚ZooKeeper分布式鎖的實現原理
18、大白話聊聊Java并發面試問題之volatile到底是什么?
19、大白話聊聊Java并發面試問題之Java 8如何優化CAS性能?
20、大白話聊聊Java并發面試問題之談談你對AQS的理解?
21、大白話聊聊Java并發面試問題之微服務注冊中心的讀寫鎖優化
22、互聯網公司的面試官是如何360°無死角考察候選人的?(上篇)
23、互聯網公司面試官是如何360°無死角考察候選人的?(下篇)
24、「Java進階面試系列之一」你們系統架構中為何要引入消息中間件?
25、「Java進階面試系列之二」系統架構引入消息中間件有什么缺點
26、「行走的Offer收割機」一位朋友斬獲BAT技術專家Offer的面試經歷
27、「Java進階面試系列之三」消息中間件在你們項目里是如何落地的?
28、扎心!線上服務宕機時,如何保證數據100%不丟失?
29、 一次JVM FullGC的背后,竟隱藏著驚心動魄的線上生產事故!
30、「高并發優化實踐」10倍請求壓力來襲,你的系統會被擊垮嗎?
31、消息中間件集群崩潰,如何保證百萬生產數據不丟失?
32、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(上)?
33、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(中)?
34、億級流量系統架構之如何在上萬并發場景下設計可擴展架構(下)?
35、億級流量架構第二彈:你的系統真的無懈可擊嗎?
總結
以上是生活随笔為你收集整理的redis 亿级查询速度_亿级流量系统架构之如何保证百亿流量下的数据一致性(上)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word公式编辑器快捷键_科研利器|编辑
- 下一篇: 玫瑰行者电视剧芒果TV可以看吗