What
可擴展性指系統為了應對將來需求變化而提供的一種擴展能力,當有新的需求出現時,系統不需要或者僅需要少量修改就可以支持,無須整個系統重構或者重建。
Why
伴隨着業務的發展,能夠快速響應業務變化,並最大程度降低對現有系統的影響,是設計可擴展性好架構的主要目的。
Theory
設計具備良好可擴展性的系統,有兩個基本條件:正確預測變化、完美封裝變化。
預測變化的復雜性
- 不能每個設計點都考慮可擴展性
- 不能完全不考慮可擴展性
- 所有的預測都存在出錯的可能性
How
業務維度
- 對業務深入理解,對業務的發展方法進行預判
技術維度
- 應對變化
- 將“變化”封裝在一個“變化層”,將不變的部分封裝在一個獨立的“穩定層”
- 提煉出一個“抽象層”和一個“實現層”
- 降低模塊間的耦合度
- 分布式服務框架
- 分布式消息隊列
可擴展的基本思想
拆,就是將原本大一統的系統拆分成多個規模小的部分,擴展時只修改其中一部分即可,無須整個系統到處都改,通過這種方式來減少改動范圍,降低改動風險。
常見的拆分思路有如下三種
- 面向流程拆分:將整個業務流程拆分為幾個階段,每個階段作為一部分。
- 面向服務拆分:將系統提供的服務拆分,每個服務作為一部分。
- 面向功能拆分:將系統提供的功能拆分,每個功能作為一部分。
各種XX性比較
- 可擴展性:代碼完成之后,要在原來的基礎上增加新功能,只需要添加添加該功能的代碼,不需要或需要少量修改原來的代碼,對之前的代碼沒有影響,這就是可擴展
- 可維護性:指軟件產品被修改的能力,修改包括糾正、改進或軟件對環境、需求和功能規格說明變化的適應。代碼完成之后,如果要修改部分功能,需要修改的地方很少,就是容易維護
- 可復用性:代碼完成之后,以后開發中可以復用部分代碼,提高效率,就是復用性強
- 靈活性:代碼完成之后,使用的地方可以通過多種方式來調用該部分的代碼,這就是靈活性好