分布式系统的构建原则
什么是構建一個可維護和可擴展的系統的意義?
在早期,一個系統的形態,只是滿足用戶和服務器資源之間的通道,唯一要擴展和維護的是系統后面的資源,保證資源的可用和夠用,而系統本身的壓力并不大。
系統設計跟我們生活中大多數事情一樣,都需要花時間提前規劃,能夠讓我們的服務長時間在線。所以,我們了解和總結一些大型系統背后的思考和權衡,能夠幫助我們在系統早期做出一些明智和靠譜的決策。
如今,開源組件已經成為構建一些企業系統的基石,伴隨著行業的發展,最佳實踐和圍繞這些系統架構的指導原則也逐漸顯現出來了,在什么時候該用什么樣的技術,需要考慮到哪些方面,各路牛人早有撰文總結。
本文簡單回顧一下,我們在設計一些分布式系統的時候需要考慮的一些關鍵因素,我們稱之為?分布式系統設計原則。
一,分布式系統的設計原則
我們將這些在構建系統需要考慮的因素稱之為分布式架構設計原則,如下圖所示,有六個部分,右邊是我們設計系統要達到的基本要求,包括可用、可靠以及性能,這也是?一個可維護和可擴展系統最大的意義,而左邊是系統設計和開發期間要考慮的三個部分,包括擴展性、維護性和成本控制。
我把原則分為倆個大的方面,目標原則?和?實踐原則,
先來看一下目標原則,
站在用戶和公司的角度,要求我們設計的系統都必須要滿足以下幾個原則,特別是互聯網性質的系統,這三個原則都是非常重要的。
可用性,系統的正常在線可用時間,對許多公司的產品聲譽來說是絕對至關重要的指標,例如一些大型的零售商網站,幾分鐘的不可用會導致巨大的損失,長此以往,客戶也會流失殆盡。
因此,設計這些系統能夠長期穩定在線,并有系統一定的容錯能力是當代企業和科技公司必備的基本能力。做到高可用,要在分布式系統中要求我們深思熟慮的對一些關鍵組件進行冗余設計,發生故障時,能夠即時恢復,或者優雅降級(降級通常不解決問題,優化用戶體驗的一種妥協的做法);
可靠性,系統的可靠性,能夠保證數據分區后,數據的一致性和持久性,相同的請求同一時間返回一致的數據,數據更新以后用戶能夠獲取最新的數據,如果是最終一致,或延遲一致要保證數據的持久性;
性能,系統性能,由于用戶和流量的不斷增長,逐漸成為很多公司關注的另一個焦點,因為雖然做到可用,但系統響應速度也會直接影響用戶的使用和滿意度,如果是網站的話,也會影響搜索引擎的排名,最終影響用戶的粘度和收益。
所以,優化系統的響應速度,降低延遲,提高吞吐量,也是非常關鍵的。
滿足以上目標原則,我們要考慮系統的實現,如何來滿足以上的目標原則,我把他稱為?實現原則,能夠在不同的階段,讓系統都能夠適應需求的變化,并在提高成本的情況下,持續滿足以上幾個目標原則。
來看一下實現原則:
擴展性,當今但凡談到分布式系統,擴展性是首要考慮的一個方面,Google在這方面表現的尤為激進,可以讓系統做到無限擴展,例如Spanner,用空間換效率,用規模覆蓋算法的次優選。所以,擴展系統的各個部分,幾乎是達到可用性、可靠性和性能要求的主要手段。
擴展性涉及系統的方方面面,通常是倆個緯度,scale up 和 scale out,當然,在《The Art Of Scalability》中,提到的Scale Cube,是從三個不同緯度來擴展系統,也是擴展的一種方法,稍后單開一篇介紹,這里就不展開了;?
維護性,正所謂,一個系統配套好的運維工具,能夠千方百計的彌補和設法繞過系統實現上的缺陷,使得系統整體可用性比較高,相反,會讓系統的任何的問題都會毫無掩蓋的暴露給用戶,沒有任何預警信息,同時也會增加發現問題和排查問題的成本。
因此,在設計和實現一個系統的時候,如何做到容易維護是另一個重要的考量,幾乎跟擴展性同樣重要,當問題發生,我們如何及時的診斷和了解問題原因,甚至能夠及時的做出行動,影響系統,控制損失,降低故障級別;
(本人多次在這方面吃虧,經歷了血的教訓,開始把運維工具與功能開發提到同樣的重要級別,確保問題能夠及時發現,甚至提前預警)
成本控制,成本當然也是一個重要的方面,包括開發、維護、培訓和硬件等成本,系統開發完成上線之后,硬件的持續投入會讓成本不斷增加,要讓成本的投入看到效能的成倍增長,同時,根據業務量,伸縮成本的投入,按需開資,不過度設計和過度冗余,導致資源閑置,浪費。
二,小結:
這些原則作為在分布式系統架構設計的基本決策的原則,并不是絕對真理,在實踐當中,有時候會發生沖突和矛盾,需要做出一些犧牲和平衡,例如,在實踐擴展性的時候,會增加維護和開銷成本,甚至會影響可靠性。
不管怎么說,在設計分布式系統的時候,關注這些原則是非常重要的,即使有時候需要做出一些犧牲和平衡,但,這就是技術,這也是生活。
三,參考:
http://www.aosabook.org/en/distsys.html?《Scalable Web Architecture and Distributed Systems》
https://microservices.io/articles/scalecube.html?《The Scale Cube》
原文地址:https://www.cnblogs.com/xguo/p/10549030.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的分布式系统的构建原则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开源 , KoobooJson一款高性能
- 下一篇: 基于ASP.NET Core的模块化设计