快捷搜索:  汽车  科技

阿里云服务处理高并发(微服务架构的任务调度解决方案elastic-job)

阿里云服务处理高并发(微服务架构的任务调度解决方案elastic-job)其中,Elastic-Job-Lite 定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。Elastic-Job 最开始只有一个 elastic-job-core 的项目,在 2.X 版本以后主要分为 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个子项目。ElasticJob 中引入了任务分片的概念,使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片。 随着服务器的增加或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。如果作业分为 4 片,用两台服务器执行,则每个服务器分到 2 片,分别负责作业的 50% 的负载。任务分片

定时任务

定时任务是互联网系统最常见的一种组件,以基于Spring框架开发的Java服务为例,可以使用是spring-Quartz框架或spring schedule框架来实现定时任务。后者是Spring3.0以后自带的定时任务功能,可以看作是轻量级的quartz框架,使用起来非常方便。在代码中使用一行scheduled注解和cron表达式就可以实现一个定时任务。

虽然这种方式很简单,但是不适合于分布式架构的微服务系统,因为定时任务散布在一个个服务中,非常不利于协同运作,甚至不能实现负载均衡。因此有必要将定时任务从业务代码中抽离出来进行单独的任务调度管理。

常见的任务调度解决方案包括大众点评的xxl-job项目、当当网的elastic-job项目和唯品会的Staturn项目,其中elastic-job项目当下保持着比较高的更新频率。ElasticJob 已于 2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目。本文重点介绍下这个项目。

elastic-job

elastic-job是一个分布式任务调度框架。分布式任务调度包括两层含义,一是运⾏在分布式集群环境下,同⼀个定时任务程序部署多份副本,只应该有⼀个副本在执行;二是定时任务的拆分,把⼀个⼤的任务拆分为多个⼩的任务,同时执⾏,提高执行效率。

ElasticJob 中引入了任务分片的概念,使得任务可以在分布式的环境下运行,每台任务服务器只运行分配给该服务器的分片。 随着服务器的增加或宕机,ElasticJob 会近乎实时的感知服务器数量的变更,从而重新为分布式的任务服务器分配更加合理的任务分片项,使得任务可以随着资源的增加而提升效率。

如果作业分为 4 片,用两台服务器执行,则每个服务器分到 2 片,分别负责作业的 50% 的负载。

阿里云服务处理高并发(微服务架构的任务调度解决方案elastic-job)(1)

任务分片

架构

Elastic-Job 最开始只有一个 elastic-job-core 的项目,在 2.X 版本以后主要分为 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个子项目。

其中,Elastic-Job-Lite 定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。

阿里云服务处理高并发(微服务架构的任务调度解决方案elastic-job)(2)

Elastic-Job-Lite

而 Elastic-Job-Cloud 使用 Mesos Docker 的解决方案,额外提供资源治理、应用分发以及进程隔离等服务.

阿里云服务处理高并发(微服务架构的任务调度解决方案elastic-job)(3)

Elastic-Job-Cloud

总结

elastic-job与quartz的异同

elastic-job使用了quartz的调度机制,内部原理一致,可以看作是quartz的一个扩展实现。区别主要在于elastic-job使用了注册中心(zookeeper)替换了quartz的jdbc数据存储方式,此外,elastic-job又支持分片等特殊功能.

elastic-job优点

  • 不存在数据库瓶颈,性能高。
  • 任务数大且要求低延迟时,一般不需要做二次分发,只要划分更多的分片即可。
  • 代码开源,已经通过大量公司的实际使用,口碑好。
  • 支持单独配置单个任务的策略配置,支持脚本任务。

elastic-job也不是完全没有缺点,主要是zookeeper部署在有状态容器中会增加一定的运维成本。

猜您喜欢: