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

1. 背景

在學(xué)習(xí)完各種高性能發(fā)實(shí)現(xiàn)方案后,就需要對(duì)三大復(fù)雜度一直的高可用進(jìn)行開刀了慢显,在高可用方面主要有哪些東西是我們需要考慮的呢持际?接下來將從三個(gè)方面逐一分析。

2. 理論

在設(shè)計(jì)高可用架構(gòu)理論方面殴蹄,我們主要有2個(gè)方向選擇究抓,分別是CAP理論和BASE理論,那什么是CAP袭灯,什么是BASE呢刺下? 這個(gè)還是要好好分析一下。

2.1 CAP

  • C(Consistence):一致性
  • A(Availability):可用性
  • P(Partition Tolerance):分區(qū)容錯(cuò)性

一致性:指的是從所有節(jié)點(diǎn)獲取的數(shù)據(jù)都是最新的(最新稽荧,那就是每個(gè)節(jié)點(diǎn)數(shù)據(jù)都是最新的數(shù)據(jù)橘茉,相同的)。

可用性:非故障節(jié)點(diǎn)在合理時(shí)間內(nèi)返回合理響應(yīng)。這個(gè)主要是為了排除一些非正常響應(yīng)畅卓,如:超時(shí)擅腰,或者錯(cuò)誤的結(jié)果

分區(qū)容錯(cuò)性:在發(fā)生網(wǎng)絡(luò)異常時(shí),系統(tǒng)能夠繼續(xù)保持任務(wù)運(yùn)行

CAP理論有三個(gè)翁潘,但是在分布式系統(tǒng)中來說趁冈,只能選擇其中兩個(gè)。多系統(tǒng)網(wǎng)絡(luò)中拜马,我們無法保證網(wǎng)絡(luò)100%正常渗勘,所以必須要選擇P,保持系統(tǒng)繼續(xù)運(yùn)行一膨,然后才是在C呀邢、A之間做取舍。如果選擇CP豹绪, 那就是需要保證數(shù)據(jù)的一致价淌,當(dāng)無法保證數(shù)據(jù)一致時(shí),就要對(duì)異常節(jié)點(diǎn)剔除瞒津,就無法保證系統(tǒng)可用性蝉衣。當(dāng)選擇AP,當(dāng)網(wǎng)絡(luò)波動(dòng)時(shí)巷蚪,數(shù)據(jù)無法同步病毡,無法保持最新數(shù)據(jù),但系統(tǒng)可以訪問屁柏。

通過上面的描述啦膜,有沒有發(fā)現(xiàn)一個(gè)問題?這些理論都是針對(duì)數(shù)據(jù)來說的淌喻,當(dāng)CP時(shí)僧家,數(shù)據(jù)保證了一致,當(dāng)AP時(shí)裸删,數(shù)據(jù)不一致八拱。我們有一個(gè)誤區(qū),認(rèn)為系統(tǒng)設(shè)計(jì)一定要選AP涯塔,或者CP肌稻。其實(shí)這樣是不正確的。因?yàn)樵谕粋€(gè)系統(tǒng)中匕荸,可能部分?jǐn)?shù)據(jù)需要保證AP爹谭,有一部分?jǐn)?shù)據(jù)需要保證CP,例如:關(guān)于金額的數(shù)據(jù)則需要保證AP榛搔,但是用戶相關(guān)昵稱旦棉、簡介可以使用AP齿风。

所以药薯,在系統(tǒng)正常運(yùn)行的時(shí)候绑洛,是不存在選AP,還是CP的童本,我們應(yīng)該同時(shí)關(guān)注CA真屯。CAP的理論的前提是發(fā)生了網(wǎng)絡(luò)分區(qū),但是穷娱,當(dāng)網(wǎng)絡(luò)正常時(shí)绑蔫,我們沒有必要放棄A或C,我們應(yīng)該同時(shí)滿足泵额。

2.2 BASE

  • B(Basically Available):基本可用
  • S( Soft State):軟狀態(tài)
  • E(Eventual Consistency):最終一致性

基本可用:分布式系統(tǒng)發(fā)生故障的時(shí)候配深,保證系統(tǒng)能夠基本運(yùn)行,允許損失部分可用性

軟狀態(tài):過渡期嫁盲,數(shù)據(jù)處于某中非最終狀態(tài)篓叶。可以理解為:數(shù)據(jù)不一致

最終一致性:系統(tǒng)中的數(shù)據(jù)經(jīng)過一段時(shí)間后羞秤,最終達(dá)到一致的狀態(tài)(非實(shí)時(shí)一致)

BASE理論是對(duì)CAP理論的一種補(bǔ)充缸托,在CAP中,C大多數(shù)指的情況是強(qiáng)一致性瘾蛋,在同一時(shí)刻俐镐,從所有節(jié)點(diǎn)獲取的數(shù)據(jù)是相同的。而在BASE中哺哼,則通過軟狀態(tài)佩抹,和最終一致性來保證系統(tǒng)可用,而非在同一刻數(shù)據(jù)相同取董,而是通過一段時(shí)間后棍苹,所有節(jié)點(diǎn)數(shù)據(jù)相同〖自幔或者說廊勃,當(dāng)系統(tǒng)發(fā)生分區(qū)故障時(shí),數(shù)據(jù)不一致也可以使用经窖,而最后通過通過坡垫,達(dá)到所有節(jié)點(diǎn)數(shù)據(jù)一致。

3. 接口層面

當(dāng)在理論方面選擇完可用性后画侣,我們就需要在接口層面來考慮系統(tǒng)的可用性了冰悠。不然,一個(gè)接口調(diào)用配乱,就搞掛系統(tǒng)溉卓,這樣可就丟人啦皮迟。

通常,我們從接口層面考慮可用性主要分為4個(gè)方面桑寨,相信大家也是耳熟能詳伏尼。分別是:熔斷,限流尉尾,降級(jí)爆阶,排隊(duì)。接下來就從這4個(gè)方面介紹沙咏。

3.1 熔斷

熔斷辨图,這就和我們生活中的保險(xiǎn)絲很像,當(dāng)功率過大的時(shí)候肢藐,保險(xiǎn)絲就會(huì)斷掉故河,防止功率過大,引起火災(zāi)吆豹。我們?cè)谶M(jìn)行接口設(shè)計(jì)時(shí)鱼的,也需要考慮熔斷,當(dāng)系統(tǒng)接口調(diào)用失敗瞻讽,達(dá)到一定失敗率或壓力時(shí)鸳吸,應(yīng)該熔斷系統(tǒng)。這里的熔斷速勇,不是指掛掉接口晌砾,而是快速響應(yīng)。我們通過自定義響應(yīng)內(nèi)容烦磁,快速返回結(jié)果养匈,響應(yīng)客戶端。熔斷的核心理念也就是快速響應(yīng)都伪,保證系統(tǒng)可用呕乎。

3.2 限流

限流。這個(gè)就像我們周五進(jìn)地鐵陨晶,由于人多猬仁,防止地鐵里的人員發(fā)生踩踏,擁擠事件先誉,就在地鐵口弄幾個(gè)架子湿刽,讓人慢慢排隊(duì),減小入口流量褐耳,保證地鐵里的人流能夠正常運(yùn)行诈闺。限流和地鐵這個(gè)沒有大的區(qū)別,防止系統(tǒng)應(yīng)對(duì)過大的流量铃芦,壓垮系統(tǒng)雅镊,則通過閘口襟雷,控制進(jìn)入系統(tǒng)的流量,這樣可以使得系統(tǒng)在一個(gè)合理的流量內(nèi)運(yùn)行仁烹,保證了系統(tǒng)的正常運(yùn)行耸弄。我們通過這樣可以看得出來:限流是通過外部方式,來解決系統(tǒng)可用性晃危。

3.3 降級(jí)

降級(jí)叙赚,那就是在流量高峰期間,關(guān)閉或減少系統(tǒng)其他功能僚饭,保證系統(tǒng)的核心功能可用。舉個(gè)栗子:那就是淘寶雙11的時(shí)候了胧砰,只能下單鳍鸵,而不能就行查單/或者只能查詢最近幾天的單。為什么呢尉间?因?yàn)橛脩粝聠魏罂赡苓M(jìn)行大量的查單操作偿乖,占用大量系統(tǒng)資源,那就會(huì)影響下單哲嘲,影響業(yè)務(wù)收入贪薪,這樣就得不償失。通過關(guān)閉查單眠副,保證下單可用画切,這樣就保證了核心系統(tǒng)的可用。

3.4 排隊(duì)

排隊(duì)囱怕,顧名思義霍弹,就是排隊(duì)。就像網(wǎng)紅奶茶店娃弓,大家都擠著去買奶茶典格,人員忙不過來,那咋辦台丛? 那大家就排隊(duì)唄耍缴,在這等著,然后等到你的時(shí)候挽霉,在給你響應(yīng)防嗡。在系統(tǒng)中,我們可以通過暫緩用戶請(qǐng)求炼吴,排在隊(duì)列中本鸣,讓用戶等待,限制處理量硅蹦,等處理后在給用戶響應(yīng)荣德。大家應(yīng)該也有所發(fā)現(xiàn)闷煤,排隊(duì)和限流還是蠻像的,限流是直接拒絕涮瞻,而排隊(duì)鲤拿,是讓用戶等待。

4. 存儲(chǔ)

從理論署咽,到接口近顷,那么接下來就是存儲(chǔ)方面的高可用。在互聯(lián)網(wǎng)中宁否,大量的用戶窒升,大量的數(shù)據(jù),帶來的極多挑戰(zhàn)慕匠,那么饱须,我們到底有什么方案可以保證存儲(chǔ)高可用呢?

存儲(chǔ)高可用的本質(zhì)都是通過將數(shù)據(jù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備台谊,通過數(shù)據(jù)冗余的方式來實(shí)現(xiàn)高可用蓉媳。其主要的復(fù)雜性體現(xiàn)在:數(shù)據(jù)同步延時(shí)和數(shù)據(jù)復(fù)制中斷帶來的數(shù)據(jù)不一致問題。所以我們也主要從四個(gè)方面考慮問題锅铅。1酪呻、數(shù)據(jù)如何復(fù)制,2盐须、各個(gè)節(jié)點(diǎn)的職責(zé)玩荠,3、如果應(yīng)對(duì)復(fù)制延遲丰歌,4姨蟋、如果應(yīng)對(duì)數(shù)據(jù)復(fù)制中斷。

4.1 切換方式

常見的分布式方案有立帖;主從眼溶,主備,主主

4.1.1 主備

主備晓勇,從字面意思理解堂飞,就是一個(gè)主節(jié)點(diǎn),一個(gè)備機(jī)绑咱。 主節(jié)點(diǎn)用來處理所有的操作绰筛。備機(jī)從主節(jié)點(diǎn)備份數(shù)據(jù),但是不對(duì)外提供服務(wù)描融。這種方式就是簡單铝噩,切換主,備客戶端無感知窿克。缺點(diǎn)就是:備機(jī)僅僅用來備份骏庸,有些浪費(fèi)毛甲。

4.1.2 主從

主從,從字面理解就是一個(gè)主人具被,一個(gè)隨從玻募。隨從和備機(jī)還是有區(qū)別的,隨從需要干活一姿,備份不需要七咧。主從和主備相似,只是從機(jī)需要提供查詢服務(wù)叮叹。這中方式彌補(bǔ)了主備方式備機(jī)浪費(fèi)的缺點(diǎn)艾栋,但也帶來了新的問題,主從復(fù)制延遲問題衬横,客戶端需要根據(jù)情況切換到主機(jī)或備機(jī)裹粤。

4.1.3 主主

主主,顧名思義蜂林,就是兩個(gè)節(jié)點(diǎn)都是主節(jié)點(diǎn)。雙主帶來的好處就是任何一個(gè)節(jié)點(diǎn)都可以進(jìn)行讀寫操作拇泣,但缺點(diǎn)也顯而易見噪叙。雙主節(jié)點(diǎn)需要對(duì)對(duì)方的數(shù)據(jù)進(jìn)行同步,這樣就帶來了同步延時(shí)的問題霉翔,同時(shí)睁蕾,在同步的時(shí)候還會(huì)帶來數(shù)據(jù)重復(fù)的問題。如:在A服務(wù)注冊(cè)了手機(jī)號(hào)為F的用戶债朵,在B服務(wù)業(yè)注冊(cè)了手機(jī)號(hào)為的用戶子眶,在合并時(shí)如何處理的。所以序芦,在未考慮復(fù)雜性的時(shí)候臭杰,主主更適用于數(shù)據(jù)具有可重復(fù)性,可丟失的場(chǎng)景谚中。

4.2 雙機(jī)切換

我們從主備和主從的方案中發(fā)現(xiàn)渴杆,當(dāng)主節(jié)點(diǎn)掛掉后,就無法在對(duì)外提供服務(wù)宪塔。這樣就會(huì)導(dǎo)致服務(wù)宕機(jī)磁奖,那么我們就要采取一個(gè)合適的方案,來進(jìn)行新的主節(jié)點(diǎn)的選取某筐,那么就涉及到了雙擊切換

要設(shè)計(jì)切換方案比搭,我們就要從這幾個(gè)方面考慮:

4.2.1 主備間狀態(tài)判斷

主要包括:1粒梦、狀態(tài)傳遞的渠道姆泻,也就是通過什么樣的方式來傳遞內(nèi)容飒赃。 2逛万、 狀態(tài)檢測(cè)的內(nèi)容:主要是通過什么東西來判斷主節(jié)點(diǎn)是否掛掉,如:斷電戚长,進(jìn)程死亡盗冷?

4.2.2 切換的決策

切換決策主要包含幾個(gè)方面:1、什么時(shí)候切換同廉,2仪糖、如何切換,3迫肖、切換的方式如何锅劝?

4.2.3 數(shù)據(jù)沖突問題

我們?cè)谇袚Q過程中,可能主備/主從之間數(shù)據(jù)還未完全同步蟆湖,如何保證切換后數(shù)據(jù)一致故爵,這個(gè)就有點(diǎn)類似上面的主主方案了。

5. 總結(jié)

以上分享的是高可用架構(gòu)理論隅津,接口诬垂,存儲(chǔ)方面的理論知識(shí),在設(shè)計(jì)高可用的時(shí)候還是有許多要考慮的伦仍。如果有什么問題结窘,歡迎指正,討論

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末充蓝,一起剝皮案震驚了整個(gè)濱河市隧枫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谓苟,老刑警劉巖官脓,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涝焙,居然都是意外死亡卑笨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門纱皆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湾趾,“玉大人,你說我怎么就攤上這事派草〔蟛” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵近迁,是天一觀的道長艺普。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么歧譬? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任岸浑,我火速辦了婚禮,結(jié)果婚禮上瑰步,老公的妹妹穿的比我還像新娘矢洲。我一直安慰自己,他們只是感情好缩焦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布读虏。 她就那樣靜靜地躺著,像睡著了一般袁滥。 火紅的嫁衣襯著肌膚如雪盖桥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天题翻,我揣著相機(jī)與錄音揩徊,去河邊找鬼。 笑死嵌赠,一個(gè)胖子當(dāng)著我的面吹牛塑荒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姜挺,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袜炕,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了初家?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乌助,失蹤者是張志新(化名)和其女友劉穎溜在,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體他托,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掖肋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赏参。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片志笼。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖把篓,靈堂內(nèi)的尸體忽然破棺而出纫溃,到底是詐尸還是另有隱情,我是刑警寧澤韧掩,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布紊浩,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坊谁。R本人自食惡果不足惜费彼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望口芍。 院中可真熱鬧箍铲,春花似錦、人聲如沸鬓椭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膘融。三九已至芙粱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氧映,已是汗流浹背春畔。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岛都,地道東北人律姨。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像臼疫,于是被迫代替她去往敵國和親择份。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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