业务架构和引擎架构
今年H2在重构我们的分单引擎,简答总结一下。这里面一个很重要的认知是:引擎的设计思路,和业务架构的设计思路,确实有很大区别。
首先什么是引擎?它和普通的业务模块有什么区别?
什么是引擎?
其实没有严格的定义,可以从下面几个方面去归纳:
- 一个独立的功能单元,并且是核心的功能单元;【那跟系统或者模块什么区别?】
- 引擎,更强调于外部状态和规则的输入,一个引擎要工作由三部分构成:状态输入、规则输入、引擎内核;引擎执行的结果往往也是驱动外部状态的流转;
- 而系统,更多的是分装,比如:定价、订单,封装了一个完整的功能,更侧重于对输入、输出的抽象,和内部模型的建设。
引擎架构的区别在哪儿?
我们之前的引擎,更像是以封装来主导,这是业务系统设计的核心思路,比如:
- 定价系统:封装了一个定价能力
- 支付系统:封装了一个支付能力
业务系统要尽可能理清楚自己抽象出来的功能边界,然后封装一个好的抽象模型,具备适当的通用能力。
但对于引擎,特别对于长状态的引擎,设计思路更多的是要思考如何拆分成灵活的节点,让节点更好的具备编排能力,以适应外部状态、规则的灵活变化
简单画个图:
如果这个系统定位成引擎,更多是要思考:如何使其灵活的应对规则的灵活变化,可以按照所在领域的状态对齐进行拆分; 比较通用的设计思路是:
- 引擎上下文,对输入进行抽象
- 引入场景化,对输入和规则进行mapping
- 引入特征中心,以适应各种规则的条件注入