別忽視分布式系統這六大「暗流」

2021-09-17 19:05:02 字數 2373 閱讀 1609

任何事物都有兩面性。你只有了解了分布式系統背後的「暗流湧動」現象是什麼,才能避免掉到「坑」裡去。

暗流的含義是流動的地下水,是潛伏在「深層」的,我們往往過度地沉迷於表面的美好,而忽略了它。在分布式系統當中,最容易被我們忽略的是下面這六大「暗流」:

為了讓你有更深刻的理解,我們來分別深入認識一下。

你應該明白,分布式系統中不同節點間的通訊是基於網路的。網路使得它們連線起來共同協作。

然而,光纜被挖斷的事件相信你也看到過不是一兩次了。除此之外,網絡卡異常、交換機故障、遭受惡意攻擊等導致的網路擁塞、網路中斷、報文丟失的種種跡象皆意味著網路隨時可能無法正常運作,是不可靠的。

此時,需要在你的系統設計中,盡可能地考慮到:當前節點所依賴的其他節點由於各種原因無法與之正常通訊時,該如何保證其依然能夠提供部分或者完整的服務。這個概念在軟體領域被定義為「魯棒性」。

所以我們不能以呼叫本地方法一樣的認知去理解遠端呼叫(rpc)。在目前的技術環境下,cpu的運算能力長期保持高速增長,因此兩個節點間通訊的大部分場景中,延遲的耗時總是大於目標節點進行邏輯運算的耗時。

由此可得,並不是將乙個集中式系統拆分得越散,系統就越快。當中存在的延遲,不容忽視。如果是基於提速為目的的拆分,至少是滿足下面這樣的條件的。

因為如果無法並行處理,反而會更慢,就像下面這樣。

關於這點,我們還需要慎重考慮是否有必要進行「同步」的rpc呼叫,以及盡量的降低呼叫次數等。這就是為什麼我們說,迴圈呼叫不如一次批量呼叫,反覆呼叫不如呼叫一次做程序內快取,同步呼叫比如非同步呼叫的道理。

舉個例子,你的網路都是基於100m頻寬標準搭建的。那麼此時如果每一秒會產生10240次資料傳輸,平均每個資料報大小是10kb,我們來看下是否會遇到瓶頸。

100m頻寬的理論傳輸速率是12.5mb/秒。那麼現在每一秒需要傳輸:10240次/秒 * 10kb = 100mb/秒。很明顯,頻寬遠遠不夠了。

關於頻寬上限,你需要明白這幾點。

實際環境中的傳輸速率大小,是由服務商所提供的頻寬大小,以及網絡卡、網絡卡、交換機、路由器所支援的傳輸速率中的最小值決定的。

內網與外網傳輸速率是不同的,一般都是內網大於外網。因為服務商所提供的頻寬成本更高。

同乙個區域網內的節點是公用外網出入口的,所以盡可能的縮小在外網傳輸的資料,以降低占用「獨木橋」外網的空間。

可能你曾經有過這樣的想法,當在規模較大的集中式系統中工作的時候,每次和許多人在乙個**庫里提交**,老是遇到衝突、排隊等待上游模組先開發等等。這時你會想,如果改造成分布式系統,這些問題都沒了,工作效率高多了。

這點其實是由於前面提到的網路因素產生的連帶效應。

當遇到資料庫壓力增大,響應開始變慢的時候,你可能會很容易想到,讓dba來做個主從啊。但是,由於網路不可靠、存在延遲、頻寬有上限這一系列因素。所以,這個看似只是copy一下工作,需要我們花大量的精力去解決如何保證在使用不同副本上的資料的時候,都是符合應有的預期的

關於這點,業界已經研究了幾十年,同時得出了許多具有指導意義的理論和思想。你需要充分的理解這些,並且能夠識別出合適的運用場景,就可以解決這個問題。這個概念在軟體領域被定義為「資料一致性」。

先來看下「異構」的定義:

形容乙個包含或者組成「異構網路」的產品,所謂的「異構網路」通常指不同廠家的產品所組成的網路。

比如,可以是裝有不同作業系統的伺服器、不同的資料庫產品、用不同的語言開發的產品等等。我們所處的整個全球網際網路就是「異構」的。

在系統初期,同類技術下的差異往往不太被關注。但是隨著分布式系統規模的逐漸擴大,在進入到成熟期的過程中,往往不可避免的會使系統成為異構的,有主動的,也有被動的。

關於這點,你要思考如何通過**的方式進行標準化,來遮蔽這些差異帶來的複雜度影響,使得有更多的精力投入到有價值的地方去。**的特點是「約束」效果,標準化通過**來進行可以降低許多為了方便而妥協問題。比如每個節點都通過統一的遠端呼叫(rpc)中介軟體來做「連線」,就將如何連線異構節點的問題交由這個中介軟體來全權負責,而不是不同的團隊各自實現一套。

希望你能時刻保持警惕之心,帶著沒有「完美方案」的心態在分布式系統中前行。

第一篇:《撥雲見日看什麼是分布式系統?》

第二篇:《詳解分布式系統本質:「分治」和「冗餘」》

分布式系統

分布式系統和計算機網路系統的共同點是 多數分布式系統是建立在計算機網路之上的,所以分布式系統與計算機網路在物理結構上是基本相同的。他們的區別在於 分布式作業系統的設計思想和網路作業系統是不同的,這決定了他們在結構 工作方式和功能上也不同。網路作業系統要求網路使用者在使用網路資源時首先必須了解網路資源...

分布式系統

分布式,一來就直接看書,除非你有比較深厚的技術功底,要不還是很晦澀難懂的。先想想為什麼會有分布式,分布式怎麼來的。傳統的電信 銀行業,當業務量大了之後,普通伺服器cpu io 網路到了100 請求太慢怎麼辦?最直接的做法,公升級硬體,反正也不缺錢,ibm小型機,大型機,採購了堆硬體。但是網際網路不能...

分布式系統

zookeeper讓服務配置變得更簡單 zookeeper是hadoop下的乙個子專案,它是乙個針對大型分布式系統的可靠的協調系統,提供的功能包括 配置維護 名字服務 分布式同步 組服務等。zookeeper是可以集群複製的,集群間通過zab zookeeper atomic broadcast 協...