导语:本文咱们从架构和技术实现上来为你们讲解腾讯云分布式任务调度系统TCT(Tencent Cloud Task)如何实现任务调度的精准实时、稳定高效,以及任务的切分和编排。(编辑:中间件小Q妹)算法
缘起缘灭,自有因果安全
首先, 咱们来思考一些几个业务场景:微信
相似上述批量处理海量定时任务的业务场景,在企业从单体架构向微服务架构、云化服务架构演进过程当中已经家常便饭,基于Quartz的常规调度框架没法应对这种分布式场景下的需求,既没法实现任务调度的精准实时、稳定高效,也没法实现任务的切分、编排、失败补充。所以企业迫切须要一款一站式分布式调度任务解决方案,帮助企业统一管理繁杂纷乱的定时任务,加强企业微服平台服务化能力,支撑企业云化服务转型。markdown
它山之石能够攻玉 ...网络
在过往的发展中, 前人留下了很多优秀的方案, 各有利弊。常见开源产品: Quartz、XXL-Job、ElasticJob、Antares、SIA-TASK 等。架构
从开源方案的逻辑架构和技术实现上,咱们也能直观的看出开源方案的不足:并发
为了解决上述问题,咱们进行了深刻的探索,并设计出了一套企业级的分布式任务调度系统TCT(Tencent Cloud Task)。TCT提供一站式分布式调度任务解决方案,支持随机、广播多种任务类型,具有任务分片、任务编排能力,提供完善的监控告警体系。咱们结合了用户实际的业务场景,吸收了历史经验,主要解决了面几个核心问题:负载均衡
以上核心要素,对系统的要求各不相同,可提供以下总结进行参考:框架
核心要素 | 功能说明 | 系统特性 |
---|---|---|
任务触发 | 解析并计算任务的触发时点, 生成触发事件 | CPU密集型 |
任务调度 | 承担任务派发规则, 管理任务运行生命周期 | IO密集型 |
任务触达 | 承担任务事件的触达和获取, 管理任务执行信息的获取管道 | 网络IO型 |
任务执行 | 任务执行单元, 执行真实的业务逻辑 | 取决于业务场景 |
架构, 老是在需求中不断演进...运维
下面咱们解释下架构图中的各个功能模块:
功能模块 | 描述说明 |
---|---|
管控器(Admin) | 用户控制台, 提供任务管理和干预界面, 配置任务运维指标等 |
触发器(Trigger) | 解析任务, 生成触发事件 |
调度器(Scheduler) | 分配任务, 管理任务运行生命周期 |
接入网关(AGW) | 认证鉴权, 回话管理, 任务信息透传等 |
SDK / Agent | 获取任务执行单元, 执行任务逻辑 |
经过有效的分片策略,在实现避免触发压力集中化的状况下,可快捷的完成服务的弹性扩缩容,实现近似无状态的水平扩展。
彻底无状态的设计方案,无需考虑任务的回源问题,实现无状态的水平扩容。
彻底无状态的设计方案,可实现无状态的水平扩容,实现理论上TCP链接数无上限。
便捷的管理能力,提供暂停、恢复、中止、重试等多种多样的管控能力。
经过日志服务, 方便用户查询任务执行日志。用户能够经过执行记录全部任务的执行批次详情,可以对当前状态为执行中的批次进行中止执行操做,可以对当前已经终止的批次触发从新执行操做;点击批次ID进入该批次的执行详情,点击任务ID进入该任务的执行批次列表,点击执行部署组进入资源详情列表。
能够实现多种场景的任务工做流。经过构建调度任务的上下游依赖关系完成复杂的任务调度逻辑。适用于大数据流程处理、任务执行工单、批量运维流程编排等应用场景。
一个平台性的系统,从产品功能到技术架构都存在着方方面面的挑战,须要层层抽象和逐步优化才能完成一个成熟产品落地。在大数据时代,面对海量的数据和用户规模,任何一种架构设计,都面临着网络响应、 容错、幂等、数据可靠性/一致性等诸多问题。
对于平台而言,任务的可靠性是第一优先级须要考虑的,次之任务执行的时效性。合理地进行功能模块化拆分,针对不一样场景,设计不一样的扩展方案,保证SLA的前提下提高系统总体吞吐,实现可靠有效触达,应对频高量大的业务场景。
对于用户而言,多样化的管理手段、多维度的运行指标查询, 全方位的链路监控则是用户追求的,只有让用户从复杂混乱的定时任务场景中抽离出来,才能更加专一在业务研发。
欢迎扫码关注咱们的微信公众号,期待与你相遇~
公众号不按期有赠书、抽奖(腾讯公仔/T桖)的活动,快来关注咱们并添加中间件小Q妹微信吧