點選藍色“有關SQL”關注我喲
加個“星标”,天天與10000人一起快樂成長

在朋友圈,我經常唠叨,資料中心的兩地三中心架構。
鄭州的期貨交易所,就是采用了這樣的架構,在三次暴雨襲擊後,仍能屹立不倒,從容不迫服務每筆交易。詳細請戳這裡:
鄭州暴雨肆虐,商交所資料中心屹立不倒,它做對了什麼?
兩地三中心
在這裡,先回顧下鄭交所(鄭州期貨交易所)兩地三中心架構:
兩地三中心,以鄭交所為例,兩地便是“鄭州”和“上海”,三中心,便是“鄭東區資料中心”、“華融融達期貨鄭州總部”和“上海資料中心”。
兩地三中心的架構,可以預防本地(鄭州)級别的小機率自然災害,還可以預防全國性的自然災害。能将鄭州和上海同時都端掉的自然災害或人為行為,幾乎不存在。除非是像電影《後天》裡面那種極端事件。
複制是基礎
對于我們這些技術理工宅來說,感興趣的莫過于這裡面的資料複制技術。同城之間采用了什麼複制技術,異地之間又采用了什麼複制模式,究竟如何保持三中心的資料一緻,每個技術人都迫不及待的想知道。
我沒有鄭交所的工作經曆,并不知道具體内幕。但我知道,資料庫的複制,逃不過這幾類:
- Leader-based replication 主從複制
- MultiLeader-based replication 多主複制
- Leaderless-based replication 無主複制
最常用的一類,當屬主從複制。
電影,硬核複制玩家
小時候,村裡經常會來放露天電影。播映小組臨時搭個台面,全村人都擠到一塊兒,嗑着瓜子,喝着汽水,早早紮個好地兒,一站連看1-2小時,都不叫腿酸的。
露天電影及其考驗耳朵,在後排的,聽不清;站前排的,又吵的紮耳朵,觀感體驗不是很好。每場電影的人數,雖說沒人管,其實際上是有限制的。
放露天電影,相當于是使用者在讀取資料。
要想讓觀衆看得爽,收更多的電影入場費,怎麼辦呢?把電影多複制幾份,找多塊場地播放。村頭一場,村尾同時辦一場。分流後,不僅總人數多了,觀衆體驗也極強。看了還想看!
是以資料庫想要伺候越來越多的讀請求,也隻要多複制幾份,強子說的“多加三倍伺服器”,确實沒毛病。
電影院越開越大,螢幕越來越多,滿足上千人觀影同時,還不影響效果。這就是多副本的好處。
資料庫也同理。
直播,複制新玩家
但電影拷貝是冷拷貝,在複制完主盤之後,所有的副本都是一緻相同的。是以沒什麼實時的障礙。
拿體育賽事,比如京東奧運直播來說,實時性就要求高了。可以與現場稍有時差,但總不能太大。現場中國隊都拿20枚金牌了,轉播到國内,我們還在慶祝第10枚金牌,發個朋友圈,不是被笑死!
比如,蘇神在跑9.83秒那場,正跟着蘇神一起沖沖沖的時候,突然畫面嘎嘣下,刹那間,仿佛宇宙毀滅,成了一束光。晃過神,才發現視訊雪花了。那不是要急死人,問候下轉播台的祖宗長輩,就不過分了!
資料庫玩複制,俺也一樣
資料庫也一樣,在多副本開啟的同時,總不能讓使用者老看昨天的資料。也不能說,使用者在北京發條微網誌,回到上海就看不見了。
主從複制,要解決兩件事:
- 資料複制到多個資料庫
- 保持多個副本資料的一緻性
這兩件事,帶來的好處是:
- 讀寫分離,提高吞吐
- 切換故障的資料庫
複制,提高吞吐
由上,主從庫之間,采用同步複制,時刻保持一緻。主庫承擔寫,從庫承載讀。原本一台庫要處理讀寫,現在分成2台。響應更快,吞吐量(處理的請求)更高。
但是,這樣設計,一定就很完美麼?顯然不是!全是坑
首先,隻有一個主庫時,主庫日志寫入,更新就算成功。而現在主從架構,還要等從庫完成日志寫入,主庫才能送出日志。
1-5個步驟裡,任何一個失敗,本次送出,就算失敗。增加一個節點,意味着增加一個失敗因子。從庫的反應隻要稍差那麼點時間,主庫就會認為從庫挂了,進而復原操作。
當再增加“從從”庫,雖說能服務的使用者更多,但等待時間也會線性加倍延長,而且大有提高更新失敗的機率。
當每一個從庫都采用同步政策時,僅等待日志确認,都可以殺死一大批請求。而當采用異步時,從從從庫的資料又喪失了與主庫的一緻性。
是以,折中的辦法就是一台從庫采用同步,其他從庫則采用異步複制資料。
複制,一個倒下去,另一個站起來
資料複制的另一個好處,提供高可用。
當主庫下線時,從庫接替主庫,開始服務使用者請求。原下線的主庫,此時變成了從庫。等再次回來時,新主庫把下線時間内的資料更新,補回老主庫去。
這樣,雖說服務速度慢下來,始終還能保持系統可用。
好玩的是,等老主庫上線後,因各種原因,比如網絡抖動暫時中斷,造成新主庫與老主庫之間通信受阻,兩邊都認為自己是主庫,此時便産生了腦裂(split brain),即新舊主庫都接受寫入。
該怎麼辦呢,咳咳,我們下回再講!
--完--
往期精彩:
本号精華合集(三)
外企一道 SQL 面試題,刷掉 494 名候選人
我在面試資料庫工程師候選人時,常問的一些題
零基礎 SQL 資料庫小白,從入門到精通的學習路線與書單