什麼是構建一個可維護和可擴展的系統的意義?html
在早期,一個系統的形態,只是知足用戶和服務器資源之間的通道,惟一要擴展和維護的是系統後面的資源,保證資源的可用和夠用,而系統自己的壓力並不大。算法
系統設計跟咱們生活中大多數事情同樣,都須要花時間提早規劃,可以讓咱們的服務長時間在線。因此,咱們瞭解和總結一些大型系統背後的思考和權衡,可以幫助咱們在系統早期作出一些明智和靠譜的決策。服務器
現在,開源組件已經成爲構建一些企業系統的基石,伴隨着行業的發展,最佳實踐和圍繞這些系統架構的指導原則也逐漸顯現出來了,在何時該用什麼樣的技術,須要考慮到哪些方面,各路牛人早有撰文總結。架構
本文簡單回顧一下,咱們在設計一些分佈式系統的時候須要考慮的一些關鍵因素,咱們稱之爲 分佈式系統設計原則。運維
咱們將這些在構建系統須要考慮的因素稱之爲分佈式架構設計原則,以下圖所示,有六個部分,右邊是咱們設計系統要達到的基本要求,包括可用、可靠以及性能,這也是 一個可維護和可擴展系統最大的意義
,而左邊是系統設計和開發期間要考慮的三個部分,包括擴展性、維護性和成本控制。分佈式
我把原則分爲倆個大的方面,目標原則 和 實踐原則,工具
站在用戶和公司的角度,要求咱們設計的系統都必需要知足如下幾個原則,特別是互聯網性質的系統,這三個原則都是很是重要的。性能
知足以上目標原則,咱們要考慮系統的實現,如何來知足以上的目標原則,我把他稱爲 實現原則,可以在不一樣的階段,讓系統都可以適應需求的變化,並在提升成本的狀況下,持續知足以上幾個目標原則。優化
擴展性,當今但凡談到分佈式系統,擴展性是首要考慮的一個方面,Google在這方面表現的尤其激進,可讓系統作到無限擴展,例如Spanner,用空間換效率,用規模覆蓋算法的次優選。因此,擴展系統的各個部分,幾乎是達到可用性、可靠性和性能要求的主要手段。
擴展性涉及系統的方方面面,一般是倆個緯度,scale up 和 scale out,固然,在《The Art Of Scalability》中,提到的Scale Cube,是從三個不一樣緯度來擴展系統,也是擴展的一種方法,稍後單開一篇介紹,這裏就不展開了;
網站
這些原則做爲在分佈式系統架構設計的基本決策的原則,並非絕對真理,在實踐當中,有時候會發生衝突和矛盾,須要作出一些犧牲和平衡,例如,在實踐擴展性的時候,會增長維護和開銷成本,甚至會影響可靠性。
無論怎麼說,在設計分佈式系統的時候,關注這些原則是很是重要的,即便有時候須要作出一些犧牲和平衡,但,這就是技術,這也是生活。