文章图片
文章图片
文章图片
文章图片
\">【客户端|复杂任务中,流程的解耦设计】一、业务场景在系统开发的过程中 , 必然存在耗时极高的动作 , 是基于请求响应模式无法解决的问题 , 通常会采用解耦的思维 , 并基于异步或者事件驱动的方式去调度整个流程的完整执行;
复杂流程 , 得一步异步地来;
文件任务:在系统解析大文件数据时 , 在获取任务之后 , 会异步处理后续文件读写流程;
中间表:执行复杂场景的数据分析时 , 收集完待分析的对象之后 , 会并发执行各个维度的采集动作 , 并依次将数据写入临时的中间表中 , 方便数据查询动作;
在上述场景中 , 基于单次请求响应无法执行整个过程 , 必须对流程分段分步和异步推进 , 在流程中根据场景去判断 , 是异步有序驱动 , 还是异步并发处理 , 并基于各个节点的执行状态判断动作是否成功 。
二、任务管理复杂任务的执行周期相对偏长 , 要确保稳定的执行则需要对任务做精细的设计和管理 , 通常会基于如下几个因素去描述任务:
- 场景:定义任务的主题场景 , 便于将多种任务做统一管理和调度 , 例如:文件、数据、报表等;
- 计划:对任务做好步骤的拆分 , 并制定和推进相应的执行计划 , 例如:有序调度、并发执行等;
- 状态:针对任务和节点的执行计划 , 都要提供细节的状态定义 , 例如:开始/结束 , 进行中/已完成 , 成功/失败等;
三、设计思路1、同步请求响应服务之间的通信模式一般分为:同步和异步两种;同步是指在请求端发出动作之后 , 会一直等待响应端完成 , 或者响应超时导致熔断 , 即在一次请求调用中耦合所有的处理流程;
服务中大部分的请求都是同步响应模式 , 可以提高系统的响应速度;但是在分布式中 , 首先要控制超时熔断的时间 , 避免在流量高峰期请求堆积 , 拖垮整个服务;另外对于被大量调用的公共服务 , 要提高并发的支撑能力 , 降低对请求链路的性能影响 。
2、异步解耦模式异步模式的最大优点就是实现请求和响应的完全解耦 , 任务只需要触发一次开始动作 , 后续的流程就会逐步地推进直到结束;各个服务节点处理逻辑不会受到整个请求链路的耗时限制;
实现异步有多种方式 , 例如:请求回调、发布订阅、Broker代理等;在之前异步章节中有详细描述 , 这里不再赘述;异步消除了服务节点之间的依赖关系 , 但是也同样提高了流程的复杂性;
3、事件驱动设计事件驱动是一个抽象的概念 , 即通过事件的方式实现多个服务间的协同 , 驱动整个流程的处理逻辑;在业务层面是一种设计思想 , 在技术层面通常采用发布订阅的方式 , 同样也可以消除服务间的强依赖关系;
事件和异步在模式上很类似 , 事件驱动在设计上更加精细 , 例如在订单场景中:将订单的状态变化作为一个事件 , 服务间通过消息传递的方式 , 依次处理库存服务、物流服务等;由于事件携带了一定的业务信息和状态 , 流程解耦更加彻底的同时复杂度也会更高 。
四、实践总结1、结构设计在结构设计中围绕任务、节点、数据三个核心要素 , 以确保对任务的执行过程有完整的跟踪和管理 , 实现对任务的节点及相关的操作 , 具备执行重试或者直接取消撤回的控制;
状态管理是一项很复杂的工作 , 要衡量任务中各个状态标识是否合理 , 就要实时监控状态的变化 , 并且基于各种极端情况去验证流程 , 例如:重试设计、任务取消、任务暂停 。
- 客户端|外国感叹:中国互联网发展速度实在是太快!
- 客户端|盘点闲鱼上五花八门的“灰色产品”,网友:“这是可以卖的吗?”
- 客户端|联想好日子到头了?我一点也不意外
- 客户端|中兴机皇Axon 40 ultra或有屏下摄像头手机!能不能借此破圈?
- 客户端|盘点各大品牌让人眼前一亮的旗舰机型
- 客户端|杭州马某某网络活动危害国家安全,排除马云马晓霖?阿里股价暴跌
- 客户端|价格崩坏,尼康Z系列微单缺货涨价,Z5单机都要12000元了
- 客户端|千万别选128G的手机, 不够用
- 客户端|OPPO K10系列首销开门红,《雾山五行》联名礼盒大获好评
- 客户端|国产厂商海外集体“拉胯”!真我大杀四方,有望接班华为