分佈式計算的8大謬誤

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Ably博客最近的一篇文章中,Alex Diaconu回顧了分佈式計算的8大謬誤,並提供了一些應對建議。InfoQ藉此機會與Diaconu進行了交流,以瞭解更多關於Ably工程師如何處理這些謬誤的信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Ably博客最近的一篇文章中,Alex Diaconu"},{"type":"link","attrs":{"href":"https:\/\/ably.com\/blog\/8-fallacies-of-distributed-computing","title":"","type":null},"content":[{"type":"text","text":"回顧"}]},{"type":"text","text":"了分佈式計算的8大謬誤,並提供了一些應對建議。InfoQ藉此機會與Diaconu進行了交流,以瞭解更多關於Ably工程師如何處理這些謬誤的信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這"},{"type":"link","attrs":{"href":"http:\/\/nighthacks.com\/jag\/res\/Fallacies.html","title":"","type":null},"content":[{"type":"text","text":"8大謬誤"}]},{"type":"text","text":"是關於分佈式計算的一組假設,這些假設可能會導致軟件開發的失敗:網絡是可靠的;延遲爲0;帶寬是無限的;網絡是安全的;拓撲結構是不變的;只有一名管理員;傳輸成本爲0;網絡是同構的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些謬誤可以視爲分佈式系統設計時需要考慮的架構需求。InfoQ與Diaconu進行了交流,以瞭解更多關於Ably工程師如何處理這些謬誤的信息。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:關於分佈式計算的謬誤,自從最初提出以來,已經過去了近三十年,但現在它們仍然很有意義。在Ably,它們的作用是什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Alex Diaconu:"},{"type":"text","text":" 所有這些謬誤指向的都是分佈式系統設計的陷阱,它們今天依然很有意義。它們的影響不盡相同,其中有一些更容易處理。對於Ably來說,下面這幾個謬誤的影響最爲普遍:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"網絡是可靠的。"},{"type":"text","text":" 自然,這是所有服務設計和運營都需要考慮的一個方面。不僅網絡本身不可靠,你試圖通過網絡訪問的系統也會失敗。網絡失敗也不是一個二元問題——網絡失敗會有意想不到的形式。預測節點或互連故障是系統設計固有的工作。在Ably的博客上,我們已經對我們的處理方法做了廣泛的探討,比如通過"},{"type":"link","attrs":{"href":"https:\/\/ably.com\/blog\/engineering-dependability-and-fault-tolerance-in-a-distributed-system","title":"","type":null},"content":[{"type":"text","text":"容錯機制"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"拓撲結構是不變的。"},{"type":"text","text":" 這條謬誤對於我們的架構而言也很重要。Ably平臺被設計成具有實時彈性的平臺,因此,其拓撲結構會不斷變化。我們的系統必須把拓撲結構變化作爲一個常規問題來處理,而且,處理這個問題是系統複雜性的一個重要來源。其他系統服務使用發現層來構造系統拓撲的公共視圖。服務間請求路由全都是根據那個拓撲結構圖來完成的:發現層的可擴展性和性能是一項不小的工程挑戰,我們已經在擴展Ably服務的過程中解決了這個問題。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"帶寬是無限的&傳輸成本爲0。"},{"type":"text","text":" 在實踐中,系統內的網絡成本——在跨多個地區的全球性系統中——在運營成本中佔了相當一部分。因此,我們要知道,在設計系統時,要保證我們的流量可以隨着用戶負載線性擴展,並且要監控流量,確保它在設計參數之內。我們偶爾也會遇到網絡狀況退化的問題,因此,我們需要通過監控來發現這種退化。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:在分佈式系統過去30年的發展歷程中,是否出了其他需要注意的謬誤?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Diaconu:"},{"type":"text","text":" 我覺得,過去30年最大的變化是我們對如何處理這些謬誤的理解更成熟了。這不是說問題更簡單了,而是我們對它們有了更好的理解。我們知道什麼方法好,什麼方法不好,以及某種特定的方法有什麼侷限。關於這些問題,現在已經有了完善的科學理論和工程實踐。計算機科學專業的學生都會學習這些問題及其現狀。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,重要的是要知道,這些謬誤是長久存在的技術挑戰,而不要把它們想成是可以輕鬆躲開的陷阱。事實上,我覺得你可以說有這樣一種新謬誤——“避免分佈式計算的謬誤很簡單”。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:有些謬誤已經是老生常談,例如,“雲不安全”的觀點已被廣泛接受。不過,這些謬誤中也有一些複雜難解之處,應對起來並不是那麼簡單。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Diaconu:"},{"type":"text","text":" 就像前面提到的那樣,分佈式系統的挑戰,以及與分佈式系統構建技術和機制相關的廣泛的科學領域,已經得到了很好的研究。然而,當你在現實世界中應對這些挑戰時就會發現,學術理解只能帶你走這麼遠。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"構建分佈式系統要遵循工程實用主義進行權衡,最好的解決方案來自於經驗以及試驗。例如,“網絡是可靠的”這一謬誤是你要解決的最基本的問題。已知的解決方案有具有重試機制的協議、共識形成協議或冗餘容錯,使用哪種方案,取決於你所關注的特定的故障模式。不過,工程上的現實情況是,多重故障可能會同時發生。這樣,理想的解決方案應該基於故障分佈分析或是故障預算分析,以及某些故障對具體業務的影響。恢復機制本身可能會因爲系統不可靠而失敗,而此類失敗發生的概率可能會影響解決方案。當然,也有複雜性風險:解決方案理論上很可靠,但也很複雜,與理論上不那麼完善但更簡單的機制相比,當事件發生時,處理或理解的難度都要大很多。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"InfoQ:過去幾年,微服務已經變得非常流行,它們似乎並不把“傳輸成本爲0”當成謬誤。事實上,微服務越小,其數量和隨之而來的傳輸成本就越大。關於這一點,您怎麼看?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"Diaconu:"},{"type":"text","text":" 也許這是另一個謬誤“微服務簡化了系統推理”。有時候,將事情分解成表面積較小的組件可以簡化推理。但是,有時候,這些邊界會增加複雜性,會增加故障模式,產生一些新的需要推斷的行爲。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"和之前的回答一樣,具體的設計選擇,以及何時何地採用已知的理論解,取決於工程判斷和經驗。在Ably,我們運營的系統有多個角色,這些角色可以獨立擴展、相互操作及相互發現。然而,我們很少將功能劃分成不同的角色,而且只在有特定需求時纔會這樣做。例如,如果我們希望某些特定的功能能夠獨立於其他功能進行擴展,這可以證明單獨創建一個角色的合理性,即使它帶來了額外的複雜性。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Diaconu的文章不僅幫助我們瞭解了謬誤的來源,而且還就當前解決謬誤的技術和方法提供了一些實用的線索,所以如果你對這個問題感興趣,不妨讀一下。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看英文原文:"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.com\/news\/2021\/09\/fallacies-distributed-computing\/","title":"","type":null},"content":[{"type":"text","text":"Reviewing the Eight Fallacies of Distributed Computing"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章