目录
一、前言
之前的文章我们介绍了基于定时任务的统一配置中心实现,本文将介绍另外两种实现,分别是基于Zookeeper的实现和基于Ignite的实现。
二、具体实现
1、基于Zookeeper的实现
本文并不打算讲解zookeeper的原理或者使用,只是提供一种基于zookeeper的实现方案和思路。
众所周知,Zookeeper的客户端可以读取其对应节点下的数据(任意字符串),同时能够对该节点进行监听,当存在数据变更的时候,其能够通知到所有的客户端。且Zookeeper本身就支持集群和数据持久化,因此我们就可以利用这些特性实现基于Zookeeper的统一配置中心。具体实现如下:
-
应用集群的每个节点启动的时候直接连接Zookeeper集群,并读取config节点下的数据,同时对config节点进行监听
-
管理人员直接通过客户端修改(增删改)Zookeeper集群中config的数据。修改之后Zookeeper能够自动将数据同步到file中持久化。
-
配置数据修改之后Zookeeper会通知所有的应用集群节点。节点就能够得到配置数据的最新数据。
2、基于Apache Ignite的实现(分布式缓存)
根据名称就可以指定Ignite是属于Apache旗下的。其是一个轻量级的内存分布式数据库。其官方称呼是”内存计算平台“,这里之所有说是内存分布式数据库,是因为我们这里刚好需要使用其这个分布式数据库的功能。
说到内存分布式数据库,大家都应该会想起大名鼎鼎的Redis,那么这个Ignite和Redis有什么区别呢?其主要区别就在于其轻量级上。使用它只需要依赖几个jar包,然后就可以很轻松的将其引入到我们的应用程序中。而不需要像Redis那样需要单独部署和维护。除了分布式内存数据库的功能外,它还支持集群化(无Leader节点)、分布式消息、分布式事件等,其主要功能组件如下(不要问我这些都是啥玩意,楼主也头疼,具体请查阅官网学习https://ignite.apache.org):
-
高级的集群化
-
数据网格(JCache)
-
流计算和CEP
-
计算网格
-
服务网格
-
Ignite文件系统
-
分布式数据结构
-
分布式消息
-
分布式事件
-
Hadoop加速器
-
Spark共享RDD
回归正题,使用Ignite我们可以这样实现统一配置中心功能:
-
每个应用程序引入Ignite,配置内存大小(存储配置文件一般不需要多大)。
-
设置Ignite为复制集,指定持久化文件
-
每个应用集群节点读取配置的时候直接从本地的Ignite中读取即可
-
修改配置数据,我们只需要随便选择一台应用集群,对其中的配置数据就行修改即可。Ignite能够自动的将数据同步到其他节点,保证所有节点数据最终一致。
图中:红线表示Ignite集群之间的同步;绿线表示应用程序节点从Ignite分布式数据库中读取数据(从其中的本地节点读取即可)。
3、方案对比
Zookeeper方案:使用比较简单,毕竟大家对Zookeeper应该比较熟悉。但是需要搭建维护Zookeeper集群。
Ignite:因为不熟悉有入门成本,但是使用很简单,无需额外搭建任何三方集群。是一个去中心化的实现。
所以,推荐Ignite方案。
三、惯例
如果你对本文有任何疑问或者高见,欢迎添加公众号共同交流探讨(添加公众号可以获得”Java高级架构“上10G的视频和图文资料哦)。
来源:CSDN
作者:xxbocai
链接:https://blog.csdn.net/hilaryfrank/article/details/103603904