架构设计中的后台任务:3种场景,2.5种触发模式,3个重点考量? | 架构师之路(11)
科技
2024-11-21 19:11
北京
举例:用户上传头像场景,上传完原图之后,需要生成大图,中图,小图。这个过程非常占用磁盘IO,且比较耗时,不应该让用户在上传页面等待,故可以启动一个后台任务来执行。举例:每天要清理日志,每周要备份数据库,每月要统计销售提成,每年要导出IT审计数据。这类每天,每周,每月,每年都定期执行的任务,可以启动一个后台任务来执行。举例:要对所有数据进行一次性加密处理,要对大语言模型进行参数训练,这类任务虽然不是定期执行,但也一般不启动服务,而是使用后台任务。第1种,时间表触发(Schedule-driven triggers)。例如:crontable,基于计时器周期,定期触发。第2种,事件触发(Event-driven triggers)。如前文的例子,用户上传原图时,触发大图,中图,小图的生成。画外音:这里也可以启动一个以分钟为单位的crontable定期触发来实现,但效率较低。第2.5种,人工触发(Manual-driven triggers)。老板找你导数据,你才执行任务,这也算事件触发的一种特例。只不过发过来的消息不是MQ,而是老板命令。其一,高可用。除了要考虑冗余+故障转移之外,还要重点考虑任务的执行状态与任务元数据的保存,同时要有任务探测与任务重试机制,以保证任务的高可用。这一部分,主要由分布式调度平台来实现。其二,幂等性。后台任务中断时,会不会污染数据;后台任务重试时,如何保证重试任务的幂等性。这一部分,主要是由业务任务代码来保证。其三,数据传递。工程系统与后台任务之间的数据如何传递,最佳实践是:只传递消息元数据,不传递批量数据本身。例子1:工程系统用户上传了原图,只给后台任务传递用户uid和消息类型,不要把原图当做参数。例子2:生成报表的多个任务之间,只传递任务开始,任务结束等消息,不要把数据批量传输。
知其然,知其所以然。
思路比结论更重要。
https://www.xuxueli.com/xxl-job/==全文完==
我将以短视频+图文+直播+星球社群的形式,系统性的分享架构设计中的100个相关知识点,欢迎感兴趣的童鞋关注。短视频第13期:2PC的来龙去脉,优缺点,应用场景平台对专业内容不推流,大家多帮忙标星,以及点赞,转发,在看三连。感谢!