分布式 - 分布式系统的特点
20世紀60年代,IBM研發了System 360架構大型機,與同時期的波音707、福特汽車譽為商業三大成就,憑借其卓越的性能和良好的穩定性,開啟了大型機的時代,誕生了非常多的集中式系統,采用單機架構,有非常好的單機處理能力。
然而,大型機的高性能也伴隨著高成本,包括購買成本和運維成本,對運維人員的要求非常之高,需要掌握大型機緊密設計的技術細節。
并且購買成本也是極其昂貴,起步幾百萬刀,甚至更高,只有政府和金融等機構才有能力采購。
另一個問題,是當今大家都比較關注的單點故障,大型機設計在精良,也不代表它永不宕機,而一臺大型機上面往往安裝一個甚至多個重要的系統,一旦宕機,后果很嚴重。
美國國防部認為,如果僅有一個集中的軍事指揮中心,萬一被摧毀,全國軍事指揮將處于癱瘓狀態,因此,設計一個分散的,網絡化的指揮通信系統十分有必要,1969年組建了第一個分組交換實驗網ARPANET,1980年,TCP/IP(Transmission Control Protocol/Internet Protocol)研制成功,從此,奠定了分布式系統的基石 -- 網絡和通信協議!
看起來,分布式最早出現的目地首先是解決單點問題,避免單點故障,然后解決了性能問題。
隨著PC機性能的提升和普及,很多企業開始嘗試將系統運行在PC服務器上,搭建基于分布式架構的系統,系統之間通過網絡連接和通信,分布式系統嚴重依賴于網絡。
一句話總結單機集中式系統和分布式系統的核心差異:單機系統運行于一臺計算機上,而分布式系統是運行于網絡之上!
而在前幾年,Hadoop生態倡導基于普通PC構建大型分布式計算系統,并大獲成功,加速了分布式架構快速普及和應用。
分布式的特點
分布式系統是一個各組件分布在不同計算機上,彼此通過網絡通信和協調的系統。
這是來自《分布式系統概念與設計》一書中的定義,我給簡化了一下,但核心就是上面提到的,分布式,顧名思義,系統的特定部分是分布在不同的計算機上,甚至是完全不在一個機房,或者一個地區的計算機上,各部分通過網絡通信,使得整體看起來還是一個系統,對用戶透明。
資源冗余
網絡中的計算機本身都是對等的,沒有主從之分,但是,分布式系統為了本身的健壯和可靠性考慮,會設計一些冗余來化解分布式系統本身存在的一些必然性。
冗余包括數據的冗余和服務的冗余,數據通常會有一主和多個副本,主數據丟失,系統會讀取副本數據,繼續對外提供服務;
而服務的冗余是同樣一個服務,會運行在多個計算機節點上,每一個服務都有能力對外提供完整或部分服務。
并發問題
如上所述,一個系統服務可能存在多個運行實例,由于是同時運行,就可能會并發的操作一些共享資源,諸如數據庫,分布式文件系統等,如何準確高效的協調并發操作,避免阻塞,保證一致性,是分布式架構設計中最大的挑戰之一!
全局時鐘
請參考論文:《Time and clocks and ordering of events in a distributed system》或者?time-and-clocks-and-ordering-of-events-in-a-distributed-system
,深刻的剖析了分布式系統多節點之間缺乏全局時鐘序列控制的問題,如何保證事件發生的精確的先后順序。
環境問題
分布式系統的優勢是網絡化,為系統的擴展提供了可能性,然而,分布式最大的問題也是網絡化帶來的各種不確定因素,從工業的角度來說,網絡問題是分布式系統的原罪,給分布式系統的設計和實現都帶來了極大的難題和挑戰。
網絡的不可靠性
假如CPU一次計算需要1s,那么,一次從舊金山到紐約的網絡請求,大約需要5年,到香港需要11年
所以,網絡的倆個問題,1,不能保證信息的完整性和必達性,存在數據丟包的問題;2,延遲,在整個系統當中,網絡延遲是最耗時的部分,各部分性能對比請參考:Computer Latency at a Human Scale。
網絡分區
當網絡通信出現異常,導致分布式系統中部分節點之間的網絡延時不斷增大,最終,只有部分節點之間的通信是正常的,整個分布式系統變成幾個小組,這個現象稱為網絡分區,也會形成腦裂。
因此,分布式系統被強行分為幾個局部的小集群,并且都會按照一致性算法選舉出自己的master,這個有點像戰國時期的中國,這就是網絡分區,也是腦裂。
可怕的是,每個小集群都可以正常對外服務,出現數據嚴重不一致的情況,因此,網絡分區,數據一致性,再加上可用性(就是出現前面兩種情況你怎么辦?),被稱為傳說中的CAP定理,
CAP
這些情況對分布式系統的設計,工程實踐提出了非常大的挑戰。
三態
在集中式的系統中,模塊之間的調用狀態只有倆種狀態,就是成功和失敗,而在分布式系統中,模塊之間可能是通過網絡通信的,所以就多了一種超時的狀態。
超時狀態通常會出現在一下倆種情況:
由于網絡原因,請求并沒有被成功的發送到接收方,在過程中丟失;
請求被成功的發送到接收方,并進行了處理,但是,接收方在響應給發送方的過程中,數據丟失了,發送方沒有收到反饋。
因此,成功、失敗、超時是分布式系統通信的三種狀態,稱為三態。
節點故障
節點故障是分布式系統中另一個很常見的問題,指的是分布式組成的節點當中,有的節點因為宕機、或者進程退出,出現的節點故障。
根據經驗,每個節點都有可能出現故障,并且每天都有可能發生,所以,分布式設計,除了要考慮網絡問題,另一個重要的考慮因素是節點故障。
小結
本文主要討論了一下集中式系統的過去,和分布式系統盛行的當下和緣由,以及分布式系統的特點、困境,后面會繼續出一些關于分布式系統的相關內容,討論分布式系統的方方面面。
原文地址:https://www.cnblogs.com/xguo/p/10878615.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結
以上是生活随笔為你收集整理的分布式 - 分布式系统的特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软拥抱开源,Win10为啥要引入真Li
- 下一篇: .NET Core 3.0 可回收程序集