高可用架構(gòu)(下)

上次說到了理論梆掸,接口層面酸钦,數(shù)據(jù)庫(kù)層面如何實(shí)現(xiàn)高可用,但是,這遠(yuǎn)遠(yuǎn)是不夠得拔恰。為了面對(duì)更大的災(zāi)害颜懊,如:洪水风皿,地震等桐款,還要在機(jī)房層面做出高可用魔眨。當(dāng)然,也不僅僅是為了面對(duì)自然災(zāi)害侄刽,也可以是用于備份等州丹,接下來就讓我們從存儲(chǔ)方式墓毒,機(jī)房層面說一下高可用架構(gòu)蚁鳖。

一. 數(shù)據(jù)存儲(chǔ)方式

在我們用集群存儲(chǔ)數(shù)據(jù)的時(shí)候赁炎,有多種的存儲(chǔ)方式,有時(shí)候會(huì)把數(shù)據(jù)存在一個(gè)節(jié)點(diǎn)上讥裤,有時(shí)候又會(huì)把數(shù)據(jù)分散存儲(chǔ)己英。如Redis集群损肛,將數(shù)據(jù)存儲(chǔ)在不同的節(jié)點(diǎn)上。這樣就帶來了兩次數(shù)據(jù)存儲(chǔ)的討論摩泪。分別是:數(shù)據(jù)集中式存儲(chǔ)集群和數(shù)據(jù)分區(qū)存儲(chǔ)集群见坑。

1.1 數(shù)據(jù)集中存儲(chǔ)集群

數(shù)據(jù)集中存儲(chǔ)集群主要是把數(shù)據(jù)集中在一點(diǎn)存儲(chǔ)荞驴,例如:一主多從熊楼、一主多備孙蒙。這樣的場(chǎng)景都是將數(shù)據(jù)通過主節(jié)點(diǎn)悲雳,主節(jié)點(diǎn)做操作合瓢,在同步到從節(jié)點(diǎn)。除了主從顿苇、主備帶來的問題外纪岁,還引入了新的問題则果。由于有多個(gè)從節(jié)點(diǎn)漩氨,導(dǎo)入從節(jié)點(diǎn)數(shù)據(jù)不一致問題叫惊。如何處理霍狰,取舍是我們?cè)谧黾軜?gòu)設(shè)計(jì)的時(shí)候需要考慮到的點(diǎn)饰及。

1.2 數(shù)據(jù)分散存儲(chǔ)集群

數(shù)據(jù)分散集群燎含,就是把數(shù)據(jù)分散存儲(chǔ)在集群的節(jié)點(diǎn)上瘫镇。由于是分散存儲(chǔ)答姥,有些東西是我們不得不考慮的。分別是:均衡性尚粘、容錯(cuò)性郎嫁、可伸縮性祈噪。

1.2.1 均衡性

分散存儲(chǔ)的過程中辑鲤,可能會(huì)導(dǎo)致數(shù)據(jù)集中存儲(chǔ)在一個(gè)節(jié)點(diǎn)月褥,就會(huì)導(dǎo)致一個(gè)節(jié)點(diǎn)的請(qǐng)求量,或者熱量增加舀透,導(dǎo)致出現(xiàn)意外的情況愕够。如:在一致性hash中,我們會(huì)引入虛擬節(jié)點(diǎn)厉斟,防止單節(jié)點(diǎn)數(shù)據(jù)過多强衡。

1.2.2 容錯(cuò)性

由于某些原因漩勤,導(dǎo)致集群中的一個(gè)節(jié)點(diǎn)出現(xiàn)故障越败,集群能否將數(shù)據(jù)合理的分配到集群中的其他節(jié)點(diǎn)究飞。這個(gè)還是和一致性Hash很像,當(dāng)某一個(gè)節(jié)點(diǎn)故障媒峡,將數(shù)據(jù)存入順時(shí)針的下一個(gè)節(jié)點(diǎn)谅阿。

1.2.3 可伸縮性

這個(gè)是當(dāng)集群中的數(shù)據(jù)過多酬滤,或出現(xiàn)熱點(diǎn)數(shù)據(jù)的時(shí)候盯串,添加新節(jié)點(diǎn)的時(shí)候体捏,能否自動(dòng)將部分新數(shù)據(jù)分配到新節(jié)點(diǎn)上。

1.3 不同點(diǎn)

數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)分散兩種集群差別較大译打。因?yàn)樵跀?shù)據(jù)分散儲(chǔ)存中奏司,我們可以看出,每個(gè)節(jié)點(diǎn)都可以對(duì)外提供服務(wù)竿刁,而不同與集中存儲(chǔ)的主節(jié)點(diǎn)食拜。但是负甸,在數(shù)據(jù)分散存儲(chǔ)中,還是需要一個(gè)''主節(jié)點(diǎn)"來分配節(jié)點(diǎn)數(shù)據(jù)打月,但是這里的"主節(jié)點(diǎn)"和集中存儲(chǔ)的主節(jié)點(diǎn)是不一樣的奏篙。

二. 異地多活

上面說的情況一般都是針對(duì)同一個(gè)機(jī)房的情況秘通,在一些極端情況下肺稀,例如:水災(zāi)盹靴、地震瑞妇、機(jī)房失火等辕狰,都會(huì)造成這個(gè)機(jī)房服務(wù)出現(xiàn)故障蔓倍,修復(fù)服務(wù)就需要很長(zhǎng)時(shí)間偶翅。為了面對(duì)這種情況聚谁,縮短服務(wù)修復(fù)時(shí)間滞诺,則就需要選擇異地多活了。

2.1 概念

異地多活炫隶,看名字就能有大概了解阎曹。核心就是異地处嫌,多活锰霜。異地是指癣缅,不同的地方友存,可以是一個(gè)城市,不同的地方直晨,或者是不同的城市勇皇。多活是指:在不同的地方訪問系統(tǒng)焚刺,都能對(duì)外提供服務(wù)敛摘。這些概念有點(diǎn)像我們老俗話說的,不要把雞蛋放在同一個(gè)籃子里乳愉。

2.2 多活架構(gòu)

從目前大多數(shù)場(chǎng)景來看兄淫,多活的架構(gòu)主要有這幾種方式,分別是:同城異地蔓姚、跨城異地捕虽、兩地三中心、跨國(guó)異地坡脐。當(dāng)然泄私,不同的地方也是有區(qū)別的。我們來好好分析一下。

2.2.1 同城異地

同城異地一般說的是挖滤,在同一個(gè)城市中伶唯,在不同的區(qū)域部署多個(gè)機(jī)房钧椰。比如:在深圳瓶埋,我司就有兩個(gè)機(jī)房晕粪,一個(gè)是在福田,一個(gè)是在西麗,兩個(gè)機(jī)房通過專線畏梆,兩個(gè)機(jī)房可以很快通信。

同城機(jī)房一般都可以應(yīng)對(duì)大多數(shù)的災(zāi)難情況了捏卓,通過同城高速專線,數(shù)據(jù)同步幾乎可以做到實(shí)時(shí),可以用來面對(duì)大多數(shù)的場(chǎng)景。而且由于數(shù)據(jù)延遲低,就降低了開發(fā)的難度和成本問題(如:很快襟铭,就不需要考慮數(shù)據(jù)不同步帶來的延遲問題)入撒。

2.2.2 跨城異地

跨城異地說的是:在不同的城市建設(shè)機(jī)房判哥。一般情況下挺身,這兩個(gè)城市就相對(duì)較遠(yuǎn)贱傀。比如:一個(gè)在北京,一個(gè)在廣州。不會(huì)是一個(gè)在深圳,一個(gè)在廣州。由于距離較遠(yuǎn),不會(huì)在這么原理距離開通專線,那么就帶來了上述說過的問題--網(wǎng)絡(luò)延時(shí)帶來的數(shù)據(jù)不同步問題。 這是一個(gè)很致命的問題。舉個(gè)例子:某商場(chǎng)搞秒殺,共50個(gè)商品,A城市秒殺完50個(gè),數(shù)據(jù)由于網(wǎng)絡(luò)延遲沒有同步或晚幾秒同步給B城市门驾,B城市也被秒殺50個(gè),這樣最后就會(huì)導(dǎo)致超賣的情況,如果還有C,D,E城市呢沮趣?或者在金融場(chǎng)景呢缸匪?。 所以一般在數(shù)據(jù)強(qiáng)一致場(chǎng)景纺涤,不會(huì)用上跨城異地。或者說劫乱,用上強(qiáng)一致算法刁笙,保證一個(gè)節(jié)點(diǎn)寫入嫡纠,其他節(jié)點(diǎn)復(fù)制窃祝。當(dāng)然,這樣也就脫離了多活的范圍了锐锣。

2.2.3 兩地三中心

說完上面兩個(gè)蘸泻,我們就可以說說什么是兩地三中心了渗勘,兩地三中心的核心思想還是同城異地。只是在同城異地的基礎(chǔ)上崩侠,在異城多了一個(gè)數(shù)據(jù)備份句灌。這樣我們就可以完美的避免一個(gè)城市特大水災(zāi),地震等極端情況帶來的問題啦。也解決了數(shù)據(jù)延遲的問題芥吟。

2.2.4 跨國(guó)異地

跨國(guó)異地多活有點(diǎn)不一樣种樱,跨國(guó)異地多活主要是針對(duì)不同的區(qū)域的用戶提供服務(wù)佩抹。例如:把一份機(jī)房部署在海外,然后只針對(duì)海外的用戶巷疼,在國(guó)內(nèi)的用戶是無法用國(guó)內(nèi)的賬號(hào)登錄海外的。同理班套,國(guó)內(nèi)的用戶也是≌喊危跨國(guó)會(huì)導(dǎo)致數(shù)據(jù)延遲更加大宝剖,所以一般不適合做有修改的業(yè)務(wù)。最好是只讀業(yè)務(wù)计呈,并且對(duì)數(shù)據(jù)實(shí)時(shí)性不是特別敏感的。如:發(fā)布一個(gè)新聞品洛,在國(guó)內(nèi)12點(diǎn)發(fā)布砾肺,在英國(guó)是12.05变汪, 這樣其實(shí)是不影響游用戶的閱讀的番官。

2.3. 設(shè)計(jì)技巧

在我們?cè)O(shè)計(jì)多活的時(shí)候,有很多時(shí)候有一個(gè)誤區(qū)山孔,就是要保證所有數(shù)據(jù)蓉媳,業(yè)務(wù)都要多活。這樣其實(shí)是浪費(fèi)資源的,耗費(fèi)了大量的人力瓮钥、財(cái)力,然而帶來的效益并不好,所以我們?cè)谠O(shè)計(jì)多活的時(shí)候碉熄,需要有以下幾個(gè)思維桨武。

2.3.1 保證核心業(yè)務(wù)多活

我們沒有必要保證所有的業(yè)務(wù)都采取多活,只需要保證核心業(yè)務(wù)即可锈津。如:下單玻募,在A中心故障后,切換到B中心一姿,可以下單七咧,保證核心業(yè)務(wù)的運(yùn)行。對(duì)于用戶注冊(cè)叮叹,我們就沒必要多活艾栋,因?yàn)榭赡軒頂?shù)據(jù)沖突問題,而且收益不大蛉顽。

2.3.2 保證核心數(shù)據(jù)最終一致性

異地多活的核心就是冗余數(shù)據(jù)蝗砾,通過多個(gè)中心來對(duì)外提供服務(wù)。在多中心的情況下携冤,還會(huì)有網(wǎng)絡(luò)帶來的延時(shí)問題悼粮。所以我們?cè)谕綍r(shí),需要注意一下幾點(diǎn)來減少時(shí)延

  1. 盡可能搭建高速線路曾棕,提高數(shù)據(jù)同步效率(提高速度)

  2. 只做核心業(yè)務(wù)核心數(shù)據(jù)的多活(減少數(shù)據(jù)量)

完成以上方法后扣猫,我們?cè)谕ㄟ^最終一致性保證數(shù)據(jù)一致即可。

2.3.3 采用多種手段同步數(shù)據(jù)

多活在同步數(shù)據(jù)的時(shí)候翘地,我們需要采取多種手段來保證渠道的通行申尤。單一的通道可靠性不能保證,所以我們就需要多種方式衙耕。主要方式有幾種昧穿,分別是:1. 原生自帶,如Mysql的binlog橙喘,2. 消息隊(duì)列时鸵,我們可以把消息丟到消息隊(duì)列,通過消息隊(duì)列的特性保證數(shù)據(jù)不丟失厅瞎,并且可以可靠同步饰潜。3. 多次讀取,訪問A服務(wù)沒有磁奖,可以嘗試B服務(wù)囊拜,C服務(wù),在到A服務(wù)比搭。

2.3.4 保證大部分用戶多活

在系統(tǒng)中冠跷,可以適當(dāng)放棄一點(diǎn)點(diǎn)用戶保證絕大多數(shù)用戶的多活南誊。這樣對(duì)小部分用戶體驗(yàn)不好,但是可以保證絕大多數(shù)用戶可用蜜托。針對(duì)小部分用戶我們可以通過其他方式補(bǔ)償抄囚。如:通過公告告知,事后對(duì)用戶進(jìn)行補(bǔ)償橄务,如:發(fā)5元現(xiàn)金券幔托。在根據(jù)一些具體情況,優(yōu)化客戶體驗(yàn)蜂挪。

三 總結(jié)

自此重挑,我們學(xué)習(xí)完了在高可用設(shè)計(jì)方面的知識(shí),包含理論棠涮,接口谬哀,數(shù)據(jù)庫(kù),機(jī)房等方面严肪∈芳澹總結(jié)下來,就是:通過多種手段驳糯,保證多數(shù)用戶篇梭,核心系統(tǒng)可用。如果達(dá)到這個(gè)目的酝枢,我們就基本算成功了恬偷。剩下的就需要通過人力,財(cái)力隧枫,物力解決喉磁。

如果有什么問題,歡迎討論官脓,指正,謝謝涝焙!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卑笨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仑撞,更是在濱河造成了極大的恐慌赤兴,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隧哮,死亡現(xiàn)場(chǎng)離奇詭異桶良,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沮翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門陨帆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事疲牵〕卸” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵纲爸,是天一觀的道長(zhǎng)亥鸠。 經(jīng)常有香客問我,道長(zhǎng)识啦,這世上最難降的妖魔是什么负蚊? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮颓哮,結(jié)果婚禮上家妆,老公的妹妹穿的比我還像新娘。我一直安慰自己题翻,他們只是感情好揩徊,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嵌赠,像睡著了一般塑荒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姜挺,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天齿税,我揣著相機(jī)與錄音,去河邊找鬼炊豪。 笑死凌箕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的词渤。 我是一名探鬼主播牵舱,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缺虐!你這毒婦竟也來了芜壁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤高氮,失蹤者是張志新(化名)和其女友劉穎慧妄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剪芍,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塞淹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罪裹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饱普。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡运挫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出费彼,到底是詐尸還是另有隱情滑臊,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布箍铲,位于F島的核電站雇卷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏颠猴。R本人自食惡果不足惜关划,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翘瓮。 院中可真熱鬧贮折,春花似錦、人聲如沸资盅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呵扛。三九已至每庆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間今穿,已是汗流浹背缤灵。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓝晒,地道東北人腮出。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芝薇,于是被迫代替她去往敵國(guó)和親胚嘲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容