分布式 - 系統(tǒng)構(gòu)建原則

什么是構(gòu)建一個可維護和可擴展的系統(tǒng)的意義?

在早期,一個系統(tǒng)的形態(tài),只是滿足用戶和服務器資源之間的通道,唯一要擴展和維護的是系統(tǒng)后面的資源,保證資源的可用和夠用,而系統(tǒng)本身的壓力并不大。

系統(tǒng)設計跟我們生活中大多數(shù)事情一樣,都需要花時間提前規(guī)劃,能夠讓我們的服務長時間在線。所以,我們了解和總結(jié)一些大型系統(tǒng)背后的思考和權(quán)衡,能夠幫助我們在系統(tǒng)早期做出一些明智和靠譜的決策。

如今,開源組件已經(jīng)成為構(gòu)建一些企業(yè)系統(tǒng)的基石,伴隨著行業(yè)的發(fā)展,最佳實踐和圍繞這些系統(tǒng)架構(gòu)的指導原則也逐漸顯現(xiàn)出來了,在什么時候該用什么樣的技術(shù),需要考慮到哪些方面,各路牛人早有撰文總結(jié)。

本文簡單回顧一下,我們在設計一些分布式系統(tǒng)的時候需要考慮的一些關(guān)鍵因素,我們稱之為 分布式系統(tǒng)設計原則。

一,分布式系統(tǒng)的設計原則

我們將這些在構(gòu)建系統(tǒng)需要考慮的因素稱之為分布式架構(gòu)設計原則,如下圖所示,有六個部分,右邊是我們設計系統(tǒng)要達到的基本要求,包括可用、可靠以及性能,這也是 一個可維護和可擴展系統(tǒng)最大的意義,而左邊是系統(tǒng)設計和開發(fā)期間要考慮的三個部分,包括擴展性、維護性和成本控制。

我把原則分為倆個大的方面,目標原則實踐原則

先來看一下目標原則,

站在用戶和公司的角度,要求我們設計的系統(tǒng)都必須要滿足以下幾個原則,特別是互聯(lián)網(wǎng)性質(zhì)的系統(tǒng),這三個原則都是非常重要的。

  1. 可用性,系統(tǒng)的正常在線可用時間,對許多公司的產(chǎn)品聲譽來說是絕對至關(guān)重要的指標,例如一些大型的零售商網(wǎng)站,幾分鐘的不可用會導致巨大的損失,長此以往,客戶也會流失殆盡。
    因此,設計這些系統(tǒng)能夠長期穩(wěn)定在線,并有系統(tǒng)一定的容錯能力是當代企業(yè)和科技公司必備的基本能力。做到高可用,要在分布式系統(tǒng)中要求我們深思熟慮的對一些關(guān)鍵組件進行冗余設計,發(fā)生故障時,能夠即時恢復,或者優(yōu)雅降級(降級通常不解決問題,優(yōu)化用戶體驗的一種妥協(xié)的做法);
  2. 可靠性,系統(tǒng)的可靠性,能夠保證數(shù)據(jù)分區(qū)后,數(shù)據(jù)的一致性和持久性,相同的請求同一時間返回一致的數(shù)據(jù),數(shù)據(jù)更新以后用戶能夠獲取最新的數(shù)據(jù),如果是最終一致,或延遲一致要保證數(shù)據(jù)的持久性;
  3. 性能,系統(tǒng)性能,由于用戶和流量的不斷增長,逐漸成為很多公司關(guān)注的另一個焦點,因為雖然做到可用,但系統(tǒng)響應速度也會直接影響用戶的使用和滿意度,如果是網(wǎng)站的話,也會影響搜索引擎的排名,最終影響用戶的粘度和收益。
    所以,優(yōu)化系統(tǒng)的響應速度,降低延遲,提高吞吐量,也是非常關(guān)鍵的。

滿足以上目標原則,我們要考慮系統(tǒng)的實現(xiàn),如何來滿足以上的目標原則,我把他稱為 實現(xiàn)原則,能夠在不同的階段,讓系統(tǒng)都能夠適應需求的變化,并在提高成本的情況下,持續(xù)滿足以上幾個目標原則。

來看一下實現(xiàn)原則:

  1. 擴展性,當今但凡談到分布式系統(tǒng),擴展性是首要考慮的一個方面,Google在這方面表現(xiàn)的尤為激進,可以讓系統(tǒng)做到無限擴展,例如Spanner,用空間換效率,用規(guī)模覆蓋算法的次優(yōu)選。所以,擴展系統(tǒng)的各個部分,幾乎是達到可用性、可靠性和性能要求的主要手段。
    擴展性涉及系統(tǒng)的方方面面,通常是倆個緯度,scale up 和 scale out,當然,在《The Art Of Scalability》中,提到的Scale Cube,是從三個不同緯度來擴展系統(tǒng),也是擴展的一種方法,稍后單開一篇介紹,這里就不展開了;


    image.png
  2. 維護性,正所謂,一個系統(tǒng)配套好的運維工具,能夠千方百計的彌補和設法繞過系統(tǒng)實現(xiàn)上的缺陷,使得系統(tǒng)整體可用性比較高,相反,會讓系統(tǒng)的任何的問題都會毫無掩蓋的暴露給用戶,沒有任何預警信息,同時也會增加發(fā)現(xiàn)問題和排查問題的成本。
    因此,在設計和實現(xiàn)一個系統(tǒng)的時候,如何做到容易維護是另一個重要的考量,幾乎跟擴展性同樣重要,當問題發(fā)生,我們?nèi)绾渭皶r的診斷和了解問題原因,甚至能夠及時的做出行動,影響系統(tǒng),控制損失,降低故障級別;
    (本人多次在這方面吃虧,經(jīng)歷了血的教訓,開始把運維工具與功能開發(fā)提到同樣的重要級別,確保問題能夠及時發(fā)現(xiàn),甚至提前預警)
  3. 成本控制,成本當然也是一個重要的方面,包括開發(fā)、維護、培訓和硬件等成本,系統(tǒng)開發(fā)完成上線之后,硬件的持續(xù)投入會讓成本不斷增加,要讓成本的投入看到效能的成倍增長,同時,根據(jù)業(yè)務量,伸縮成本的投入,按需開資,不過度設計和過度冗余,導致資源閑置,浪費。

二,小結(jié):

這些原則作為在分布式系統(tǒng)架構(gòu)設計的基本決策的原則,并不是絕對真理,在實踐當中,有時候會發(fā)生沖突和矛盾,需要做出一些犧牲和平衡,例如,在實踐擴展性的時候,會增加維護和開銷成本,甚至會影響可靠性。

不管怎么說,在設計分布式系統(tǒng)的時候,關(guān)注這些原則是非常重要的,即使有時候需要做出一些犧牲和平衡,但,這就是技術(shù),這也是生活。

三,參考:

  1. http://www.aosabook.org/en/distsys.html 《Scalable Web Architecture and Distributed Systems》
  2. https://microservices.io/articles/scalecube.html 《The Scale Cube》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容