elasticjob高可用和高性能

389 阅读3分钟

高可用

主备架构

和一切其他中间件一样,高可用就是为了解决单点问题。

非分布式定时任务,就是单点。有单点问题,如果挂了,就没了。只能重启。

分布式定时任务,就不一样了。如果挂了一个节点,备胎节点,可以自动切换为主节点。

说白了,就是一个主节点挂了,备胎节点,自动切换为主节点。

这种架构是,主备。主备的作用是,只有主处理数据,备胎节点不处理数据,只是个备胎。只有当主节点挂的时候,备胎节点才自动切换为主节点,只有这个时候,备胎节点才处理数据,因为备胎节点已经是主节点了。

那在elasticjob,具体怎么做呢?

  1. 配置

分片总数量:1

分片参数:无需配置

  1. 节点数量

2个,一个是主节点,一个是备胎节点。

正常情况下,是主节点在处理数据。除非主节点挂了,备胎节点才自动切换为主节点,这个时候,备胎节点才开始处理数据——正常情况下,备胎节点是不处理数据的。

更细节的说是,elasticjob默认是把大ip作为主节点,小ip作为备胎节点。

多主架构

除了主备架构,更常用的架构是多主。

毕竟,都已经用了分布式定时任务,然后又不用,就说不过去。因为引入了分布式定时任务中间件elasticjob和注册中心zookeeper,也是需要成本的——搞这么复杂,又不用他的核心功能,这不浪费表情吗?

所以,分布式定时任务的核心功能,就是多主。

特别是数据量比较大的情况下,就用多主。如果一个节点就能处理,也可以用主备,因为毕竟已经满足了需求,而且分布式定时任务还提供了高可用的功能——另外,主备肯定是比多从架构更简单一点。多主的配置和代码,都要稍微更复杂一点。

多主架构,具体怎么做呢?

  1. 配置

分片数量:2

分片参数:0=0,1=1

  1. 节点数量

也是2个节点,但是,这个时候,节点1的分片值是0,分片参数值是0。节点2的分片值是1,分片参数值是1。

现在,多主在同时执行,即多个节点同时在执行。什么意思呢?就是同一时间,不同的节点都在执行同一个任务。

那节点挂了怎么办?挂了就挂了,没影响。就相当于少了一个节点。就像zk里的dubbo节点一样,只是节点集群里少了一个节点而已。

如果有节点挂了,elasticjob会重新分片。假设总共有2个节点,如果挂了一个,那么重新分片之后,剩下的那个节点执行所有的分片。

假设总共有多个节点,如果挂了一个,那么重新分片之后,剩下的节点执行所有的分片。

高性能

主备架构,主要作用是为了解决高可用问题。

多主架构,也是为了解决高可用问题,因为如果挂了一个节点,其实是没有影响的。

但是,多主架构,除了解决高可用,还解决了高性能。本质其实就是集群,就是负载均衡,用多个节点共同处理数据,每个节点处理部分数据,但是每个节点都在同时并发处理,这样就提高了处理数据的速度。

注册中心zookeeper

类似dubbo的zk,就是用来剔除节点和加入节点。

如果挂了,就是相当于剔除了一个节点。剔除节点之后,会重新分片。

启动的时候,每次多启动一个节点,就相当于是多加入了一个节点到集群。每多加入一个节点,都会触发重新分片。