业务系统
架构设计原则
基础架构
分布式事务
- 分段事务,将一个大任务分成多个小任务,每个小任务开启事务
- 状态流转方式,执行成功完每个任务都要记录相应的状态
- 数据最终一致性,重试+幂等(实现幂等有很多比如说幂等记录、业务记录增加一个状态字段)技术,特殊情况还支持回退操作(对操作成功的任务回滚)
- 每个任务可以使用唯一索引、分布式锁、CAS等来保证操作唯一性,避免并发修改
分布式数据库特性
- 支持MySQL,MariaDB,MongoDB等数据库
- 服务高可用,主库故障,从库自动切换
- 主库负责写操作,从库负责读操作,主库通过bin log日志同步给从库
- 数据库支持水平和垂直拆分,无缝迁移扩容
.
规则引擎
使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本。
现在市面上比较流行几个规则引擎又Drools、easy rule、QlExpress等。规则引擎的思想就是Condition->Action,一个规则定义多个condition,每个condition都对应一个action,多个规则操作公共的上下文context。
现在以电商优惠系统为例,展开说明规则引擎在其中的应用。
电商优惠类型分为以下几个:
1.满减促销
2.单品促销
3.套装促销
4.多买优惠
5.赠品促销
6.定金促销
7.优惠券促销
每一个优惠类型都对应一种规则
以满减促销为例
rule "满减促销"
when 订单金额 > 600
then 优惠金额=50;
when 订单金额 > 200
then 优惠金额=10;
end
规则与规则之间如何执行,这个涉及到规则属性的定义,用于修改和增强标准的规则行为。
优先级(salience):可以设置规则执行顺序,优先级高的优先执行
同步分组(agenda-group): 同一个分组的规则要么都执行要么都不执行
互斥分组(activation-group):同一个分组只有一条被执行,其他不执行
(如何执行过的回滚?这边留个疑问)