网易首页 > 网易号 > 正文 申请入驻

复杂任务中,流程的解耦设计

0
分享至

  • 复杂流程,得一步异步地来;
一、业务场景

在系统开发的过程中,必然存在耗时极高的动作,是基于请求响应模式无法解决的问题,通常会采用解耦的思维,并基于异步或者事件驱动的方式去调度整个流程的完整执行;

文件任务:在系统解析大文件数据时,在获取任务之后,会异步处理后续文件读写流程;

中间表:执行复杂场景的数据分析时,收集完待分析的对象之后,会并发执行各个维度的采集动作,并依次将数据写入临时的中间表中,方便数据查询动作;

在上述场景中,基于单次请求响应无法执行整个过程,必须对流程分段分步和异步推进,在流程中根据场景去判断,是异步有序驱动,还是异步并发处理,并基于各个节点的执行状态判断动作是否成功。

二、任务管理

复杂任务的执行周期相对偏长,要确保稳定的执行则需要对任务做精细的设计和管理,通常会基于如下几个因素去描述任务:

  • 场景:定义任务的主题场景,便于将多种任务做统一管理和调度,例如:文件、数据、报表等;
  • 计划:对任务做好步骤的拆分,并制定和推进相应的执行计划,例如:有序调度、并发执行等;
  • 状态:针对任务和节点的执行计划,都要提供细节的状态定义,例如:开始/结束,进行中/已完成,成功/失败等;

设计合理的任务结构,以便更高效地管理流程,根据主题场景做任务分类,添加相应的执行计划,根据状态跟踪任务执行过程,并对失败动作进行捕捉和重试;

三、设计思路

1、同步请求响应

服务之间的通信模式一般分为:同步和异步两种;同步是指在请求端发出动作之后,会一直等待响应端完成,或者响应超时导致熔断,即在一次请求调用中耦合所有的处理流程;

服务中大部分的请求都是同步响应模式,可以提高系统的响应速度;但是在分布式中,首先要控制超时熔断的时间,避免在流量高峰期请求堆积,拖垮整个服务;另外对于被大量调用的公共服务,要提高并发的支撑能力,降低对请求链路的性能影响。

2、异步解耦模式

异步模式的最大优点就是实现请求和响应的完全解耦,任务只需要触发一次开始动作,后续的流程就会逐步地推进直到结束;各个服务节点处理逻辑不会受到整个请求链路的耗时限制;

实现异步有多种方式,例如:请求回调、发布订阅、Broker代理等;在之前异步章节中有详细描述,这里不再赘述;异步消除了服务节点之间的依赖关系,但是也同样提高了流程的复杂性;

3、事件驱动设计

事件驱动是一个抽象的概念,即通过事件的方式实现多个服务间的协同,驱动整个流程的处理逻辑;在业务层面是一种设计思想,在技术层面通常采用发布订阅的方式,同样也可以消除服务间的强依赖关系;

事件和异步在模式上很类似,事件驱动在设计上更加精细,例如在订单场景中:将订单的状态变化作为一个事件,服务间通过消息传递的方式,依次处理库存服务、物流服务等;由于事件携带了一定的业务信息和状态,流程解耦更加彻底的同时复杂度也会更高。

四、实践总结

1、结构设计

在结构设计中围绕任务、节点、数据三个核心要素,以确保对任务的执行过程有完整的跟踪和管理,实现对任务的节点及相关的操作,具备执行重试或者直接取消撤回的控制;

状态管理是一项很复杂的工作,要衡量任务中各个状态标识是否合理,就要实时监控状态的变化,并且基于各种极端情况去验证流程,例如:重试设计、任务取消、任务暂停。

2、高并发管理

任务型的场景加上复杂的管理流程,执行时间自然也很长,如果场景中涉及到大文件的解析、或者数据调度,自然会引入任务分割与并发执行的机制;

比较常用的思路:根据任务调度的集群数,对数据核心编号进行哈希计算,可以采用取模和分段两种算法,然后基于多线程的方式并发处理各自服务内的分管任务。

3、管理模型

不管是观察者模式,或者发布订阅模型,又或者说事件驱动设计,都可以理解为生产/消费的关系模型,围绕生产、存储、消费三个节点做管理;

  • 生产端:负责创建具体的消息主体,在总线模式中,通常将消息进行入库存储,然后再执行队列推送,并跟踪该过程的状态变化,保证库和队列的一致性;
  • 消息体:描述动作的发布方和消费方,关键的状态信息变化,唯一标识和创建时间及版本,其余则根据场景需要定义即可;
  • 消费端:在消费时要关注的核心问题就是失败重试,要避免重试机制引起数据不一致的问题,可以对消费进行加锁或者消息状态校验,以实现幂等的效果;
  • 存储端:通常采用数据库和消息中间件双存储的模式,并且需要保证二者动作的同时成功或者失败,顺序为先入库再执行队列推送;

整个模型在设计思路上比较合理,但是架构的复杂性也变得很高,比如数据一致性问题、状态机制、事务、幂等性、流程中断等;整个链路需要详细的追踪记录并且可视化管理,开发补偿动作的接口,用来及时解决可能出现的突发问题。

4、组件案例

Spring框架本身就极具复杂度,这里单看事件模型的设计,包含三个核心角色:事件、发布、监听;与观察者设计模式在理念上相同;

事件:ApplicationEvent基础抽象类继承自JDK中EventObject类,具体事件要继承该类;source事件源,timestamp发生的系统时间;

发布者:Spring定义的顶级接口ApplicationEventPublisher,提供事件发布的能力;

监听者:实现JDK中顶级接口EventListener,Spring扩展了多种事件监听器,以实现各种场景的需求,例如:有序无序、同步异步等;

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
武统得不到光刻机?台积电暗示自毁,荷兰远程破坏,给中国留废铁

武统得不到光刻机?台积电暗示自毁,荷兰远程破坏,给中国留废铁

影孖看世界
2024-05-23 01:20:02
美国初请失业救济人数创下去年9月以来最大连降纪录

美国初请失业救济人数创下去年9月以来最大连降纪录

财联社
2024-05-23 20:52:07
国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

国运来了挡都挡不住?俄乌战争最起码给中国又争取了五年时间

曾经年少
2024-03-05 11:38:53
京东员工内网留言“什么时候被pdd收购”被辞退,仅转正12天

京东员工内网留言“什么时候被pdd收购”被辞退,仅转正12天

数码圈麻辣烫
2024-05-23 08:03:07
珠峰近顶处路段塌陷致2人遇难,亲历者:坠落者没系安全绳

珠峰近顶处路段塌陷致2人遇难,亲历者:坠落者没系安全绳

重案组37号
2024-05-24 20:32:12
《狐妖小红娘》:37岁杨幂吃红薯,戳穿了多少“戏混子”的体面

《狐妖小红娘》:37岁杨幂吃红薯,戳穿了多少“戏混子”的体面

糊咖娱乐
2024-05-24 18:04:59
斗殴失败后,赖清德召集万人包围台立法机构,韩国瑜展现铁腕手段

斗殴失败后,赖清德召集万人包围台立法机构,韩国瑜展现铁腕手段

美食阿鳕
2024-05-24 02:39:47
2018年,那个检举男友一家贪腐的女子,两年后,自己也被判刑3年

2018年,那个检举男友一家贪腐的女子,两年后,自己也被判刑3年

可乐86
2024-05-16 09:12:38
刘汉承包绵阳机场,地头蛇王永成从中作梗,第二天就被灭门

刘汉承包绵阳机场,地头蛇王永成从中作梗,第二天就被灭门

纸鸢奇谭
2024-05-15 12:21:33
2-0!突然退赛!40+5+2,东决正式结束

2-0!突然退赛!40+5+2,东决正式结束

篮球教学论坛
2024-05-24 11:06:43
突发! 澳洲首例人类感染! 新疫情全球爆发, 比新冠严重100倍: 千万别吃生鸡蛋

突发! 澳洲首例人类感染! 新疫情全球爆发, 比新冠严重100倍: 千万别吃生鸡蛋

灰产圈
2024-05-24 00:08:57
美国放出狠话:若中国“武力收台”,美军会马上摧毁中国核武器库

美国放出狠话:若中国“武力收台”,美军会马上摧毁中国核武器库

奇点使者
2024-03-19 20:10:03
两性关系:夫妻亲嘴已经过时了,现在都流行亲这几个地方

两性关系:夫妻亲嘴已经过时了,现在都流行亲这几个地方

娱乐洞察点点
2024-05-24 15:04:16
可惜,浪费了这个好演员

可惜,浪费了这个好演员

小片片说大片
2024-05-23 19:36:17
签运不佳首轮对阵兹维列夫,纳达尔最后一届法网能走多远

签运不佳首轮对阵兹维列夫,纳达尔最后一届法网能走多远

澎湃新闻
2024-05-24 07:54:28
联盟第1!历史第1!NBA最强王炸组合诞生,华子要逆天改命

联盟第1!历史第1!NBA最强王炸组合诞生,华子要逆天改命

世界体育圈
2024-05-24 16:48:12
河南64岁大爷五年间染指55名女性,只因太了解女性心理

河南64岁大爷五年间染指55名女性,只因太了解女性心理

真实故事汇
2024-05-06 13:31:30
大衣哥朱之文儿媳闹离婚,原因曝光:2个人的床,怎么能睡6个人!

大衣哥朱之文儿媳闹离婚,原因曝光:2个人的床,怎么能睡6个人!

夜听訫语
2021-12-10 21:51:46
太突然了!细心的网友发现5月21日多名百万网红被全网封号

太突然了!细心的网友发现5月21日多名百万网红被全网封号

Mon巧的时尚品味
2024-05-22 18:01:32
曾两度称香港为“国家”,她辞职了

曾两度称香港为“国家”,她辞职了

观察者网
2024-05-24 14:52:10
2024-05-25 03:32:49
知了一笑
知了一笑
总结,积累,用心记录。
119文章数 1076关注度
往期回顾 全部

科技要闻

对话王小川:我们不跟进大模型价格战

头条要闻

媒体:解放军军演打赖清德个措手不及 美方反应出人意料

头条要闻

媒体:解放军军演打赖清德个措手不及 美方反应出人意料

体育要闻

阿兰,好久不见

娱乐要闻

霍启仁求婚成功,郭晶晶要有妯娌了

财经要闻

白重恩解读中国经济的3个关键问题

汽车要闻

宝马M品牌上新 2024年在华推出近10款高性能车型

态度原创

艺术
家居
旅游
教育
亲子

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

家居要闻

静默力量 以真实内心直面建筑的体感

旅游要闻

“旅游热”持续升温 ,这些关于景区的谣言别信

教育要闻

求√x+y+1,等式里有2个未知数,比较难啊

亲子要闻

女儿3岁了,父亲带她去打预防针,看孩子是啥反应

无障碍浏览 进入关怀版