找回密码
 会员注册
查看: 16|回复: 0

有赞调度系统TSP

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-10-8 12:11:42 | 显示全部楼层 |阅读模式
、、点击关注“有赞coder”获取更多技术干货哦~作者:轻鸿团队:中间件前言有赞发展初期,随着公司业务的增长,原本许多单机上定时执行的 crontab 任务越来越多,配置的维护成本变高,运行结果不能可视化,管理不统一,存在单点风险,运维和监控空白等等诸多弊端的显现,促使了第一代定时调度系统 Watchman 1.0 的诞生。Watchman 是一款集中式定时任务调度系统,根据业务提供的任务服务信息,参数和 cron 表达式,周期性发起回调。支持 Agent(脚本执行器),HTTP,Dubbo 三种类型的任务回调方式。随着时间的继续推移,业务需求的沉淀;从交易团队诞生出了一款延时任务产品 TOC (timeout center),TOC 最初聚焦解决的问题是:订单超时关单,订单自动完成,退款提醒,订单补偿重试等场景,后面由于业务需求的扩大,逐渐下沉到中间件团队维护迭代。一、TSP 的诞生由于 Watchman 和 TOC 在架构上有类似的地方, 都是为了满足业务方在指定的时间按照一定的策略回调业务代码的能力。同时,我们也发现有部分业务为了满足一些定制化需求,自己也实现了一部分的任务调度功能。比如框架组提供了异步执行引擎(Poseidon);零售团队实现了一个基于 Watchman 引擎的导入、导出、异步耗时任务框架。这几个零散的产品都是业务因为 TOC 和 Watchman 无法直接满足业务的定制功能而做的额外的功能开发。目前分散在几个团队,不好管理,也存在一些通用功能的重复开发工作。为了将各种任务调度类型的产品整合起来,并且具备业务扩展能力,诞生了 TSP(Task Schedule Platform) 这样一个任务调度平台。二、TSP 设计与实现TSP 主要集成了 TOC 和 Watchman 两种任务调度产品,兼具定时调度(根据cron表达式调度) 和 延时触发(根据用户提交任务的执行时间去调度)的能力。为了统一任务流转的处理流程,TSP 承袭了 TOC 的系统组件分类,主要分为 tsp-client、console、tsp-web、tsp-fetcher 和 tsp-worker 5个部分。2.1 任务相关元数据Task: 基本任务单元,一个 Task 代表系统会对业务方发起一次调用,延时任务中用户通过接口提交 ,定时任务是 TSP 周期性生成。TaskConfig: 任务配置,用来隔离业务,记录 Task 的回调服务的信息,调度策略等; 一个 TaskConfig 对应有一个 Task 集合;用户可通过 console 界面申请 或 API 方式创建。TSP架构图下面将逐个介绍一下几个主要模块(tsp-web、tsp-fetcher、tsp-worker)在 TSP 整个系统中的职责和作用:tsp-web整合原有各个产品的管理端能力和系统 API 能力;添加 Task 时若已存在,支持指定处理逻辑(重置执行时间/ignore/添加一个新任务)任务的配置管理(配置创建,修改,状态启用/停用,配置删除)任务管理(创建,暂停/恢复/取消/推迟 等)admin 管理 API监控数据 APIAPI 权限验证tsp-fetcher负责任务到期调度功能,提供按配置(TaskConfig)维度的调度线程池和任务队列隔离调度能力。将到期待执行的任务捞取到任务队列;目前队列由我们的 MQ 产品: NSQ 充当。熟悉 TOC 架构的小伙伴可能会发现该部分去除了 TOC 中引入的 SpringBatch 组件,自己实现相关部分的线程模型,变得更加轻量化。ConfigsScheduler:Config 型任务的调度(根据配置驱动的调度)如 定时任务。TasksScheduler:Task 型任务的调度,根据业务提交的任务执行时间驱动的调度, 如 延时任务,异步重试任务。回调失败的任务的重新调度。任务调度限流:根据?TaskConfig?配置的每个周期调度的最大限流值进行限流调度。tsp-worker消费任务队列,执行相应的任务回调,更新任务状态内置两种回调处理器(DubboTaskHandler 和 RestTaskHandler)分别处理 Dubbo 回调 与 HTTP 回调Dubbo 回调是通过异步泛化调用实现,支持接口方法自定义 POJO(Plain Ordinary Java Object) 参数的设定。任务失败重试,任务回调监控等。其他模块tsp-client: 主要封装了对 tsp-web 的任务操作(添加、修改),便于业务方直接使用console: 用于对任务和配置的元数据进行管理和查看,目前这块职责都集成到了内部统一运维平台进行管理RateLimit(包含调度限流和任务API限流)、Schedule Policy(任务回调的策略)、Monitor(任务监控和告警) 和 retry Policy(失败/超时的重试策略) 等将会在后续的功能特性文章中进一步详细总结数据存储和任务扫描TSP 的任务存储由两部分组成:DB 和 MQ。DB 存储任务(Task)和配置(TaskConfig)元数据,任务表建立?configName+status+executeTime?联合索引,任务到期扫描?configName?维度?status=0&executeTime
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 05:54 , Processed in 0.426912 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表