目录
可扩展性
定义:
可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。
how:
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。
预测变化的复杂性源头:
1.不能每个设计点都考虑可扩展性。
2.不能完全不考虑可扩展性。
所有的预测都存在出错的可能性。把握预测的程度和提升预测结果的准确性,是一件很复杂的事情,而且没有通用的标准可以简单套上去,更多是靠自己的经验、直觉,没有明确标准,不同的人理解和判断有偏差,而最终又只能选择一个判断。
在准确预测变化的前提下,如何应对?
一般分为两种形式:
1:变化层--》稳定层 例如,如果系统需要支持 XML、JSON、ProtocolBuffer 三种接入方式
2. 稳定层--》变化层 例如,如果系统需要支持 MySQL、Oracle、DB2 数据库存储
具体需要根据具体业务情况来设计。不变的是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层” 。
两个主要的复杂性相关的问题
因此,出现两个主要的复杂性相关的问题:
1 系统需要拆分出变化层和稳定层
对于哪些属于变化层,哪些属于稳定层,很多时候并不是像前面的示例(不同接口协议或者不同数据库)那样明确,不同的人有不同的理解,导致架构设计评审的时候可能吵翻天。