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