点击蓝字 关注我们
高可用性是 Apache DolphinScheduler 的特性之一。它通过冗余来避免单点问题,所有组件天然支持横向扩容;但仅仅保证了冗余还不够,当系统中有节点宕机时,还需要有故障转移机制能够自动将宕机节点正在处理的工作转移到新节点上执行,从而实现高可用。
01
DolphinScheduler架构介绍
Apache DolphinScheduler是一个分布式易扩展的工作流编排调度系统。其核心架构主要由3部分组成:APIServer, Master, Worker。
其中API-Server负责接收所有的用户操作请求,Master负责工作流的编排和调度,Worker负责工作流中任务的执行。整个系统通过注册中信做服务发现,通过数据库持久化元数据。
一个工作流执行的生命周期如下:
在API-Server中创建,并将元数据持久化到DB中。
通过手动点击或定时执行生成一个触发工作流执行的Command写入DB。
Master消费DB中的Command,开始执行工作流,并将工作流中的任务分发给Worker执行。
当整个工作流执行结束之后,Master结束工作流的执行。
02
DolphinScheduler集群高可用
分布式系统中必须要考虑的因素是系统整体的高可用(HA)。高可用指的是系统整体能够对外提供服务的时间占比很高,系统因为故障而无法提供服务的时间占比很短。
为了保证系统的高可用,架构的一个设计原则是通过冗余来避免出现单点问题。单点问题是指系统中某一任务组件只有单个实例,如果该实例出现了故障,那么会导致系统整体不可用。
Apache DolphinScheduler也是通过冗余来避免单点问题,在DolphinScheduler中,所有组件天然就支持横向扩容。
01
API-Server高可用
对于API-Server来说,由于API-Server是一个无状态服务,因此API-Server可以很容易的通过部署多台来保证高可用。在部署多台API-Server之后,只需要将他们注册在同一网关,即可一起对外提供服务。
02
Master高可用
Master作为DolphinScheduler中处理工作流的核心组件,其可用性直接关系到整个系统的稳定性。
由于Master并不像API-Server一样只是被动的接收外界的请求,Master会主动的消费数据库中的工作流,而一个工作流在某一时刻只能被一个Master处理,因此Master在横向扩容的时候需要考虑的问题更多。
一种比较简单的方案是采用active-standby的方式,即部署多台Master服务,但是只有一台处于active状态,对外工作,其他Master服务都处于standby状态,只有等active的Master宕机,standby状态的Master会重新选举出一台新的active Master对外工作。
这种方案实现起来简单,同时可以很好的解决Master单点问题,但是这种active-standby的架构同一时刻只能有一台Master进行工作,对于DolphinScheduler来说,由于Master需要处理工作流的调度,因此这会导致整个集群的工作流处理吞吐量上不去。
在DolphinScheduler中采用分片的方式对工作流元数据进行了预划分,具体来说对工作流产生的command根据id进行分片,将command均匀的分散到所有的Master,这样来达到所有Master都可以同时工作,并且不会互相影响。
Master通过注册中心来感知集中其他Master的节点信息,由于当节点上下线的时候,Master的元数据变更通知到所有Master服务时间会不一致,因此通过数据库事务做了进一步的保障,保证同一个Command只会被处理一次。
03
Worker高可用
Worker作为DolphinScheduler中任务执行组件,其扩展比较容易,这是由于在设计上,Worker主要是被动的接收Master分发的任务,他不会主动去数据库中拉取任务。因此Woker只需要在横向扩容之后注册到注册中心即可,Master会通过注册中心感知到Worker的元数据变更。
03
DS中的Failover实现原理
仅仅保证了冗余还不够,当系统中有节点宕机时,还需要有故障转移机制能够自动将宕机节点正在处理的工作转移到新节点上执行。在DolphinScheduler中所有的故障转移工作都由Master完成。
Master会监听注册中心中所有Master和Worker的健康状况,一旦有节点下线,所有Master会收到该节点下线的事件,然后执行容错逻辑。
通过竞争分布式锁的方式来决定由谁来进行本次故障转移操作。
在执行容错操作时,会根据Master/Worker的类型不同执行不同的容错操作。对于发生Master容错时,所有存活的Master会通过竞争分布式锁的方式来决定由谁来进行本次故障转移操作,竞争到分布式锁的Master会去数据库中查询出宕机节点中正在运行的工作流实例生成容错请求。对于发生Worker容错,所有Master会找出当前内存中是否有正在该Worker上运行的任务,如果有那么触发任务容错逻辑。
一种特殊情况是,可能集群中所有Master都宕机了,那么此时没有Master可以执行容错逻辑,因此当后面集群恢复时,在Master启动的时候也会进行容错逻辑。
参与贡献
随着国内开源的迅猛崛起,Apache DolphinScheduler 社区迎来蓬勃发展,为了做更好用、易用的调度,真诚欢迎热爱开源的伙伴加入到开源社区中来,为中国开源崛起献上一份自己的力量,让本土开源走向全球。
参与 DolphinScheduler 社区有非常多的参与贡献的方式,包括:
贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。
社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/issues/5689
非新手问题列表:https://github.com/apache/dolphinscheduler/issues?q=is%3Aopen+is%3Aissue+label%3A%22volunteer+wanted%22
如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/community/development/contribute.html
来吧,DolphinScheduler开源社区需要您的参与,为中国开源崛起添砖加瓦吧,哪怕只是小小的一块瓦,汇聚起来的力量也是巨大的。
参与开源可以近距离与各路高手切磋,迅速提升自己的技能,如果您想参与贡献,我们有个贡献者种子孵化群,可以添加社区小助手微信(Leonard-ds) ,手把手教会您( 贡献者不分水平高低,有问必答,关键是有一颗愿意贡献的心 )。
添加社区小助手微信(Leonard-ds)
添加小助手微信时请说明想参与贡献。
来吧,开源社区非常期待您的参与。
< 🐬🐬 >
更多精彩推荐
☞社区最早一批贡献者为什么还在坚持活跃?
☞优秀用户案例有奖征集 | 活动火热开启,快来投稿!
☞DolphinScheduler×集度 | DolphinScheduler 灵活调度新能源汽车多样化业务场景
☞DolphinScheduler×长安汽车 | 千万级数据接入能力智能网联汽车云平台引进核心调度系统
☞去年办了这么多场Meetup都没有你,2023年赶紧安排起来!
☞DolphinScheduler UI 项目启动提速 2 倍,原来是使用了 Vite!
☞Apache DolphinScheduler结合Ray AIR提升AI模型训练效率
我知道你在看哟