2018-07-15-淺談高可用和設(shè)計(jì)的一些原則(JAVA)

前言

上文說(shuō)到了關(guān)于高并發(fā)的一些原則及設(shè)計(jì)亿胸,這篇主要是講講關(guān)于高可用這一塊侈玄,畢竟都是難兄難弟吟温,誰(shuí)也離不開(kāi)誰(shuí)。

關(guān)于高可用潘悼?
高可用的本質(zhì)就是對(duì)系統(tǒng)的不確定性做預(yù)期準(zhǔn)備爬橡,來(lái)保證服務(wù)的健康,包括經(jīng)常聽(tīng)到的數(shù)據(jù)丟失宾添、容災(zāi)缕陕、故障等除了不可抗因素外疙挺,要達(dá)到所謂衡量標(biāo)準(zhǔn)的N個(gè)9
關(guān)于N個(gè)9的計(jì)算方式蔬崩,例如3個(gè)9:(1-99.9%) * 365 * 24=8.76小時(shí)锦爵,表示該軟件系統(tǒng)在連續(xù)運(yùn)行1年時(shí)間里最多可能的業(yè)務(wù)中斷時(shí)間是8.76小時(shí)。

設(shè)計(jì)高可用原則

  1. 降級(jí)總的來(lái)說(shuō)就是保障數(shù)據(jù)最終一致性沪袭,分散流量,提前預(yù)處理或分散處理侠鳄,前面文章里面說(shuō)到的Hystrix熔斷就是實(shí)現(xiàn)服務(wù)降級(jí)與依賴隔離死宣,對(duì)訪問(wèn)down服務(wù)進(jìn)行隔離丟給降級(jí)后的服務(wù)處理,防止影響到其它服務(wù)博秫。這里說(shuō)的是服務(wù)/業(yè)務(wù)方面的降級(jí)眶掌,當(dāng)然還有很多其它方面。例如:

    降級(jí)

    • 超時(shí)降級(jí):類似推薦或者評(píng)論啊即寒,暫時(shí)不展示或者暫未更新對(duì)整體不會(huì)有太大的影響母赵。
    • 依賴降級(jí):針對(duì)的是一些外部服務(wù)具滴,一些不穩(wěn)定的API。
    • 故障降級(jí):網(wǎng)絡(luò)施绎、RPC服務(wù)等掛掉了贞绳,處理方案可以通過(guò)緩存致稀、默認(rèn)值、兜底數(shù)據(jù)來(lái)保障萎攒。
    • 限流降級(jí):針對(duì)一些超大流量做友好處理矛绘。
  2. 隔離將系統(tǒng)或資源分開(kāi),服務(wù)之間都是有依賴的羊精,很容易因一方面服務(wù)故障導(dǎo)致滾雪球囚玫,隔離能夠保障其它服務(wù)不會(huì)受影響读规,把問(wèn)題控制并降低束亏。

    • 線程隔離:請(qǐng)求分類阵具,不影響其它分類線程池的正常運(yùn)行。
      線程隔離
    • 進(jìn)程隔離:物理分離雀久,部署多個(gè)實(shí)例赖捌,通過(guò)負(fù)載均衡路由轉(zhuǎn)發(fā)矮烹,但是更好的解決方案是將系統(tǒng)拆分為多個(gè)子系統(tǒng)來(lái)實(shí)現(xiàn)隔離。
    • 讀寫隔離:類似Redis就可用通過(guò)主從復(fù)制模式將讀和寫進(jìn)行集群分離卤唉。
    • 動(dòng)靜隔離:前面說(shuō)的高并發(fā)也提到過(guò)仁期,都是相輔相成的,把動(dòng)態(tài)內(nèi)容和靜態(tài)資源分離熬的,靜態(tài)資源可用提前做緩存赊级。
    • 爬蟲(chóng)隔離:主要是為了防止惡意請(qǐng)求流量,會(huì)導(dǎo)致正常流量不可用橡伞,所以一方面可用通過(guò)限流解決晋被,一方面可用將爬蟲(chóng)單獨(dú)路由到單獨(dú)服務(wù)上,或者讓爬蟲(chóng)只能訪問(wèn)到cache挂脑。
    • 熱點(diǎn)隔離:熱點(diǎn)一般都是能夠提前預(yù)知的,比如秒殺谴分、搶購(gòu)镀脂、大降價(jià)等,最好是做成獨(dú)立系統(tǒng)或者服務(wù)進(jìn)行隔離沙兰,也可用通過(guò)緩存和隊(duì)列來(lái)進(jìn)行削峰翘魄。
  3. 限流限流主要是防止流量超出系統(tǒng)峰值,是限制流量穿透到后端薄弱的應(yīng)用層斋射,這個(gè)可用從多個(gè)方面考慮但荤;最終做到有損服務(wù)而不是不服務(wù)。常用的限流算法有令牌桶桑包、漏桶等纺非。

    • 限制并發(fā)/連接/請(qǐng)求數(shù):系統(tǒng)都是由閥值(TPS/QPS)的,超過(guò)了要么非常慢弱左,要么直接被擊垮倒信。
    • 時(shí)間內(nèi)/平滑限流:限制時(shí)間內(nèi)的請(qǐng)求次數(shù),或者每隔多長(zhǎng)時(shí)間處理一個(gè)請(qǐng)求。
    • 接入層限流:接入層也就是請(qǐng)求流量的入口优妙,像Nginx自帶的兩個(gè)模塊就可以,連接數(shù)限流模塊和請(qǐng)求限流模塊卡辰。
  4. 分流引流就是當(dāng)某個(gè)服務(wù)掛了或者某個(gè)地方故障了需要把流量引向其他好的服務(wù)或者備用服務(wù)上去。

    • 負(fù)載均衡與反向代理
  5. 超時(shí)與重試機(jī)制設(shè)置超時(shí)能夠避免慢請(qǐng)求累積導(dǎo)致系統(tǒng)雪崩反砌,需要設(shè)置合理的重試機(jī)制萌朱,并且應(yīng)該和熔斷、快速失敗機(jī)制配合酒贬。

  6. 回滾當(dāng)程序或者數(shù)據(jù)出錯(cuò)翠霍,可用通過(guò)回滾恢復(fù)到最近的一個(gè)正確版本上,比如事務(wù)回滾零如、代碼庫(kù)回滾锄弱、更新版本回滾、數(shù)據(jù)庫(kù)回滾辕翰、靜態(tài)資源回滾等等狈谊。

  7. 壓測(cè)與預(yù)案評(píng)估系統(tǒng)的穩(wěn)定性和性能,提前做好應(yīng)急預(yù)案壁榕。

總結(jié)來(lái)說(shuō)通過(guò)降級(jí)保證服務(wù)有損而不是不可用赎瞎,通過(guò)限流保護(hù)服務(wù)健康避免雪崩,通過(guò)分流與隔離保障服務(wù)正常并能夠?qū)收蠈?shí)行隔離牡辽,設(shè)置合理的超時(shí)與重試機(jī)制避免請(qǐng)求堆積敞临,通過(guò)回滾能夠快速修復(fù)。做到這些往往能實(shí)現(xiàn)系統(tǒng)的高可用奏黑。

附上設(shè)計(jì)例圖:


高可用

結(jié)語(yǔ)

關(guān)于例圖里面的一些詳細(xì)示例以后再慢慢補(bǔ)充吧!
推薦:淺談高并發(fā)和設(shè)計(jì)的一些原則(JAVA)
個(gè)人博客~
簡(jiǎn)書(shū)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馁害,一起剝皮案震驚了整個(gè)濱河市碘菜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌炉媒,老刑警劉巖昆烁,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異静尼,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鸭巴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拦盹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人恬口,你說(shuō)我怎么就攤上這事沼侣。” “怎么了养铸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵钞螟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我筛圆,道長(zhǎng)椿浓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任提岔,我火速辦了婚禮笋敞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赛惩。我一直安慰自己趁餐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布季惯。 她就那樣靜靜地躺著臀突,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藕筋。 梳的紋絲不亂的頭發(fā)上梳码,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音翎承,去河邊找鬼符匾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甸各,可吹牛的內(nèi)容都是我干的焰坪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼儒恋,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了诫尽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剂跟,失蹤者是張志新(化名)和其女友劉穎酣藻,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體送淆,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抖仅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了环凿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片放吩。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渡紫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情莉测,我是刑警寧澤唧喉,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站八孝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏子姜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一哥捕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阎姥,春花似錦记舆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厚满。三九已至碧磅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲸郊,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工四濒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留职辨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓喳资,卻偏偏與公主長(zhǎng)得像腾供,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子台腥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355