分佈式系統的構建原則

什麼是構建一個可維護和可擴展的系統的意義?html

在早期,一個系統的形態,只是知足用戶和服務器資源之間的通道,惟一要擴展和維護的是系統後面的資源,保證資源的可用和夠用,而系統自己的壓力並不大。算法

系統設計跟咱們生活中大多數事情同樣,都須要花時間提早規劃,可以讓咱們的服務長時間在線。因此,咱們瞭解和總結一些大型系統背後的思考和權衡,可以幫助咱們在系統早期作出一些明智和靠譜的決策。服務器

現在,開源組件已經成爲構建一些企業系統的基石,伴隨着行業的發展,最佳實踐和圍繞這些系統架構的指導原則也逐漸顯現出來了,在何時該用什麼樣的技術,須要考慮到哪些方面,各路牛人早有撰文總結。架構

本文簡單回顧一下,咱們在設計一些分佈式系統的時候須要考慮的一些關鍵因素,咱們稱之爲 分佈式系統設計原則運維

 

一,分佈式系統的設計原則

咱們將這些在構建系統須要考慮的因素稱之爲分佈式架構設計原則,以下圖所示,有六個部分,右邊是咱們設計系統要達到的基本要求,包括可用、可靠以及性能,這也是 一個可維護和可擴展系統最大的意義,而左邊是系統設計和開發期間要考慮的三個部分,包括擴展性、維護性和成本控制。分佈式

我把原則分爲倆個大的方面,目標原則 和 實踐原則,工具

 

 

先來看一下目標原則,

站在用戶和公司的角度,要求咱們設計的系統都必需要知足如下幾個原則,特別是互聯網性質的系統,這三個原則都是很是重要的。性能

  1. 可用性,系統的正常在線可用時間,對許多公司的產品聲譽來講是絕對相當重要的指標,例如一些大型的零售商網站,幾分鐘的不可用會致使巨大的損失,久而久之,客戶也會流失殆盡。
    所以,設計這些系統可以長期穩定在線,並有系統必定的容錯能力是當代企業和科技公司必備的基本能力。作到高可用,要在分佈式系統中要求咱們深思熟慮的對一些關鍵組件進行冗餘設計,發生故障時,可以即時恢復,或者優雅降級(降級一般不解決問題,優化用戶體驗的一種妥協的作法);
  2. 可靠性,系統的可靠性,可以保證數據分區後,數據的一致性和持久性,相同的請求同一時間返回一致的數據,數據更新之後用戶可以獲取最新的數據,若是是最終一致,或延遲一致要保證數據的持久性;
  3. 性能,系統性能,因爲用戶和流量的不斷增加,逐漸成爲不少公司關注的另外一個焦點,由於雖然作到可用,但系統響應速度也會直接影響用戶的使用和滿意度,若是是網站的話,也會影響搜索引擎的排名,最終影響用戶的粘度和收益。
    因此,優化系統的響應速度,下降延遲,提升吞吐量,也是很是關鍵的。

知足以上目標原則,咱們要考慮系統的實現,如何來知足以上的目標原則,我把他稱爲 實現原則,可以在不一樣的階段,讓系統都可以適應需求的變化,並在提升成本的狀況下,持續知足以上幾個目標原則。優化

來看一下實現原則:

  1. 擴展性,當今但凡談到分佈式系統,擴展性是首要考慮的一個方面,Google在這方面表現的尤其激進,可讓系統作到無限擴展,例如Spanner,用空間換效率,用規模覆蓋算法的次優選。因此,擴展系統的各個部分,幾乎是達到可用性、可靠性和性能要求的主要手段。
    擴展性涉及系統的方方面面,一般是倆個緯度,scale up 和 scale out,固然,在《The Art Of Scalability》中,提到的Scale Cube,是從三個不一樣緯度來擴展系統,也是擴展的一種方法,稍後單開一篇介紹,這裏就不展開了; 

    網站

  2. 維護性,正所謂,一個系統配套好的運維工具,可以想方設法的彌補和設法繞過系統實現上的缺陷,使得系統總體可用性比較高,相反,會讓系統的任何的問題都會毫無掩蓋的暴露給用戶,沒有任何預警信息,同時也會增長髮現問題和排查問題的成本。
    所以,在設計和實現一個系統的時候,如何作到容易維護是另外一個重要的考量,幾乎跟擴展性一樣重要,當問題發生,咱們如何及時的診斷和了解問題緣由,甚至可以及時的作出行動,影響系統,控制損失,下降故障級別;
    (本人屢次在這方面吃虧,經歷了血的教訓,開始把運維工具與功能開發提到一樣的重要級別,確保問題可以及時發現,甚至提早預警)
  3. 成本控制,成本固然也是一個重要的方面,包括開發、維護、培訓和硬件等成本,系統開發完成上線以後,硬件的持續投入會讓成本不斷增長,要讓成本的投入看到效能的成倍增加,同時,根據業務量,伸縮成本的投入,按需開資,不過分設計和過分冗餘,致使資源閒置,浪費。

二,小結:

這些原則做爲在分佈式系統架構設計的基本決策的原則,並非絕對真理,在實踐當中,有時候會發生衝突和矛盾,須要作出一些犧牲和平衡,例如,在實踐擴展性的時候,會增長維護和開銷成本,甚至會影響可靠性。

無論怎麼說,在設計分佈式系統的時候,關注這些原則是很是重要的,即便有時候須要作出一些犧牲和平衡,但,這就是技術,這也是生活。

三,參考:

  1. http://www.aosabook.org/en/distsys.html 《Scalable Web Architecture and Distributed Systems》
  2. https://microservices.io/articles/scalecube.html 《The Scale Cube》
相關文章
相關標籤/搜索