0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分布式系統(tǒng)中保證高可用性的常用經(jīng)驗(yàn)

華為開發(fā)者社區(qū) ? 來(lái)源:華為云社區(qū) ? 作者:aoho ? 2021-02-05 10:19 ? 次閱讀

系統(tǒng)可用性指標(biāo)

系統(tǒng)可用性指標(biāo)簡(jiǎn)單來(lái)講就是系統(tǒng)可用時(shí)間與總運(yùn)行時(shí)間之比

Availability=MTTF/(MTTF+MTTRMTTF)

MTTF 是 Mean Time To Failure,指平均故障前的時(shí)間,即系統(tǒng)平均能夠正常運(yùn)行多長(zhǎng)時(shí)間才發(fā)生一次故障。系統(tǒng)的可靠性越高,MTTF 越長(zhǎng)(簡(jiǎn)單理解MTTF 就是指系統(tǒng)正常運(yùn)行的時(shí)間)。MTTR 是 Mean Time To Recovery, 平均修復(fù)時(shí)間,即從故障出現(xiàn)到故障修復(fù)的這段時(shí)間,也就是系統(tǒng)不可用的時(shí)間,這段時(shí)間越短越好。系統(tǒng)可用性指標(biāo)可以用通過(guò)下表的999標(biāo)準(zhǔn)衡量,現(xiàn)在普遍要求至少2個(gè)9,最好4個(gè)9以上:

6333bbb2-5f86-11eb-8b86-12bb97331649.png

故障不可避免

高可用性是指系統(tǒng)提供的服務(wù)要始終可用,然而故障不可避免,特別是在分布式系統(tǒng),面對(duì)不可控的用戶流量和機(jī)房環(huán)境,系統(tǒng)故障將會(huì)顯得更加復(fù)雜和不可預(yù)測(cè)。在大規(guī)模的分布式系統(tǒng)中,各個(gè)模塊之間存在錯(cuò)綜復(fù)雜的依賴,任一一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都有可能導(dǎo)致雪崩式、多米諾骨牌式的故障,甚者可以斷言出現(xiàn)故障成了常態(tài)。

63c257e6-5f86-11eb-8b86-12bb97331649.png

如上圖的分布式系統(tǒng)中,用戶請(qǐng)求系統(tǒng)中的某個(gè)服務(wù)接口,請(qǐng)求需要經(jīng)過(guò)長(zhǎng)長(zhǎng)的調(diào)用鏈才能處理返回。我們起碼要保證網(wǎng)絡(luò)連接正常,服務(wù)網(wǎng)關(guān)正常、前端服務(wù)正常、后臺(tái)服務(wù)正常、數(shù)據(jù)庫(kù)正常,請(qǐng)求才能被正常處理,如果調(diào)用鏈中的任一環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)直接反饋到用戶體驗(yàn)上。

系統(tǒng)出現(xiàn)故障的原因多種多樣,主要有以下這些:

網(wǎng)絡(luò)問(wèn)題,網(wǎng)絡(luò)連接故障,網(wǎng)絡(luò)帶寬出現(xiàn)超時(shí)擁塞等;

性能問(wèn)題,數(shù)據(jù)庫(kù)慢查詢、Java Full GC、硬盤 IO 過(guò)大、CPU 過(guò)高、內(nèi)存不足等

安全問(wèn)題,被網(wǎng)絡(luò)攻擊,如 DDoS 等、異??蛻舳苏?qǐng)求,如爬蟲等。

運(yùn)維問(wèn)題,需求變更頻繁不可控,架構(gòu)也在不斷地被調(diào)整,監(jiān)控問(wèn)題等;

管理問(wèn)題,沒(méi)有梳理出關(guān)鍵服務(wù)以及服務(wù)的依賴關(guān)系,運(yùn)行信息沒(méi)有和控制系統(tǒng)同步;

硬件問(wèn)題,硬盤損壞、網(wǎng)卡出問(wèn)題、交換機(jī)出問(wèn)題、機(jī)房掉電、挖掘機(jī)問(wèn)題(前一陣子機(jī)房電纜就經(jīng)常被挖斷)等;

面對(duì)如此多的天災(zāi)人禍,可控和不可控的故障因素,似乎系統(tǒng)的高可用性變成不可能完成的任務(wù),但是在日常開發(fā)運(yùn)維中,我們可以采用一些有效的設(shè)計(jì)、實(shí)現(xiàn)和運(yùn)維手段來(lái)提高系統(tǒng)的高可用性,盡量交付一個(gè)在任何時(shí)候都基本可用的系統(tǒng)。

冗余設(shè)計(jì)

分布式系統(tǒng)中單點(diǎn)故障不可取的,而降低單點(diǎn)故障的不二法門就是冗余設(shè)計(jì),通過(guò)多點(diǎn)部署的方式,并且最好是部署在不同的物理位置,避免單機(jī)房中多點(diǎn)同時(shí)失敗。冗余設(shè)計(jì)不僅可以提高服務(wù)的吞吐量,還可以在出現(xiàn)災(zāi)難時(shí)快速恢復(fù)。目前常見的冗余設(shè)計(jì)有主從設(shè)計(jì)和對(duì)等治理設(shè)計(jì),主從設(shè)計(jì)又可以細(xì)分為一主多從、多主多從。

冗余設(shè)計(jì)中一個(gè)不可避免的問(wèn)題是考慮分布式系統(tǒng)中數(shù)據(jù)的一致性,多個(gè)節(jié)點(diǎn)中冗余的數(shù)據(jù)追求強(qiáng)一致性還是最終一致性。即使節(jié)點(diǎn)提供無(wú)狀態(tài)服務(wù),也需要借助外部服務(wù),比如數(shù)據(jù)庫(kù)、分布式緩存等維護(hù)數(shù)據(jù)狀態(tài)。根據(jù)分布式系統(tǒng)下節(jié)點(diǎn)數(shù)據(jù)同步的基本原理CAP(Consistency (一致性)、Availablity (可用性)、Partition tolerance (分區(qū)容忍性)三個(gè)指標(biāo)不可同時(shí)滿足),數(shù)據(jù)強(qiáng)一致性的系統(tǒng)無(wú)法保證高可用性,最典型的例子就是 Zookeeper。

Zookeeper 采用主從設(shè)計(jì),服務(wù)集群由 Leader、Follower 和 Observer 三種角色組成,它們的職責(zé)如下:

Leader: Zookeeper 集群使用 ZAB 協(xié)議通過(guò) Leader 選舉從集群中選定一個(gè)節(jié)點(diǎn)作為 Leader。Leader 響應(yīng)客戶端的讀寫請(qǐng)求;

Follower:只提供數(shù)據(jù)的讀服務(wù),會(huì)將來(lái)自客戶端的寫請(qǐng)求轉(zhuǎn)發(fā)到 Leader 中。在 Leader 選舉的過(guò)程中參與投票,并與 Leader 維持?jǐn)?shù)據(jù)同步;

Observer:與 Folllower 的功能相同,但不參與 Leader 選舉和寫過(guò)程的“過(guò)半寫成功”策略,單純?yōu)榱颂岣呒旱淖x能力。

在 Zookeeper 集群中,由于只有 Leader 角色的節(jié)點(diǎn)具備寫數(shù)據(jù)的能力,當(dāng) Leader 節(jié)點(diǎn)宕機(jī)時(shí),在新的 Leader 節(jié)點(diǎn)沒(méi)有被選舉出來(lái)之前,集群的寫能力都是不可用的。雖然 Zookeeper 保證了集群數(shù)據(jù)的強(qiáng)一致性,但是放棄了集群的高可用性。 對(duì)等治理設(shè)計(jì)中比較優(yōu)秀的業(yè)內(nèi)體現(xiàn)為 Netiflx 開源的 Eureka 服務(wù)注冊(cè)和發(fā)現(xiàn)組件。Eureka 集群由 Eureka Client 和 Eureka Server 兩種角色組成,其中 Eureka Client 是指服務(wù)實(shí)例使用的服務(wù)注冊(cè)和發(fā)現(xiàn)的客戶端,用于注冊(cè)和查詢服務(wù)實(shí)例信息;Eureka Server 作為服務(wù)注冊(cè)中心,存儲(chǔ)有各服務(wù)的實(shí)例信息列表,采用多實(shí)例的方式部署保證高可用性。 每一個(gè) Eureka Server 都是對(duì)等的數(shù)據(jù)節(jié)點(diǎn),Eureka Client 可以向任意的 Eureka Server 發(fā)起服務(wù)注冊(cè)請(qǐng)求和服務(wù)發(fā)現(xiàn)請(qǐng)求。Eureka Server 之間的數(shù)據(jù)通過(guò)異步 HTTP 的方式同步,由于網(wǎng)絡(luò)的不可靠性,不同 Eureka Server 中的服務(wù)實(shí)例數(shù)據(jù)不能保證在任意時(shí)間節(jié)點(diǎn)都相等,只能保證在 SLA 承諾時(shí)間內(nèi)達(dá)到數(shù)據(jù)的最終一致性。Eureka 點(diǎn)對(duì)點(diǎn)對(duì)等的設(shè)計(jì)保證了服務(wù)注冊(cè)與發(fā)現(xiàn)中心的高可用性,但是犧牲了數(shù)據(jù)的強(qiáng)一致性,降級(jí)為數(shù)據(jù)的最終一致性。

熔斷設(shè)計(jì)

在分布式系統(tǒng)中,一次完整的請(qǐng)求可能需要經(jīng)過(guò)多個(gè)服務(wù)模塊的通力合作,請(qǐng)求在多個(gè)服務(wù)中傳遞,服務(wù)對(duì)服務(wù)的調(diào)用會(huì)產(chǎn)生新的請(qǐng)求,這些請(qǐng)求共同組成了這次請(qǐng)求的調(diào)用鏈。當(dāng)調(diào)用鏈中的某個(gè)環(huán)節(jié),特別是下游服務(wù)不可用時(shí),將會(huì)導(dǎo)致上游服務(wù)調(diào)用方不可用,最終將這種不可用的影響擴(kuò)大到整個(gè)系統(tǒng),導(dǎo)致整個(gè)分布式系統(tǒng)的不可用,引發(fā)服務(wù)雪崩現(xiàn)象。

為了避免這種情況,在下游服務(wù)不可用時(shí),保護(hù)上游服務(wù)的可用性顯得極其重要。對(duì)此,我們可以參考電路系統(tǒng)的斷路器機(jī)制,在必要的時(shí)候壯士斷腕,當(dāng)下游服務(wù)因?yàn)檫^(guò)載或者故障不能用時(shí),及時(shí)“熔斷”服務(wù)調(diào)用方和服務(wù)提供方的調(diào)用鏈,保護(hù)服務(wù)調(diào)用方資源,防止服務(wù)雪崩現(xiàn)象的出現(xiàn)。

斷路器的基本設(shè)計(jì)圖如下,由關(guān)閉、打開、半開三種狀態(tài)組成:

64540902-5f86-11eb-8b86-12bb97331649.png

關(guān)閉(Closed)狀態(tài):

此時(shí)服務(wù)調(diào)用方可以調(diào)用服務(wù)提供方。斷路器中使用失敗計(jì)數(shù)器周期性統(tǒng)計(jì)請(qǐng)求失敗次數(shù)和請(qǐng)求總次數(shù)的比例,如果最近失敗頻率超過(guò)了周期時(shí)間內(nèi)允許失敗的閾值,則切換到打開(Open)狀態(tài)。在關(guān)閉狀態(tài)下,失敗計(jì)數(shù)器基于時(shí)間周期運(yùn)作,會(huì)在每個(gè)統(tǒng)計(jì)周期開始前自動(dòng)重置,防止某次偶然錯(cuò)誤導(dǎo)致斷路器進(jìn)入打開狀態(tài)。

打開(Open)狀態(tài):

在該狀態(tài)下,對(duì)應(yīng)用程序的請(qǐng)求會(huì)立即返回錯(cuò)誤響應(yīng)或者執(zhí)行預(yù)設(shè)的失敗降級(jí)邏輯,而不調(diào)用服務(wù)提供方。斷路器進(jìn)入打開狀態(tài)后會(huì)啟動(dòng)超時(shí)計(jì)時(shí)器,在計(jì)時(shí)器到達(dá)后,斷路器進(jìn)入半開狀態(tài)。

半開(Half-Open)狀態(tài):

允許應(yīng)用程序一定數(shù)量的請(qǐng)求去調(diào)用服務(wù)。如果這些請(qǐng)求對(duì)服務(wù)的調(diào)用成功,那么可以認(rèn)為之前導(dǎo)致調(diào)用失敗的錯(cuò)誤已經(jīng)修正,此時(shí)斷路器切換到關(guān)閉狀態(tài),同時(shí)將失敗計(jì)數(shù)器重置。如果這一定數(shù)量的請(qǐng)求存在調(diào)用失敗的情況,則認(rèn)為導(dǎo)致之前調(diào)用失敗的問(wèn)題仍然存在,斷路器切回到打開狀態(tài),并重置超時(shí)計(jì)時(shí)器來(lái)給系統(tǒng)一定的時(shí)間來(lái)修正錯(cuò)誤。半開狀態(tài)能夠有效防止正在恢復(fù)中的服務(wù)被突然而來(lái)的大量請(qǐng)求再次打垮。

使用斷路器設(shè)計(jì)模式,能夠有效地保護(hù)服務(wù)調(diào)用方的穩(wěn)定性,它能夠避免服務(wù)調(diào)用者頻繁調(diào)用可能失敗的服務(wù)提供者,防止服務(wù)調(diào)用者浪費(fèi) CPU 周期、線程和 IO 資源等,提高服務(wù)整體的可用性。

小結(jié)

本文主要介紹了幾種高可用的設(shè)計(jì),除了上面介紹的方式之外,還有限流設(shè)計(jì)和一些其他設(shè)計(jì)與方案,如降級(jí)設(shè)計(jì)、無(wú)狀態(tài)設(shè)計(jì)、冪等性設(shè)計(jì)、重試設(shè)計(jì)、接口緩存、實(shí)時(shí)監(jiān)控和度量以及常規(guī)劃化維護(hù)。

原文標(biāo)題:進(jìn)來(lái)抄作業(yè)吧!分布式系統(tǒng)中保證高可用性的常用經(jīng)驗(yàn)

文章出處:【微信公眾號(hào):華為開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:進(jìn)來(lái)抄作業(yè)吧!分布式系統(tǒng)中保證高可用性的常用經(jīng)驗(yàn)

文章出處:【微信號(hào):Huawei_Developer,微信公眾號(hào):華為開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    分布式光伏監(jiān)控系統(tǒng)在能源領(lǐng)域中的重要

    在當(dāng)今能源領(lǐng)域,分布式光伏發(fā)電作為一種可持續(xù)的能源解決方案正日益普及。而分布式光伏監(jiān)控系統(tǒng)在其中扮演著至關(guān)重要的角色,為分布式光伏發(fā)電的高效運(yùn)行和管理帶來(lái)了諸多顯著好處。 一、提升發(fā)電
    的頭像 發(fā)表于 12-09 14:39 ?223次閱讀
    <b class='flag-5'>分布式</b>光伏監(jiān)控<b class='flag-5'>系統(tǒng)</b>在能源領(lǐng)域中的重要<b class='flag-5'>性</b>

    分布式光伏發(fā)電系統(tǒng)的應(yīng)用

    分布式光伏發(fā)電系統(tǒng)現(xiàn)狀? Q/GDW1480-2015 《分布式電源接入電網(wǎng)技術(shù)規(guī)定》:分布式電源并網(wǎng)電壓等級(jí)可根據(jù)各并網(wǎng)點(diǎn)裝機(jī)容量進(jìn)行初步選擇,推薦如下: 8kW 及以下可接入220
    的頭像 發(fā)表于 11-21 16:31 ?219次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電<b class='flag-5'>系統(tǒng)</b>的應(yīng)用

    使用bq769x0對(duì)可用性系統(tǒng)進(jìn)行故障監(jiān)控

    電子發(fā)燒友網(wǎng)站提供《使用bq769x0對(duì)可用性系統(tǒng)進(jìn)行故障監(jiān)控.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 10:13 ?0次下載
    使用bq769x0對(duì)<b class='flag-5'>高</b><b class='flag-5'>可用性</b><b class='flag-5'>系統(tǒng)</b>進(jìn)行故障監(jiān)控

    一文講清什么是分布式云化數(shù)據(jù)庫(kù)!

    分布式云化數(shù)據(jù)庫(kù)是一種先進(jìn)的數(shù)據(jù)管理系統(tǒng),它將傳統(tǒng)的數(shù)據(jù)庫(kù)技術(shù)與分布式計(jì)算、云計(jì)算和大數(shù)據(jù)處理技術(shù)相融合。這種數(shù)據(jù)庫(kù)架構(gòu)旨在提供可用性、
    的頭像 發(fā)表于 10-14 10:06 ?225次閱讀

    分布式存儲(chǔ)費(fèi)用嗎?大概需要多少錢

    分布式存儲(chǔ)的費(fèi)用是否,取決于多個(gè)因素,包括存儲(chǔ)容量、性能要求、服務(wù)提供商、計(jì)費(fèi)模式等。因此,無(wú)法簡(jiǎn)單地給出一個(gè)“”或“不高”的答案。通常分布式存儲(chǔ)費(fèi)用通常包含存儲(chǔ)費(fèi)用、網(wǎng)絡(luò)費(fèi)用、增
    的頭像 發(fā)表于 09-24 10:41 ?262次閱讀

    分布式云化數(shù)據(jù)庫(kù)的優(yōu)缺點(diǎn)分析

    分布式云化數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)主要體現(xiàn)在可用性和容錯(cuò)、可擴(kuò)展性、體系結(jié)構(gòu)、數(shù)據(jù)一致、成本、升級(jí)迭代等方面。同時(shí)也存在一些缺點(diǎn),如通信開銷較大、
    的頭像 發(fā)表于 09-14 09:42 ?271次閱讀

    淺析分布式風(fēng)電電池儲(chǔ)能系統(tǒng)可用性

    【摘要】 以內(nèi)蒙古某一實(shí)際分布式風(fēng)電-電池儲(chǔ)能系統(tǒng)的設(shè)計(jì)和運(yùn)行效果為基礎(chǔ),對(duì)影響其可用性的關(guān)鍵因素進(jìn)行了分析。結(jié)果顯示:能量管理系統(tǒng)的設(shè)計(jì)需要考慮功率補(bǔ)償控制以抵消儲(chǔ)能
    的頭像 發(fā)表于 08-20 09:36 ?1000次閱讀
    淺析<b class='flag-5'>分布式</b>風(fēng)電電池儲(chǔ)能<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>可用性</b>

    分布式大屏控制系統(tǒng)對(duì)網(wǎng)絡(luò)環(huán)境的要求

    分布式大屏控制系統(tǒng)對(duì)網(wǎng)絡(luò)環(huán)境的要求較高,主要是因?yàn)樵?b class='flag-5'>系統(tǒng)需要實(shí)時(shí)傳輸大量的視頻信號(hào)數(shù)據(jù),以保證多個(gè)顯示屏幕的同步顯示。以下是幾個(gè)關(guān)鍵的網(wǎng)絡(luò)環(huán)境要求:
    的頭像 發(fā)表于 01-29 14:52 ?579次閱讀

    如何提高分布式大屏控制系統(tǒng)的穩(wěn)定性和可靠

    提高分布式大屏控制系統(tǒng)的穩(wěn)定性和可靠可以從以下幾個(gè)方面入手: 架構(gòu)設(shè)計(jì):在系統(tǒng)架構(gòu)設(shè)計(jì)階段,應(yīng)采用
    的頭像 發(fā)表于 01-29 14:39 ?420次閱讀

    分布式大屏控制系統(tǒng)的應(yīng)用場(chǎng)景

    分布式大屏控制系統(tǒng)具有廣泛的應(yīng)用場(chǎng)景,主要涉及以下幾個(gè)方面: 監(jiān)控指揮中心:如交通指揮中心、電力調(diào)度中心、應(yīng)急指揮中心等,用于實(shí)時(shí)監(jiān)控、調(diào)度和指揮,保證系統(tǒng)的安全、穩(wěn)定、高效運(yùn)行。 會(huì)
    的頭像 發(fā)表于 01-29 14:25 ?748次閱讀

    設(shè)計(jì)高效分布式智慧終端系統(tǒng)的關(guān)鍵要素

    和隱私。這包括數(shù)據(jù)加密、身份認(rèn)證、訪問(wèn)控制等機(jī)制,以及制定嚴(yán)格的安全政策和操作規(guī)程,確保系統(tǒng)的安全。 數(shù)據(jù)一致 :在分布式
    的頭像 發(fā)表于 01-24 14:52 ?362次閱讀

    分布式智慧終端:挑戰(zhàn)與解決方案

    分布式智慧終端在應(yīng)用中面臨多種挑戰(zhàn),以下是其中一些關(guān)鍵的挑戰(zhàn)以及可能的解決方案: 數(shù)據(jù)一致挑戰(zhàn) :在分布式系統(tǒng)中,數(shù)據(jù)的一致是一個(gè)關(guān)鍵問(wèn)
    的頭像 發(fā)表于 01-24 14:50 ?448次閱讀

    保障數(shù)據(jù)完整分布式無(wú)紙化交互系統(tǒng)的關(guān)鍵特性

    系統(tǒng)應(yīng)采用可靠的數(shù)據(jù)傳輸協(xié)議,保證數(shù)據(jù)在傳輸過(guò)程中不發(fā)生丟失或被篡改。此外,系統(tǒng)還應(yīng)采用端到端加密技術(shù),確保數(shù)據(jù)在傳輸過(guò)程中的安全。 其次,對(duì)于數(shù)據(jù)的存儲(chǔ),
    的頭像 發(fā)表于 01-15 14:28 ?353次閱讀
    保障數(shù)據(jù)完整<b class='flag-5'>性</b>:<b class='flag-5'>分布式</b>無(wú)紙化交互<b class='flag-5'>系統(tǒng)</b>的關(guān)鍵特性

    什么是分布式架構(gòu)?

    分布式架構(gòu)是指將一個(gè)系統(tǒng)或應(yīng)用拆分成多個(gè)獨(dú)立的節(jié)點(diǎn),這些節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)連接進(jìn)行通信和協(xié)作,以實(shí)現(xiàn)共同完成任務(wù)的一種架構(gòu)模式。這種架構(gòu)模式旨在提高系統(tǒng)的可擴(kuò)展性、可靠和性能表現(xiàn)。 一、
    的頭像 發(fā)表于 01-12 15:04 ?1244次閱讀
    什么是<b class='flag-5'>分布式</b>架構(gòu)?

    分布式節(jié)點(diǎn)服務(wù)器是什么?

    分布式節(jié)點(diǎn)服務(wù)器是一種將多個(gè)服務(wù)器分布式連接、協(xié)同工作,以實(shí)現(xiàn)負(fù)載均衡、提高系統(tǒng)性能和可靠、提供可用
    的頭像 發(fā)表于 01-12 15:04 ?746次閱讀
    <b class='flag-5'>分布式</b>節(jié)點(diǎn)服務(wù)器是什么?