什麼是構建一個可維護和可擴充套件的系統的意義?
在早期,一個系統的形態,只是滿足使用者和伺服器資源之間的通道,唯一要擴充套件和維護的是系統後面的資源,保證資源的可用和夠用,而系統本身的壓力並不大。
系統設計跟我們生活中大多數事情一樣,都需要花時間提前規劃,能夠讓我們的服務長時間線上。所以,我們瞭解和總結一些大型系統背後的思考和權衡,能夠幫助我們在系統早期做出一些明智和靠譜的決策。
如今,開源元件已經成為構建一些企業系統的基石,伴隨著行業的發展,最佳實踐和圍繞這些系統架構的指導原則也逐漸顯現出來了,在什麼時候該用什麼樣的技術,需要考慮到哪些方面,各路牛人早有撰文總結。
本文簡單回顧一下,我們在設計一些分散式系統的時候需要考慮的一些關鍵因素,我們稱之為 分散式系統設計原則。
一,分散式系統的設計原則
我們將這些在構建系統需要考慮的因素稱之為分散式架構設計原則,如下圖所示,有六個部分,右邊是我們設計系統要達到的基本要求,包括可用、可靠以及效能,這也是 一個可維護和可擴充套件系統最大的意義
,而左邊是系統設計和開發期間要考慮的三個部分,包括擴充套件性、維護性和成本控制。
我把原則分為倆個大的方面,標的原則 和 實踐原則,
先來看一下標的原則,
站在使用者和公司的角度,要求我們設計的系統都必須要滿足以下幾個原則,特別是網際網路性質的系統,這三個原則都是非常重要的。
-
可用性,系統的正常線上可用時間,對許多公司的產品聲譽來說是絕對至關重要的指標,例如一些大型的零售商網站,幾分鐘的不可用會導致巨大的損失,長此以往,客戶也會流失殆盡。
因此,設計這些系統能夠長期穩定線上,並有系統一定的容錯能力是當代企業和科技公司必備的基本能力。做到高可用,要在分散式系統中要求我們深思熟慮的對一些關鍵元件進行冗餘設計,發生故障時,能夠即時恢復,或者優雅降級(降級通常不解決問題,最佳化使用者體驗的一種妥協的做法); -
可靠性,系統的可靠性,能夠保證資料分割槽後,資料的一致性和永續性,相同的請求同一時間傳回一致的資料,資料更新以後使用者能夠獲取最新的資料,如果是最終一致,或延遲一致要保證資料的永續性;
-
效能,系統效能,由於使用者和流量的不斷增長,逐漸成為很多公司關註的另一個焦點,因為雖然做到可用,但系統響應速度也會直接影響使用者的使用和滿意度,如果是網站的話,也會影響搜尋引擎的排名,最終影響使用者的粘度和收益。
所以,最佳化系統的響應速度,降低延遲,提高吞吐量,也是非常關鍵的。
滿足以上標的原則,我們要考慮系統的實現,如何來滿足以上的標的原則,我把他稱為 實現原則,能夠在不同的階段,讓系統都能夠適應需求的變化,併在提高成本的情況下,持續滿足以上幾個標的原則。
來看一下實現原則:
-
擴充套件性,當今但凡談到分散式系統,擴充套件性是首要考慮的一個方面,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