可扩展架构的基本思想和模式
极客时间:《从 0 开始学架构》:可扩展架构的基本思想和模式
软件系统与硬件、建筑系统的差异在于软件是可扩展的。通过修改和扩展,不断地让软件系统具备更多的功能和特性,满足新的需求或者顺应技术发展的趋势。改动的地方越多,投入也越大,出错的可能性也越大。因此,如何避免扩展时改动范围太大,是软件架构可扩展性设计的主要思考点。
1、可扩展的基本思想
一个字:拆
拆,就是将原本大一统的系统拆分成多个规模小的部分,扩展时只修改其中一部分即可,无须整个系统到处都改,通过这种方式来减少改动范围,降低改动风险。
按照不同的思路来拆分软件系统,就会得到不同的架构。常见的拆分思路有如下三种。
- 面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分。
- 面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。
- 面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。
从范围上来看,从大到小依次为:流程 > 服务 > 功能
不同的拆分方式,本质上决定了系统的扩展方式
2、可扩展方式
由于新人老人,团队成员水平参差不齐,合理的拆分,能够强制保证即使程序员出错,出错的范围也不会太广,影响也不会太大。
下面是不同拆分方式应对扩展时的优势。
- 面向流程拆分
扩展时大部分情况只需要修改某一层,少部分情况可能修改关联的两层,不会出现所有层都同时要修改。
- 面向服务拆分
对某个服务扩展,或者要增加新的服务时,只需要扩展相关服务即可,无须修改所有的服务。
- 面向功能拆分
对某个功能扩展,或者要增加新的功能时,只需要扩展相关功能即可,无须修改所有的服务。
不同的拆分方式,将得到不同的系统架构,典型的可扩展系统架构有:
- 面向流程拆分:分层架构。
- 面向服务拆分:SOA、微服务。
- 面向功能拆分:微内核架构。
PS:
规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。
规则引擎是将业务决策与业务分离,它提供的还是决策功能,因此,规则引擎应该属于面向功能的