架构设计中的后台任务:3种场景,2.5种触发模式,3个重点考量? | 架构师之路(11)

科技   2024-11-21 19:11   北京  
《架构师之路:架构设计中的100个知识点》
11.后台任务的场景,触发模式,设计重点


什么场景下会使用后台任务?
常见的三类场景:

其一,密集任务处理。
举例:用户上传头像场景,上传完原图之后,需要生成大图,中图,小图。这个过程非常占用磁盘IO,且比较耗时,不应该让用户在上传页面等待,故可以启动一个后台任务来执行。

其二,定期任务处理。
举例:每天要清理日志,每周要备份数据库,每月要统计销售提成,每年要导出IT审计数据。这类每天,每周,每月,每年都定期执行的任务,可以启动一个后台任务来执行。

其三,批量任务处理。
举例:要对所有数据进行一次性加密处理,要对大语言模型进行参数训练,这类任务虽然不是定期执行,但也一般不启动服务,而是使用后台任务。

后台任务有几种常见的触发模式?
常见的有2.5种:

第1种,时间表触发(Schedule-driven triggers)例如:crontable,基于计时器周期,定期触发。

第2种,事件触发(Event-driven triggers)如前文的例子,用户上传原图时,触发大图,中图,小图的生成。
画外音:这里也可以启动一个以分钟为单位的crontable定期触发来实现,但效率较低。

第2.5种,人工触发(Manual-driven triggers)老板找你导数据,你才执行任务,这也算事件触发的一种特例。只不过发过来的消息不是MQ,而是老板命令。

架构设计过程中,后台任务的设计重点是什么?
后台任务方案设计上有3个重点:

其一,高可用。除了要考虑冗余+故障转移之外,还要重点考虑任务的执行状态与任务元数据的保存,同时要有任务探测与任务重试机制,以保证任务的高可用。这一部分,主要由分布式调度平台来实现。

其二,幂等性。后台任务中断时,会不会污染数据;后台任务重试时,如何保证重试任务的幂等性这一部分,主要是由业务任务代码来保证。

其三,数据传递。工程系统与后台任务之间的数据如何传递,最佳实践是:只传递消息元数据,不传递批量数据本身

例子1:工程系统用户上传了原图,只给后台任务传递用户uid和消息类型,不要把原图当做参数。

例子2:生成报表的多个任务之间,只传递任务开始,任务结束等消息,不要把数据批量传输。


知其然,知其所以然。

思路比结论更重要。


补充阅读材料
分布式任务调度平台:
https://www.xuxueli.com/xxl-job/

==全文完==


我将以短视频+图文+直播+星球社群的形式,系统性的分享架构设计中的100个相关知识点,欢迎感兴趣的童鞋关注。
画外音:均免费。
短视频第13期:2PC的来龙去脉,优缺点,应用场景

平台对专业内容不推流,大家多帮忙标星,以及点赞,转发,在看三连。感谢!

架构师之路
架构师之路,坚持撰写接地气的架构文章
 最新文章