前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elastic-Job2.1.5源码-调度注册中心的设计原理

Elastic-Job2.1.5源码-调度注册中心的设计原理

作者头像
宋小生
发布2022-12-14 18:37:52
4150
发布2022-12-14 18:37:52
举报
文章被收录于专栏:新技术新技术

大家好,本文给大家简单介绍一下Elastic-Job 调度注册中心的设计原理

Elastic-Job 调度注册中心的设计原理

文 | 宋小生

3 注册中心的设计原理

3.1 调度系统使用Zookeeper做什么

ZooKeeper 是 Apache 软件基金会的一个软件项目,它是一个针对大型分布式系统的可靠协调系统,为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。调度系统使用Zookeeper进行分布式环境下作业配置信息注册,监听更新,使用Zookeeper实现分布式锁进行主节点选举,使用临时节点实现作业实例上下线等操作。

3.2 调度系统注册中心设计

在上篇文章中通过Java启动作业调度的Demo我们可以看到Zookeeper初始化过程有如下操作:

代码语言:javascript
复制
  //1-创建zookeeper配置对象
  ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(serverList, namespace);
  //2-通过Zookeeper配置对象创建注册中心对象
  CoordinatorRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
  //3-初始化注册中心
  zookeeperRegistryCenter.init();

完成Zookeeper的初始化连接主要流程如下:

图3.1 注册流程

在调度系统中完成Zookeeper的初始化流程主要分为3步先创建一个用来封装Zookeeper配置信息的ZookeeperConfiguration类型 ,然后再根据配置信息创建Zookeeper注册中心对象,最后初始化注册中心。

接下来我们先整体看一下注册中心这一块的类型包含来哪些:

图3.2 注册中心包和类结构

注册中心接口层:最顶层的设计就是注册中心接口RegistryCenter 未来各种类型的注册中心都要继承或实现此接口,然后就是往下的用于协调分布式服务的注册中心的CoordinatorRegistryCenter接口,用于封装一些协调式分布式服务的注册中心共同行为。然后独立提供了一个用于注册中心选举候选人用的选举接口ElectionCandidate。

注册中心实现层:这里目前提供了用于协调式分布式服务典型的注册中心组件Zookeeper的封装,基于Zookeeper封装的注册中心类ZookeeperRegistryCenter。包含了配置实体类ZookeeperConfiguration,另外还提供了ZookeeperElectionService选举服务类。

异常类型:这里提供了一个自定义异常类型RegException来表示注册中心相关的异常,RegExceptionHandler注册中心异常处理类处理注册中心相关的异常信息。

3.3 Zookeeper配置详解

Zookeepeer客户端配置信息主要使用ZookeeperConfiguration类型封装主要配置信息如下:

属性名

属性类型

属性描述

serverLists

String

连接Zookeeper服务器的列表, 包括IP地址和端口号. 多个地址用逗号分隔. 如: host1:2181,host2:2181

namespace

String

调度节点的命名空间

baseSleepTimeMilliseconds

int

等待重试的间隔时间的初始值.单位毫秒.

maxSleepTimeMilliseconds

int

等待重试的间隔时间的最大值. 单位毫秒.

maxRetries

int

最大重试次数.

sessionTimeoutMilliseconds

int

会话超时时间. 单位毫秒.

connectionTimeoutMilliseconds

int

连接超时时间. 单位毫秒.

digest

String

连接Zookeeper的权限令牌. 缺省为不需要权限验证.

3.4 ZookeeperRegistryCenter原理解析

ZookeeperRegistryCenter是实现了协调注册中心的实现类用于和Zookeeper分布式协调组件进行交互的建模,接下来我们先看下他的类继承关系:

图3.3 注册中心类结构

可以看到协调注册中心类型ZookeeperRegistryCenter是针对协调注册中心类型的实现。

再来看下主要的成员变量:

图3.4 ZookeeperRegistryCenter类成员变量

主要的成员变量我们来看下:

  • ZookeeperConfiguration类型的zkConfig变量,这个ZookeeperConfiguration类型用来封装了Zookeeper的相关配置信息,具体配置信息可以参考3.3章节中我们描述的配置信息表格。
  • Map<String, TreeCache>类型的caches对象,用来保存Zookeeper路径下节点数据的缓存对象,用来实现对Zookeeper节点的监听操作。
  • CuratorFramework类型的client,Curator是Netflix公司开发的强大的Zookeeper客户端工具,CuratorFramework框架是ZooKeeper Client更高的抽象API,这里可以了解下ZooKeeperRegistryCenter底层的实现原理,针对Zookeeper的操作主要是基于CuratorFramework来实现对Zookeeper的操作的,CuratorFramework具有哪些特征呢:更清晰的API: 简化了ZooKeeper原生的方法, 事件等, 提供流式fluent的接口,提供Recipes实现 : 选举,共享锁, 路径cache, 分布式队列,分布式优先队列等。
  • slf4j包下的Logger类型的log对象,主要用来标准化打印日志。

3.5 注册中心常用操作方法

注册中心设计中相关的父接口一共有两个类型:

  • RegistryCenter
  • CoordinatorRegistryCenter

在这里协调注册中心类型继承RegistryCenter注册中心类型,未来注册中心类型还可以扩展为其他注册中心类型,我们看一下设计中主要的提供的操作方法:

可以看到注册中心客户端对于注册中心的操作主要是连接,关闭方法和常见的增加,修改,删除,查询节点等类型的基本操作。后面我们主要使用作业节点操作类型JobNodeStorage类型来调用注册中心接口为我们开放的操作方法。

- END -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中间件源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3 注册中心的设计原理
  • 3.1 调度系统使用Zookeeper做什么
    • 3.4 ZookeeperRegistryCenter原理解析
    相关产品与服务
    微服务引擎 TSE
    微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档