统一配置中心实现系列-Zookeeper和Ignite

随声附和 提交于 2019-12-19 09:09:50

目录

一、前言

二、具体实现

1、基于Zookeeper的实现

2、基于Apache Ignite的实现(分布式缓存)

3、方案对比

三、惯例


一、前言

之前的文章我们介绍了基于定时任务的统一配置中心实现,本文将介绍另外两种实现,分别是基于Zookeeper的实现和基于Ignite的实现。

二、具体实现

1、基于Zookeeper的实现

本文并不打算讲解zookeeper的原理或者使用,只是提供一种基于zookeeper的实现方案和思路。

众所周知,Zookeeper的客户端可以读取其对应节点下的数据(任意字符串),同时能够对该节点进行监听,当存在数据变更的时候,其能够通知到所有的客户端。且Zookeeper本身就支持集群和数据持久化,因此我们就可以利用这些特性实现基于Zookeeper的统一配置中心。具体实现如下:

  1. 应用集群的每个节点启动的时候直接连接Zookeeper集群,并读取config节点下的数据,同时对config节点进行监听

  2. 管理人员直接通过客户端修改(增删改)Zookeeper集群中config的数据。修改之后Zookeeper能够自动将数据同步到file中持久化。

  3. 配置数据修改之后Zookeeper会通知所有的应用集群节点。节点就能够得到配置数据的最新数据。

2、基于Apache Ignite的实现(分布式缓存)

根据名称就可以指定Ignite是属于Apache旗下的。其是一个轻量级的内存分布式数据库。其官方称呼是”内存计算平台“,这里之所有说是内存分布式数据库,是因为我们这里刚好需要使用其这个分布式数据库的功能。

说到内存分布式数据库,大家都应该会想起大名鼎鼎的Redis,那么这个Ignite和Redis有什么区别呢?其主要区别就在于其轻量级上。使用它只需要依赖几个jar包,然后就可以很轻松的将其引入到我们的应用程序中。而不需要像Redis那样需要单独部署和维护。除了分布式内存数据库的功能外,它还支持集群化(无Leader节点)、分布式消息、分布式事件等,其主要功能组件如下(不要问我这些都是啥玩意,楼主也头疼,具体请查阅官网学习https://ignite.apache.org):

  1. 高级的集群化

  2. 数据网格(JCache)

  3. 流计算和CEP

  4. 计算网格

  5. 服务网格

  6. Ignite文件系统

  7. 分布式数据结构

  8. 分布式消息

  9. 分布式事件

  10. Hadoop加速器

  11. Spark共享RDD

回归正题,使用Ignite我们可以这样实现统一配置中心功能:

  1. 每个应用程序引入Ignite,配置内存大小(存储配置文件一般不需要多大)。

  2. 设置Ignite为复制集,指定持久化文件

  3. 每个应用集群节点读取配置的时候直接从本地的Ignite中读取即可

  4. 修改配置数据,我们只需要随便选择一台应用集群,对其中的配置数据就行修改即可。Ignite能够自动的将数据同步到其他节点,保证所有节点数据最终一致。

图中:红线表示Ignite集群之间的同步;绿线表示应用程序节点从Ignite分布式数据库中读取数据(从其中的本地节点读取即可)。

3、方案对比

Zookeeper方案:使用比较简单,毕竟大家对Zookeeper应该比较熟悉。但是需要搭建维护Zookeeper集群。

Ignite:因为不熟悉有入门成本,但是使用很简单,无需额外搭建任何三方集群。是一个去中心化的实现。

所以,推荐Ignite方案。

 

三、惯例

如果你对本文有任何疑问或者高见,欢迎添加公众号共同交流探讨(添加公众号可以获得”Java高级架构“上10G的视频和图文资料哦)。

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!