導讀:當單體應用的性能不能滿足日漸增長的業務需求的時候,就會出現分布式系統。好那接下來的時間里就讓我帶你們走進分布式系統的世界。
? 當單體應用的性能不能滿足日漸增長的業務需求的時候,就會出現分布式系統。好那接下來的時間里就讓我帶你們走進分布式系統的世界。
?
什么是分布式系統?
到底什么才是分布式系統?看了很多文章,感覺很少有文章能把這個概念解釋的既簡單,又清楚的。結合這自己的理解,我對分布式系統的概念做了下面的總結。
關于分布式系統的定義問題,我傾向從字面上來解釋:分開部署的系統就可以稱為分布式系統。比如,一個系統原本由前端頁面、后臺服務和后端數據庫組成,將這些服務全都部署在一臺機器上,這種應用叫單體應用?,F在我們將數據庫拿出來,單獨部署到另外一臺機器上,后端服務和數據庫之間通過網絡通信,這種部署方式就是一種最簡單的分布式系統。
再比如說,原本有一個后端服務,能支持500QPS的并發請求?,F在業務量上升,需要能支持1000QPS的并發量。此時你有兩個方案:
第一種就是增加系統的硬件性能,進行垂直擴展,此時系統還是單體應用;第二種方案就是再部署另外一臺機器,同樣也支持500QPS,這樣總體就能達到1000QPS的性能需求了。
方案二的系統也是一種分布式系統,將本來可以部署一臺機器的應用原樣復制一份到另外的機器上再部署一份。方案二中,部署的多臺應用被也被稱為一個集群,可以說集群是分布式系統的一種。
再比如說,原本有一個系統中包含訂單服務、產品服務和支付等服務?,F在隨著業務的不斷復雜化,將訂單服務、產品服務和支付服務單獨分拆出來形成訂單系統、產品系統和支付系統,交由專人負責。這種系統將原本的單體應用分拆成多個系統部署到不同的機器上,也是分布式系統,而且我們平時開發中所指的分布式系統大多是指這種系統。其實稍微有點分布式系統知識的同學可以看出來,這種系統就是最簡單的微服務系統。所以微服務也是分布式系統的一種。
?
分布式系統的優勢
單體應用的優勢在于它的簡單,但是其劣勢也相當明顯。一個就是容易出現單點故障,還有一個就是容易達到性能瓶頸。分布式系統很大程度上就是為了解決單體應用上面的問題而出現的。
分布式系統將一些廉價的PC機通過網絡連接起來,共同完成工作,并且在系統中提供冗余來解決高可用的問題。分布式系統通過廉價的PC機減輕了企業購買大型機的高昂費用,通過系統冗余又解決了HA的問題。
雖然分布式系統通過多工作節點解決了單體應用面臨的高成本和可用性問題,但是它引入了對分布式系統內部工作節點的協調問題。
分布式系統的挑戰
分布式系統的核心就是解決一個問題:對分布式系統內部工作節點的協調問題。
看似簡單的問題會因網絡丟包、節點宕機恢復等場景變得異常復雜。由此才衍生出很多概念、協議和理論。為探究共識問題最大能解決的程度,于是有了CAP邊界理論;為在特定條件和范圍內解決該問題,于是有一致性協議Paxos、Raft、Zab和ViewstampedReplication;為構建這些協議,于是有多數派、Leader選舉、租約、邏輯時鐘等概念和方法。
?
又因為分布式系統分開部署的特點,在具體實施開發過程中,我們又要解決:
1、分布式事務問題;
2、session共享問題;
3、分布式鎖問題;
4、全局時鐘問題;
還有一些列其他問題。雖然分布式系統解決了單體系統的單點故障和性能瓶頸問題,但同時也帶來了一系列“弊端”。但是技術就是這樣,沒有一個技術是完美的。我一直有個觀點就是:假如在一個領域中出現了一個完美的解決方案,那么在這個領域,人就不再有價值。分布式系統的復雜性給我們帶來了更多學習的空間,讓善于學習的程序員有更多發揮自身價值的機會。