版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/piqianming/article/details/81976358
关于同步异步混合系统设计的一点思考
本系统设计的异步同步混用的场景,在设计时,首先一点就是能够将整体的处理逻辑进行拆分成小单元,然后再将小单元打乱重排,保证串行和并行的合理性,串行前后单元的依赖关系,避免并发过程中状态的相互依赖。
-
串行的场景
如上图,串行的场景是一个较为简单的实现方式,为了降低业务改造的难度,并行化的过程也可以串行话解决。
1.接收处理,状态为初始化的状态,这是一个系统的入口
2.状态A,状态B,状态C就是处理事件A,事件B,事件C的三个不同阶段所对应的状态,处理,A,B,C三个时间的结果只有三种,要么就是可以update状态重新跑一下的异常,要么就是成功后轮转到下一个状态,要么就是失败(这种就是终态,不可逆的情况)
3.处理A,B,C的的核心接口是一个对外的方法,至于说调用处理相应事件的方式,可以基于业务考虑。可以是定时任务,可以是人工审核,可以是异步消息处理。
针对上边的描述,在接口设计时,主要提供一下几个接口以实现核心逻辑:
- create : 受理某个事情的总入口
- processA : 处理A事情的入口
- processB : 处理B事情的入口
- processC : 处理C事情的入口
- query : 提供查询方案
- modify : 提供底层变更接口,上层可以基于业务逻辑,控住状态的变更方向
-
串并行的场景
串并行的场景是深刻剖析业务逻辑,在拆分业务时,能够清晰把握前后依赖关系的一种思路。如下是串并行状态流程图:
串行的场景中,对于状态的流转同样也是串行的,因此一个字段就可以满足要求,但是,并行化后,一个字段显然无法满足这种需求。
所以针对并行化的B分支和C分支需要单独设置状态,至于说串行的A分支可以在B,C的状态上进行变更操作。
另外需要注意的一点:并行化的操作需要同一记录进行锁操作。