芒果视频下载

品牌分類   知識分類          
移(yi)動端
  • 買購網APP
  • 手機版Maigoo
  

分布式系統為什么具有健壯性 怎么構建健壯的分布式系統

本文章由注冊用戶 知無涯 上傳提供 2024-11-30 評論 0
摘要:分布式系統的處理和控制功能是分布的,單一站點產生的故障不會對整個系統造成太大的影響,即使設備故障,也可以通過容錯技術實現系統的重構,因此分布式系統一般都具有健壯性,不過構建分布式系統時,還是要注意通過最小化組件間依賴、隔離錯誤、在系統中建立緩沖區等方法,構建更健壯的分布式系統。下面一起來看看分布式系統為什么具有健壯性以及怎么構建健壯的分布式系統吧。

一、分布式系統為什么具有健壯性

健壯(zhuang)性(xing)是指在異常和(he)危險情(qing)況下系(xi)統(tong)生存的能力,分布式系(xi)統(tong)一般具(ju)有健壯(zhuang)性(xing),這(zhe)是因為:

1、分(fen)(fen)布式(shi)系(xi)統(tong)的(de)處理和控制(zhi)功能是分(fen)(fen)布的(de),任何(he)站點發(fa)生的(de)故(gu)障都不會給整個(ge)系(xi)統(tong)造成(cheng)太大的(de)影響。

2、當分布式系統中的設備出(chu)現故(gu)障時,可以(yi)(yi)通過(guo)容錯技術實(shi)現系統的重(zhong)構,以(yi)(yi)保證(zheng)系統的正(zheng)常運行。

二、怎么構建健壯的分布式系統

分(fen)布式系統一般都具有健壯性,不(bu)過面對越(yue)來越(yue)普遍隨機故障,如果系統構建不(bu)當(dang)的(de)話,也會導致系統運(yun)行出(chu)現問題,要構建健壯的(de)分(fen)布式系統,主要注(zhu)意以(yi)下幾點:

1、最小化組件間依賴

分布式系統的組件(jian)相互通信以獲取數據(ju)或功能(neng)。在(zai)這(zhe)兩(liang)種情況(kuang)下,我(wo)們都可(ke)以通過將數據(ju)/功能(neng)推送到(dao)調(diao)用組件(jian)而不是遠程訪問來減少連接需求。

構建大規(gui)模分布(bu)式系統迫使我(wo)們(men)(men)放棄(qi)標準(zhun)軟(ruan)件工程(cheng)的許多“最佳實(shi)踐”。要記住的關鍵是,當我(wo)們(men)(men)采用分布(bu)式系統的復雜性來實(shi)現可擴展性時,我(wo)們(men)(men)還(huan)需要盡可能地控制“分布(bu)”。

(1)重復數據

如果(guo)我(wo)們經常從(cong)另(ling)一個組件(jian)(jian)訪問一些數據,我(wo)們可以在(zai)我(wo)們的(de)組件(jian)(jian)中復制(zhi)它,而不必在(zai)運行時檢索它。這可以大(da)大(da)減(jian)少運行時依賴并幫(bang)助(zhu)改善我(wo)們組件(jian)(jian)的(de)延遲。

經常訪(fang)問但有一(yi)定(ding)規(gui)律性(xing)變化(hua)的(de)數據可(ke)(ke)(ke)以通過定(ding)期緩(huan)存(cun)刷(shua)新來(lai)臨時(shi)(shi)緩(huan)存(cun)。更改頻(pin)率(lv)更低(di)或從不更改的(de)數據(例如客戶姓(xing)名)可(ke)(ke)(ke)以直(zhi)接存(cun)儲在(zai)我(wo)們(men)的(de)組件(jian)中。如果/當這(zhe)(zhe)些數據發生變化(hua)時(shi)(shi),我(wo)們(men)可(ke)(ke)(ke)能需要做一(yi)些額外的(de)工作(zuo),但是這(zhe)(zhe)種增加的(de)小開(kai)銷通常是值得的(de),因為它(ta)可(ke)(ke)(ke)以提(ti)高彈(dan)性(xing)。

(2)非規范化數據

非規范(fan)化是在(zai)組件內發(fa)生的一種特(te)殊形式(shi)的重復。如(ru)果我(wo)們(men)使(shi)用關(guan)系數據(ju)存儲,我(wo)們(men)可以通過在(zai)主(zhu)實體中復制數據(ju)來(lai)降低查看(kan)多個實體的成本。本地化分散數據(ju)以獲得更好性能的原(yuan)則(ze)也適用于此(ci)。

(3)庫

為(wei)(wei)了減(jian)輕另一(yi)個組件(jian)的功(gong)能依賴性,我們可以將(jiang)(jiang)遠程組件(jian)打(da)包為(wei)(wei)庫并(bing)將(jiang)(jiang)其(qi)嵌入到(dao)我們的組件(jian)中(zhong)。這并(bing)不總是(shi)可能的(它可能是(shi)用其(qi)他語言編寫(xie)的,或者太大而不能成為(wei)(wei)一(yi)個庫)并(bing)且會帶(dai)來(lai)一(yi)系列問題(功(gong)能的變化需要跨多(duo)個組件(jian)進行庫升級),但(dan)是(shi)如果功(gong)能很關鍵并(bing)且經常被大規模訪(fang)問,這是(shi)打(da)破(po)組件(jian)間連接并(bing)使其(qi)成為(wei)(wei)本地的可行方法。

2、隔離錯誤

錯(cuo)誤隔離很重(zhong)要,原(yuan)因有(you)兩個。一(yi)是個別錯(cuo)誤在分布式(shi)系統(tong)中更常見(許多(duo)移動部件(jian)的(de)簡(jian)單功(gong)能(neng))。另一(yi)個是,如果(guo)我(wo)們不能(neng)防止整個系統(tong)中的(de)聯鎖錯(cuo)誤,那么(me)我(wo)們首先就失去了構建復(fu)雜體的(de)理由。

錯(cuo)誤隔離的(de)主要(yao)(yao)結構是(shi)(shi)SLA。每個(ge)組件(jian)(jian)都聲(sheng)明(ming)了一些質量參(can)數(shu),它(ta)將(jiang)在執行功能時得到尊重。這些參(can)數(shu)可以包(bao)括延遲、錯(cuo)誤率(lv)、并發性等(deng)。在此SLA之外,調用(yong)它(ta)的(de)組件(jian)(jian)會(hui)假定它(ta)已失敗(bai)并需要(yao)(yao)自行采取適當(dang)的(de)措(cuo)施。如果組件(jian)(jian)本(ben)身(shen)檢測到它(ta)無(wu)法(fa)維護其SLA,它(ta)可以先發制(zhi)人地告訴其調用(yong)者(zhe)暫停并稍后再來(lai)調用(yong)。為了保(bao)持整體系統健康,最好是(shi)(shi)快速失敗(bai)而(er)不(bu)是(shi)(shi)在違反SLA的(de)情況下成功。兩(liang)個(ge)組件(jian)(jian)(一個(ge)被喚(huan)起的(de)和一個(ge)喚(huan)起的(de))都必須為此設置(zhi)機制(zhi)。

(1)保護調用者

A、超時(shi):如果被調(diao)用的(de)組(zu)件(jian)在其SLA內沒有(you)響應(ying),調(diao)用者必須超時(shi)(放棄)并改(gai)用一(yi)些回退機(ji)制(即(ji)使它拋出錯誤)來維護(hu)自己的(de)SLA并防(fang)止一(yi)連串的(de)SLA違(wei)規。

B、重試:由于網絡不可靠,分布式系統中的許多錯誤只是隨(sui)機(ji)的。如(ru)果(guo)調(diao)用者自己的SLA允(yun)許,調(diao)用者可以重試該(gai)操(cao)作(zuo)。重試的前提是操(cao)作(zuo)的冪等性(xing)。即它(ta)不應該(gai)改變狀態(tai)或(huo)只做一次,即使它(ta)被調(diao)用了兩(liang)次。

C、斷路器:如果對組(zu)件(jian)的(de)調用(yong)連續失(shi)敗,調用(yong)者(zhe)可以通(tong)過“打開電路”切斷連接并停止調用(yong)一段時間。由于調用(yong)者(zhe)已經有一些錯(cuo)誤(wu)場景的(de)備(bei)份行為,這節省了調用(yong)者(zhe)寶貴的(de)資(zi)源,這些資(zi)源本來會被浪費掉。停止調用(yong)還可以減少被調用(yong)組(zu)件(jian)的(de)負載(zai),并給它一些恢復的(de)喘息空間。

(2)保護被調用

A、隨機間(jian)(jian)(jian)隔(ge):雖(sui)然重(zhong)試(shi)可(ke)以(yi)減少錯誤,但在(zai)一個(ge)(ge)頻繁使用(yong)的(de)組件中出現(xian)一個(ge)(ge)小的(de)性能(neng)問題可(ke)能(neng)會(hui)導致其所有(you)調(diao)用(yong)者一次重(zhong)試(shi)。這種(zhong)“重(zhong)試(shi)風暴(bao)”會(hui)造成負載峰值并阻(zu)止(zhi)該組件恢復。為了防止(zhi)這種(zhong)情況,重(zhong)試(shi)應該在(zai)它們之間(jian)(jian)(jian)有(you)一個(ge)(ge)隨機的(de)時間(jian)(jian)(jian)間(jian)(jian)(jian)隔(ge),以(yi)便交錯加載。

B、背壓:如果一個組(zu)件檢測到(dao)自己承受過多的(de)負載(zai)并且即將違反(fan)其SLA,它(ta)(ta)可以搶先開始丟棄新請求(qiu),直到(dao)其性能得(de)到(dao)控制(zhi)。這比接(jie)受它(ta)(ta)知(zhi)道它(ta)(ta)不能在SLA內提供(gong)服務或沒有完全崩(beng)潰(kui)風險的(de)請求(qiu)要(yao)好得(de)多。

3、在系統中建立緩沖區

(1)異步通信

消息(xi)(xi)總線(xian)之類的(de)異步通(tong)(tong)(tong)信通(tong)(tong)(tong)道允許調(diao)(diao)用遠程(cheng)組件,而(er)無需非常嚴格的(de)SLA依賴(lai)。通(tong)(tong)(tong)過讓被調(diao)(diao)用組件準(zhun)備好而(er)不是立即使用消息(xi)(xi),系(xi)統對(dui)增加的(de)工作負(fu)載的(de)需求(qiu)變(bian)得更加靈(ling)活(huo)。

(2)彈性配置

可擴展性(xing)最(zui)終歸結為充分利(li)用可用硬件(jian)。但(dan)是(shi)(shi),如(ru)果看到規模增長(chang),讓系統緩口氣的(de)一個簡單方法是(shi)(shi)分配更多硬件(jian)。雖然這僅在(zai)我(wo)們(men)(men)能夠承受的(de)成本范圍內(nei)是(shi)(shi)可行的(de),但(dan)它為我(wo)們(men)(men)提供(gong)了抵御不可預測的(de)負(fu)載變(bian)化的(de)最(zui)后一道防(fang)線(xian)。

網站提醒和聲明
本站(zhan)為注冊(ce)用戶提供信(xin)息存儲空間服(fu)務,非“MAIGOO編輯(ji)”、“MAIGOO榜單研究員(yuan)”、“MAIGOO文(wen)章編輯(ji)員(yuan)”上(shang)傳(chuan)提供的(de)文(wen)章/文(wen)字均是注冊(ce)用戶自主(zhu)發布上(shang)傳(chuan),不代(dai)表本站(zhan)觀點,版權歸(gui)原作者(zhe)所(suo)有(you),如有(you)侵權、虛假信(xin)息、錯誤信(xin)息或(huo)任何問題,請(qing)及(ji)時(shi)聯系(xi)我(wo)們(men),我(wo)們(men)將在第一時(shi)間刪除(chu)或(huo)更正。 申請刪除>> 糾錯>> 投訴侵權>> 網頁(ye)上相關(guan)信(xin)息(xi)的知(zhi)識產權(quan)(quan)歸網站方(fang)所有(包(bao)括但不限于(yu)文字、圖(tu)片、圖(tu)表、著作權(quan)(quan)、商標權(quan)(quan)、為用戶提供的商業(ye)信(xin)息(xi)等),非經許可不得抄襲或(huo)使用。
提交說明(ming): 快速提交發布>> 查看提交幫助>> 注冊登錄>>
發表評論
您還未登錄,依《網絡安全法》相關要求,請您登錄賬戶后再提交發布信息。點擊登錄>>如您還未注冊,可,感謝您的理解及支持!
最(zui)新評論(lun)
暫無評論