Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper实现参数的集中式管理「面试+工作」

面试

前言

应用项目中都会有一些参数,一般的做法通常可以选择将其存储在本地配置文件或者内存变量中;对于集群机器规模不大、配置变更不是特别频繁的情况下,这两种方式都能很好的解决;但是一旦集群机器规模变大,且配置信息越来越频繁,依靠这两种方式就越来越困难;我们希望能够快速的做到全局参数的变更,因此需要一种参数的集中式管理,下面利用Zookeeper的一些特性来实现简单的参数管理。

准备

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

Maven引入

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

目标

1.可以同时配置监听多个节点如/app1,/app2;

2.希望只需要配置如/app1,就能够监听其子节点如/app1/modual1以及子节点的子节点如/app1/modual1/xxx/…;

3.服务器启动能获取当前指定父节点下的所有子节点数据;

4.在添加节点或者在更新节点数据的时候能够动态通知,这样代码中就能够实时获取最新的数据;

5.spring配置中可以从Zookeeper中读取参数进行初始化。

实现

提供ZKWatcher类主要用来和Zookeeper建立连接,监听节点,初始化节点数据,更新节点数据,存储节点数据等

1.同时配置监听多个节点

提供一个字符串数组给用户用来添加需要监听的节点:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

2.能够监听其子节点以及子节点的子节点

使用递归的方式用来获取指定监听节点的子节点:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

3.服务器启动初始化节点数据

上面已经递归获取了所有的节点,所有可以遍历获取所有节点数据,并且存储在Map中:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

4.监听节点数据的变更

使用PathChildrenCache用来监听子节点的CHILD_ADDED,CHILD_UPDATED,CHILD_REMOVED事件:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

5.spring配置中可以从Zookeeper中读取参数进行初始化

实现自定义的PropertyPlaceholderConfigurer类ZKPropPlaceholderConfigurer:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

通过以上的处理,可以使用如下简单的配置来达到目标:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

详细代码svn地址:http://code.taobao.org/svn/temp-pj/DynamicConf

测试

1.首先启动Zookeeper

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

2.初始化需要使用的节点

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

创建需要的节点方便ZKWatcher来监听,这里根据以上的配置,分别初始化/a3/m1/v2/t2和/a2/m1/v1/t1

3.启动Main,分别验证配置文件中的初始化以及代码动态获取参数

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

4.观察日志同时更新参数:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

部分日志如下:

Zookeeper实现参数的集中式管理「面试+工作」

Zookeeper

总结

通过Zookeeper实现了一个简单的参数化平台,当然想在生产中使用还有很多需要优化的地方,本文在于提供一个思路;当然除了Zookeeper还可以使用MQ,分布式缓存等来实现参数化平台。加Java架构师进阶交流群获取Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走很多的弯路的 群号是:883922439 对了 小白勿进 最好是有开发经验

注:加群要求

1、具有工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!


分享到:


相關文章: