芒果视频下载

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

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

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

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

健壯(zhuang)性是(shi)指(zhi)在異常和危險(xian)情況下系(xi)統生(sheng)存的能力(li),分布(bu)式系(xi)統一般具有(you)健壯(zhuang)性,這是(shi)因為:

1、分(fen)布(bu)式系統的處理和控制功能是分(fen)布(bu)的,任何(he)站(zhan)點發生的故障都(dou)不(bu)會給(gei)整個系統造成太大的影響。

2、當分布式系統(tong)中的(de)設(she)備出現(xian)(xian)故障時(shi),可以通(tong)過容錯(cuo)技術(shu)實現(xian)(xian)系統(tong)的(de)重構,以保證(zheng)系統(tong)的(de)正常運行。

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

分布式(shi)系統一般都具有健壯(zhuang)性,不過面對越來(lai)越普(pu)遍隨機故障(zhang),如果系統構(gou)建不當的話,也會導致系統運行出現問題,要構(gou)建健壯(zhuang)的分布式(shi)系統,主要注意以下幾(ji)點:

1、最小化組件間依賴

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

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

(1)重復數據

如(ru)果(guo)我(wo)們(men)經常從另一個組(zu)(zu)件訪問一些數據(ju),我(wo)們(men)可以(yi)在我(wo)們(men)的組(zu)(zu)件中復制它,而不必在運(yun)行時(shi)檢索它。這可以(yi)大(da)大(da)減少運(yun)行時(shi)依(yi)賴并幫助改善我(wo)們(men)組(zu)(zu)件的延遲。

經(jing)常訪問但有一(yi)定規律性(xing)變(bian)(bian)化(hua)的(de)(de)(de)數據(ju)可以通過定期緩(huan)存(cun)刷(shua)新來臨(lin)時緩(huan)存(cun)。更(geng)改頻率更(geng)低或從不更(geng)改的(de)(de)(de)數據(ju)(例如客(ke)戶姓名)可以直(zhi)接存(cun)儲在我(wo)們的(de)(de)(de)組件中。如果/當(dang)這些(xie)數據(ju)發生(sheng)變(bian)(bian)化(hua)時,我(wo)們可能需要做一(yi)些(xie)額外的(de)(de)(de)工作,但是(shi)這種增加的(de)(de)(de)小開銷通常是(shi)值(zhi)得(de)的(de)(de)(de),因(yin)為它可以提高(gao)彈性(xing)。

(2)非規范化數據

非規范(fan)化是在組件(jian)內發生(sheng)的(de)一種特(te)殊形式的(de)重(zhong)復(fu)(fu)。如果我們(men)(men)使用關系數據存儲,我們(men)(men)可(ke)以通過在主(zhu)實體(ti)(ti)中復(fu)(fu)制數據來降低查看多個(ge)實體(ti)(ti)的(de)成本(ben)。本(ben)地化分散(san)數據以獲得更好(hao)性能的(de)原則也(ye)適用于(yu)此。

(3)庫

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

2、隔離錯誤

錯誤(wu)隔離(li)很重要,原因(yin)有兩個。一是個別錯誤(wu)在分布(bu)式系統中更常見(許多(duo)移動部件的簡(jian)單(dan)功能)。另一個是,如果我們不能防止整個系統中的聯鎖(suo)錯誤(wu),那么我們首(shou)先(xian)就失(shi)去了構建復(fu)雜體的理由。

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

(1)保護調用者

A、超時:如果被調用(yong)的組件在(zai)其(qi)SLA內沒(mei)有響應,調用(yong)者(zhe)必須超時(放棄)并改用(yong)一些回退機制(即(ji)使它(ta)拋出(chu)錯誤)來維護自己的SLA并防止一連串的SLA違規。

B、重試:由于網絡不可靠,分布式系統中的(de)(de)(de)許(xu)多錯誤只是(shi)(shi)隨機的(de)(de)(de)。如果調(diao)用者自(zi)己的(de)(de)(de)SLA允許(xu),調(diao)用者可以重試(shi)該操作。重試(shi)的(de)(de)(de)前提是(shi)(shi)操作的(de)(de)(de)冪等性(xing)。即它不應該改變狀(zhuang)態或只做一次,即使(shi)它被(bei)調(diao)用了兩次。

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

(2)保護被調用

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

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

3、在系統中建立緩沖區

(1)異步通信

消息總(zong)線之類的異步通信通道允許調(diao)用遠程(cheng)組(zu)件,而無(wu)需非(fei)常(chang)嚴格的SLA依賴。通過讓被調(diao)用組(zu)件準(zhun)備好而不是立即使用消息,系統對增(zeng)加的工作負載的需求變得更加靈活。

(2)彈性配置

可擴展性最終歸結(jie)為充分(fen)利用可用硬件。但是,如果看到規(gui)模(mo)增長,讓系(xi)統(tong)緩(huan)口氣的(de)(de)一個(ge)簡單方法是分(fen)配(pei)更(geng)多硬件。雖然這(zhe)僅在(zai)我們能夠(gou)承受的(de)(de)成本(ben)范圍(wei)內(nei)是可行(xing)的(de)(de),但它為我們提(ti)供了抵(di)御不可預測的(de)(de)負載(zai)變(bian)化的(de)(de)最后一道防線(xian)。

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