芒果视频下载

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

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

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

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

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

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

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

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

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

1、最小化組件間依賴

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

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

(1)重復數據

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

經常(chang)訪問但(dan)(dan)有(you)一(yi)定規律(lv)性(xing)變(bian)化的(de)數據可(ke)以通(tong)過定期緩存(cun)刷新來臨時(shi)緩存(cun)。更改頻率更低或(huo)從不更改的(de)數據(例如(ru)客(ke)戶姓名(ming))可(ke)以直接存(cun)儲在我(wo)們的(de)組件中。如(ru)果(guo)/當這(zhe)些數據發生(sheng)變(bian)化時(shi),我(wo)們可(ke)能需要做(zuo)一(yi)些額外(wai)的(de)工作(zuo),但(dan)(dan)是這(zhe)種增加的(de)小開銷通(tong)常(chang)是值得的(de),因為它可(ke)以提高彈性(xing)。

(2)非規范化數據

非規范化(hua)是在(zai)組件內發(fa)生的(de)一種特殊(shu)形式的(de)重復(fu)。如(ru)果我(wo)們使用(yong)關系數據存儲,我(wo)們可以通過在(zai)主實體中(zhong)復(fu)制數據來降低查看(kan)多(duo)個實體的(de)成本。本地(di)化(hua)分散數據以獲得更好性能的(de)原則也適用(yong)于此。

(3)庫

為了減輕(qing)另一個組件(jian)(jian)的功能(neng)依賴性,我(wo)們(men)可(ke)以(yi)將遠(yuan)程組件(jian)(jian)打包為庫(ku)(ku)并(bing)將其嵌入到我(wo)們(men)的組件(jian)(jian)中。這并(bing)不(bu)總(zong)是可(ke)能(neng)的(它可(ke)能(neng)是用(yong)其他(ta)語言編寫的,或者太大而不(bu)能(neng)成為一個庫(ku)(ku))并(bing)且(qie)會帶(dai)來一系列問(wen)題(ti)(功能(neng)的變化需要跨(kua)多個組件(jian)(jian)進行庫(ku)(ku)升級),但是如果功能(neng)很關鍵并(bing)且(qie)經(jing)常(chang)被(bei)大規模訪問(wen),這是打破組件(jian)(jian)間連接并(bing)使其成為本地(di)的可(ke)行方法。

2、隔離錯誤

錯(cuo)誤隔離很重要(yao),原因有(you)兩(liang)個(ge)。一是個(ge)別(bie)錯(cuo)誤在分(fen)布(bu)式系統中更常見(許(xu)多移動部件的(de)簡單功能)。另一個(ge)是,如果我(wo)們不能防止整個(ge)系統中的(de)聯鎖錯(cuo)誤,那么我(wo)們首先就(jiu)失去了構建(jian)復雜體(ti)的(de)理由(you)。

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

(1)保護調用者

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

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

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

(2)保護被調用

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

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

3、在系統中建立緩沖區

(1)異步通信

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

(2)彈性配置

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

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