栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

基于zookeeper的分布式定时该怎么构建

基于zookeeper的分布式定时该怎么构建

公司有一个单独跑各种定时的一个项目,最近总是频繁的出现故障,主要的原因就是机器的性能问题。
确实一台4核8G的机器,要负责上百个定时任务,有的任务线程十分的频繁,随着后面业务的拓展,这种单机的模式显然已经不能满足后续的需求。
来吧,那就开始重构吧。
重构的大体思路就是,由单机版重构为分布式形式,用拓展的思路,堆服务器的套路,解决后面无穷无尽的需求。
因为单位用的PRC架构是比较流行的Zookeeper+dubbo,zk作为优秀的分布式管理平台,做这种分布式的定时任务,那简直再适合不过了。
为了演示方便,我就在本地起一个zk的服务,然后新建两个SpringBoot作为虚拟的分布式定时服务。
一:本地搭建zookeeper环境
为了方便测试,首先就是本地搭建zk的环境,这种zk的包网上十分普遍,我用的zk版本是3.4.2。
二:新建两个SpringBoot

import com.dangdang.ddframe.job.api.ShardingContext;//当当网的开源架构
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.zen.elasticjob.spring.boot.annotation.ElasticJobConfig;

@ElasticJobConfig(cron = "0/5 * * * * ? *", shardingTotalCount = 1,
        shardingItemParameters = "0=ZKJob1A,1=ZKJob1B",
        startedTimeoutMilliseconds = 5000L,
        completedTimeoutMilliseconds = 10000L)
public class ZKJob1 implements SimpleJob{

    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.print("任务【1】开始"+System.currentTimeMillis()+"nt");
    }
}

分布式的作业框架用的是当当网开源的elastic-job,这个框架十分契合公司需求,也是市场上十分成熟的框架,并且对SpringBoot十分友好,引入就能用


            com.github.xjzrc.spring.boot
            elastic-job-lite-spring-boot-starter
            1.0.1
            
                
                    org.apache.curator
                    curator-framework
                
                
                    org.apache.curator
                    curator-recipes
                
            
        
        
            org.apache.curator
            curator-framework
            2.10.0
        
        
            org.apache.curator
            curator-recipes
            2.10.0
            
                
                    org.apache.curator
                    curator-framework
                
            
        

还有就是再配置文件中配置本地的zk地址,为了注册使用(为了安全起见,我用了zk的权限令牌模式,避免将服务暴露给别人)

spring.elasticjob.zookeeper.server-lists=127.0.0.1:2181 //本地地址
spring.elasticjob.zookeeper.namespace=zk1               //命名空间
spring.elasticjob.zookeeper.digest=zookee:zookee //令牌模式
spring.elasticjob.zookeeper.connection-timeout-milliseconds=10000 //超时时间
server.port=9091

三;启动脚本
最后就是分别启动两个boot
可以看到,当两台机器都启动的情况下,zk只会跑其中一台机器的定时,当将任务1的定时停止后,任务2的定时会同时启动。


这种情况就完美的解决了多任务同时进行的痛点,最大程度上的将并发的难点,分摊到各台机器上去,并且ZK最主要的特性就是一致性,这就避免了多服务器的情况下,同一个时间点跑同一个定时的问题。

问题完美解决,后面再有更多的需求,那就都交给了zookeeper这个管理员。

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号