What
可扩展性指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或者仅需要少量修改就可以支持,无须整个系统重构或者重建。
Why
伴随着业务的发展,能够快速响应业务变化,并最大程度降低对现有系统的影响,是设计可扩展性好架构的主要目的。
Theory
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。
预测变化的复杂性
- 不能每个设计点都考虑可扩展性
- 不能完全不考虑可扩展性
- 所有的预测都存在出错的可能性
How
业务维度
- 对业务深入理解,对业务的发展方法进行预判
技术维度
- 应对变化
- 将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”
- 提炼出一个“抽象层”和一个“实现层”
- 降低模块间的耦合度
- 分布式服务框架
- 分布式消息队列
可扩展的基本思想
拆,就是将原本大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险。
常见的拆分思路有如下三种
- 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。
- 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。
- 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。
各种XX性比较
- 可扩展性:代码完成之后,要在原来的基础上增加新功能,只需要添加添加该功能的代码,不需要或需要少量修改原来的代码,对之前的代码没有影响,这就是可扩展
- 可维护性:指软件产品被修改的能力,修改包括纠正、改进或软件对环境、需求和功能规格说明变化的适应。代码完成之后,如果要修改部分功能,需要修改的地方很少,就是容易维护
- 可复用性:代码完成之后,以后开发中可以复用部分代码,提高效率,就是复用性强
- 灵活性:代码完成之后,使用的地方可以通过多种方式来调用该部分的代码,这就是灵活性好