导语:本文我们从架构和技术实现上来为大家讲解腾讯云分布式任务调度系统TCT(Tencent Cloud Task)如何实现任务调度的精准实时、稳定高效,以及任务的切分和编排。(编辑:中间件小Q妹)
缘起缘灭,自有因果
首先,我们来思考一些几个业务场景:
类似上述批量处理海量定时任务的业务场景,在企业从单体架构向微服务架构、云化服务架构演进过程中已经屡见不鲜,基于Quartz的常规调度框架无法应对这种分布式场景下的需求,既无法实现任务调度的精准实时、稳定高效,也无法实现任务的切分、编排、失败补充。因此企业迫切需要一款一站式分布式调度任务解决方案,帮助企业统一管理繁杂纷乱的定时任务,增强企业微服平台服务化能力,支撑企业云化服务转型。
它山之石可以攻玉 …
在过往的发展中,前人留下了不少优秀的方案,各有利弊。常见开源产品: 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的前提下提升系统整体吞吐,实现可靠有效触达,应对频高量大的业务场景。
对于用户而言,多样化的管理手段、多维度的运行指标查询,全方位的链路监控则是用户追求的,只有让用户从复杂混乱的定时任务场景中抽离出来,才能更加专注在业务研发。
领取专属 10元无门槛券
私享最新 技术干货