芒果视频下载

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

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

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

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

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

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

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

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

分(fen)布式系(xi)統一般(ban)都(dou)具有健(jian)壯性(xing),不(bu)過(guo)面對越來(lai)越普遍隨(sui)機(ji)故障,如果系(xi)統構(gou)建不(bu)當的話,也會導致(zhi)系(xi)統運行出現問題,要構(gou)建健(jian)壯的分(fen)布式系(xi)統,主要注意以(yi)下幾點:

1、最小化組件間依賴

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

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

(1)重復數據

如果我(wo)們(men)(men)(men)經常從(cong)另一個(ge)組件訪問一些數據,我(wo)們(men)(men)(men)可(ke)以(yi)在(zai)我(wo)們(men)(men)(men)的(de)組件中復制它(ta),而不必在(zai)運行(xing)時(shi)檢索它(ta)。這可(ke)以(yi)大大減少運行(xing)時(shi)依(yi)賴并幫助改善(shan)我(wo)們(men)(men)(men)組件的(de)延遲。

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

(2)非規范化數據

非規范化(hua)是在組件內發生(sheng)的一種特殊(shu)形(xing)式的重復。如果我們使用關系(xi)數(shu)(shu)據存儲(chu),我們可以(yi)通(tong)過在主(zhu)實體中復制(zhi)數(shu)(shu)據來降低(di)查看(kan)多個(ge)實體的成本。本地化(hua)分散數(shu)(shu)據以(yi)獲得(de)更好(hao)性能的原則也(ye)適用于此。

(3)庫

為(wei)了(le)減輕另一個組件(jian)的(de)(de)功(gong)能(neng)依賴性,我們可(ke)(ke)以將遠(yuan)程組件(jian)打(da)包為(wei)庫(ku)并(bing)將其嵌入到我們的(de)(de)組件(jian)中。這(zhe)并(bing)不(bu)(bu)總是(shi)(shi)可(ke)(ke)能(neng)的(de)(de)(它可(ke)(ke)能(neng)是(shi)(shi)用其他語(yu)言編寫的(de)(de),或者太(tai)大而不(bu)(bu)能(neng)成為(wei)一個庫(ku))并(bing)且(qie)會帶(dai)來一系列問(wen)題(功(gong)能(neng)的(de)(de)變化需要跨多個組件(jian)進行庫(ku)升級),但(dan)是(shi)(shi)如(ru)果(guo)功(gong)能(neng)很關鍵(jian)并(bing)且(qie)經常被大規模訪問(wen),這(zhe)是(shi)(shi)打(da)破組件(jian)間連(lian)接并(bing)使其成為(wei)本地的(de)(de)可(ke)(ke)行方法(fa)。

2、隔離錯誤

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

錯誤(wu)隔離的(de)(de)主要結構是SLA。每個(ge)組(zu)件(jian)都(dou)聲明了一(yi)些(xie)質量參(can)數,它將在執(zhi)行功能(neng)時得到(dao)尊(zun)重(zhong)。這些(xie)參(can)數可(ke)以(yi)包括延遲、錯誤(wu)率、并發(fa)性等。在此SLA之外(wai),調用它的(de)(de)組(zu)件(jian)會假定它已失敗(bai)并需要自行采取適當的(de)(de)措施。如果組(zu)件(jian)本身檢測到(dao)它無(wu)法維護其SLA,它可(ke)以(yi)先發(fa)制人地(di)告訴(su)其調用者(zhe)暫停并稍后(hou)再來調用。為了保持整體(ti)系統(tong)健康,最好是快(kuai)速失敗(bai)而(er)不是在違(wei)反SLA的(de)(de)情況(kuang)下成功。兩個(ge)組(zu)件(jian)(一(yi)個(ge)被喚起(qi)的(de)(de)和(he)一(yi)個(ge)喚起(qi)的(de)(de))都(dou)必須為此設置機制。

(1)保護調用者

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

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

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

(2)保護被調用

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

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

3、在系統中建立緩沖區

(1)異步通信

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

(2)彈性配置

可(ke)擴展性最終歸結(jie)為(wei)充分(fen)利用可(ke)用硬件(jian)。但是,如果(guo)看(kan)到規模增長,讓(rang)系統(tong)緩(huan)口氣的一(yi)個(ge)簡(jian)單(dan)方法是分(fen)配更多硬件(jian)。雖(sui)然這僅(jin)在我們能夠(gou)承(cheng)受的成本范圍內是可(ke)行(xing)的,但它為(wei)我們提供了(le)抵御不可(ke)預測的負載(zai)變化的最后(hou)一(yi)道防(fang)線。

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