苏宁大数据平台任务调度模块架构设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
—
苏宁大数据离线任务开发调度平台实践:任务调度模块架构设计
2019-02-01 08:00:00 375 收藏 2
作为国内最大的电商平台之一,苏宁每天要处理数量巨大的数据。为了更快速高效地处理这
些数据,苏宁调度平台采取了哪些措施呢
本文是苏宁大数据离线任务开发调度平台实践系列文章之上篇,详解苏宁的任务调度模块。
目录
…
1.绪言\t1
2.设计目标与主要功能\t2
3.专业术语\t3
4.调度架构设计\t5
\
5.服务重启和任务状态恢复\t6
Master Active 组合服务\t7
Master HA高可用设计\t7
Recover任务状态恢复设计\t7
API接口服务\t9
~
7.后续\t10
1.绪言
在上一篇文章《苏宁大数据离线任务开发调度平台实践》中,从用户交互功能、任务调度、
任务执行、任务运维和对外服务等几方面,宏观层面进行了理论和实践的概述。
产品的用户功能重点需要把握用户实际的任务开发运维需求,合理的规划设计产品功能,在
使用和运维上便于用户操作,降低用户的开发使用成本。简单的说就是主要保证用户任务、
任务流等关键元数据的配置信息的准确性,以及任务状态的查询和干预能力,技术上实现不
存在难点,在此不再详细说明。
任务执行模块侧重于任务被领取后,如何根据任务类型选择不同的执行器(Executer)提交任务执行,并将任务的执行状态及时准确的返回,由任务调度服务根据返回状态做相应的下一步处理,除此以外还涉及到任务资源加载、任务配置解析与转换、自身健康状态检查与汇报、worker进程与任务子进程通信、任务隔离、对外接口服务等,这块将在后面一节再跟大家详细分享。
【
任务运维模块主要关注平台的自身稳定性、健壮性等各个指标的监控与预警、平台任务执行异常的监控、任务运行诊断分析、动态扩缩容和应急降级等方面,涉及到的内容也很多,后续章节会陆续跟大家分享。
今天我们重点详细阐述苏宁大数据离线任务调度开发平台的核心模块—任务调度模块的架构设计以及开发实践过程中的关键功能点。
2.设计目标与主要功能
调度模块的核心目标要保证任务能够按照用户配置的调度时间、依赖关系准实时调度和执行,同时也允许用户根据实际需要随时启动和停止任务调度,调整任务执行计划。所谓准时实调度,指的是调度模块会按照各个上线的任务流的调度时间生成调度执行计划,当触发时间到了,平台会按照调度执行计划精确的生成任务流实例和任务实例。但是在任务执行上,并不保证准实时的分配机器执行。实际上平台以整体资源使用情况为最高原则,并按照一定的限流策略控制任务的执行,比如:任务优先级、任务组并发度、平台任务并发数、任务特定执行时间等因素。在保证平台资源允许的情况下,尽量按时执行任务。为了保障任务的实时性,必须保障任务资源的可用性和计划可控性。
#
调度模块的主要核心服务功能包括以下几点:
服务重启和任务状态恢复功能
在调度服务重启、主备切换后,系统状态以及任务运行状态能否准确的恢复。比如,主节点崩溃或维护期间,发生状态变更的任务在主节点恢复以后,能否正确更新状态等等。
Web API接口服务
用户通过Web控制后台管理作业,而Web控制后台与Master服务器之间的交互透过Rest 服务来执行,Rest服务也可以给Web控制后台以外的其它系统提供服务(用于支持外部系统和调度系统的对接)。另外为了便于监控和调查分析调度异常和问题,提供Master内存关键信息的查询和人工干预的接口能力。
(
数据信息缓存服务
缓存上线任务流、任务、事件、系统配置、服务器的关键元数据信息,这些信息一般在任务流上线后不会经常发生变更,没必要实时从数据库中读取。并对外提供这些元数据信息的同步接口服务,保证缓存信息与数据库的一致性。
缓存任务流实例、任务实例、事件实例等中间状态信息,同时持久化到数据库中。便于在任
务状态切换、任务依赖执行快速找到对应的运行中的关键数据。并在任务实例数上升一定量级以后可以快速的从内存中缓存的中间状态数据完成依赖检查和触发执行逻辑,降低对数据库因为频繁访问造成的压力。
任务调度服务
主要负责上线任务流的配置检查、生成任务流执行计划、按照执行计划生成任务流与任务实例,生成任务实例状态机和节点之间的依赖触发关系。除了这些系统调用主要功能外,还提供人工干预任务执行的服务功能,比如:任务流上下线、任务补数据、任务重跑、任务杀死、失败重试等
》
任务状态机管理
任务流按照调度服务的执行计划会在每个调度周期内生成需要执行的任务流实例和任务实例信息,这些实例在调度过程中存在多种临时状态,并具备一定的生命周期。状态切换的时候触发一定的业务逻辑,比如:任务实例由新建状态切换到待分配状态,由待分配状态切换到已分配状态,由执行中状态切换到执行结束状态都可能需要完成一定的处理。这里我们采用了状态机的管理机制来确保任务执行状态的持续性和完整性。
任务状态分析服务
任务实例在调度过程中存在多种临时状态的切换,每次状态切换必须成功才能保证状态变化的持续性和完整性,从而保证任务实例从生成到结束的完整生命周期。如果状态切换过程中发生意外或者长时间停滞在某个状态不变,可能会导致调度异常和用户使用恐慌,为了准确及时的分析任务实例的状态停滞原因,需要在任务状态生成和切换的时候进行检查校验,把不能切换的原因及时记录,便于分析问题。
任务状态发布服务
平台上的任务处理的是数据,数据处理的及时性和准确性对业务系统是有极大的影响。而平台的任务运行状态往往只会记录在本平台数据库中,外部系统无法感知。在很多场景下,业务系统需要根据任务的执行状态来执行自己的特定业务逻辑,通过传统的任务状态查询接口又存在延迟性和性能问题,比如:任务状态的变更,执行时间长短会因为多种因素而变得不确定;多个外部系统调用平台接口可能会导致平台自身压力的不确定性。可以在任务实例生成和状态切换的时候,将任务实例状态按照用户的配置要求,及时的发布出去,业务系统根据需要进行订阅,确保任务状态更新的及时性,又降低对平台的侵入和压力。
:
任务分配与流控服务
主要负责满足执行条件的任务实例的分配,以及在任务执行高峰、资源紧张的情况下如何智能有效的进行相应的流控。在以整体资源使用情况为最高原则,并按照一定的限流策略控制任务的执行,比如:任务优先级、任务组并发度、平台任务并发数、任务特定执行时间等因素。在保证平台资源允许的情况下,尽量按时执行任务。为了保障任务的实时性,必须保障任务资源的可用性和计划可控性。
事件触发服务
主要解决复杂业务场景里,跨任务流依赖、跨系统平台依赖的调度执行问题。比如:平台内