基于zookeeper实现系统配置中心
2019独角兽企业重金招聘Python工程师标准>>>
服务器端:
一、 写作目的
由于目前本公司产品众多,并且由于业务上的需求增加,导致目前公司产品越来越复杂,各个业务系统的公共配置以及应用自己的配置都存储与各个属性文件管理,给运维人员带来了极大的工作量。
二、服务端介绍
1.总体介绍
sysware配置中心服务端,采用zookeeper用来存储公共以及各业务系统的配置属性。并且提供前端界面进行维护这些属性配置。采用mysql数据进行数据的持久化。
2.各模块介绍
1) zookeeper
对于系统中各配置的存储,目前规划的存储结构如下:
节点说明 |
描述 |
---|---|
common | 公共配置 |
p2m | p2m系统私有配置 |
ke | ke系统私有配置 |
eap | eap系统私有配置 |
edm | edm系统私有配置 |
节点说明 |
描述 |
---|---|
key | 配置属性键 |
value | 配置属性值 |
建议:为了能够区分各个业务系统的配置,建议规则为使用:sysware + 点 + 业务系统名称 + 点 + 服务名称 + 点 +key
例如:在P2M系统中需要配置rabbitMQ的名称,即可为:sysware.p2m.rabbitmq.username
公共的配置即将有服务端portal录入,规则为sysware.common开头的key
2) DB
服务端数据库采用的mysql数据,主要用来防止zookeeper服务出现异常等不确定因素导致数据丢失,所以在mysql数据中也存储了一份作为备份,以备恢复数据。
3) 服务端 portal
方便运维人员进行zookeeper上数据的管理,提供了服务端portal界面操作。
4) client
提供与各个业务系统的配置中心客户端,以jar的形式提供,各业务系统可以获取配置中心数据。
三、sysware配置中心服务端使用
服务端提供了portal对于zk数据进行管理。
1) 登录
2)首页
3)数据列表
4)新增数据
5)修改,删除
客户端:
一、客户端介绍
配置中心客户端是服务于各个应用系统从而操作配置中心的配置属性。
客户端整体模型:
实现逻辑:
1) 采取数据加载到内存方式解决高效获取的问题,借助zookeeper的节点监听机制来实现实时感知。
2)新增配置,获取配置,修改配置, 删除配置逻辑图
3) 各个应用系统 获取配置过程 详细业务 逻辑图
二、客户端使用
配置中心客户端是以jar的形式提供于各个应用系统。
准备工作:
1)如果是非maven项目,需要将jar引入项目。
sysware-config.client-1.0-SNAPSHOT.jar(这边咋就限制文件大小9.77M呢,上传不上去,jar 13M,需要jar直接联系系统集成部杨晓辉)
2) 如果是maven项目,在pom中直接引入以下依赖,(目前还没上传到私服,后续完成)
<dependency>
<groupId>com.sysware</groupId>
<artifactId>sysware-config.client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3)需要在应用系统的classpath目录下添加config.properties文件,里面需要配置应用系统的唯一标识。
配置的key为:sysware.appid value为系统的唯一标识。
例如:sysware.appid=p2m
4)需要在在之前的sysware.properties文件中配置zk的ip
例如:sysware.zookeeper.ip=127.0.0.1:2181
使用方式:
配置中心客户端对外提供了增删改查接口,具体使用如下:
接口名称 |
返回值 |
接口描述 |
---|---|---|
接口名称 |
返回值 |
接口描述 |
String getValueByKey(String key) |
String | 获取属性:根据键key获取值value; |
void addValue(String key, String value) |
void | 新增属性:key为配置的键,value为配置的值 |
void updateValueByKey(String key, String value) |
void | 修改属性:key为配置的键,value为配置的值 |
void deleteValueByKey(String key) |
void | 删除属性:key为配置的键 |
具体使用demo:
/*
* 从配置中心客户端获取属性信息
* 1.如果从配置中心获取属性不为空,则使用配置中心配置属性。
* 2.如果配置中心中获取不到属性,则使用应用系统配置的属性,并且需要将应用系统该属性配置项推送至配置中心
*/
SyswareConfigClient scc = SyswareConfigClient.newInstance();
//获取DRIVER_CLASS_NAME
//方法说明:获取属性value
String driverClassName = scc.getValueByKey(DBConfig.DRIVER_CLASS_NAME);
if(!SyswareUtil.isEmpty(driverClassName)){
props.setProperty(DBConfig.DRIVER_CLASS_NAME, driverClassName);
}else{
//方法说明:addValue("sysId","属性key","属性value")
scc.addValue(DBConfig.DRIVER_CLASS_NAME, props.getProperty(DBConfig.DRIVER_CLASS_NAME));
}
三、配置规则
建议:为了能够区分各个业务系统的配置,各个业务系统自己配置的属性文件中,建议规则为使用:sysware + 点 + 业务系统名称 + 点 + 服务名称 + 点 +key
例如:在P2M系统中需要配置rabbitMQ的名称,即可为:sysware.p2m.rabbitmq.username
公共的配置即将有服务端portal录入,规则为sysware.common开头的key, 例如:sysware.common.redis.ip
转载于:https://my.oschina.net/u/3845850/blog/3001201
基于zookeeper实现系统配置中心相关推荐
- 基于Zookeeper实现配置中心
在Zookeeper的主要应用场景中,其中之一是作为分布式系统的配置中心. 实现原理 在Zookeeper建立一个根节点,比如/CONFIG,代表某个配置文件.将配置文件中的信息作为根节点的子节点存储 ...
- 基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...
- 基于zookeeper实现分布式配置中心(一)
最近在学习zookeeper,发现zk真的是一个优秀的中间件.在分布式环境下,可以高效解决数据管理问题.在学习的过程中,要深入zk的工作原理,并根据其特性做一些简单的分布式环境下数据管理工具.本文首先 ...
- 简述Zookeeper作注册中心
2019独角兽企业重金招聘Python工程师标准>>> Zookeeper的数据模型很简单,有一系列被称为ZNode的数据节点组成,与传统的磁盘文件系统不同的是,zk将全量数据存储在 ...
- Zookeeper 服务注册中心
Zookeeper 服务注册中心 Zookeeper 官网 ZooKeeper:分布式应用程序的分布式协调服务 ZooKeeper 是分布式应用程序的分布式开源协调服务.它公开了一组简单的原语,分布式 ...
- ieee39节点系统介绍_Java秒杀系统实战系列-基于ZooKeeper的分布式锁优化秒杀逻辑...
本文是"Java秒杀系统实战系列文章"的第十六篇,本文我们将继续秒杀系统的优化之路,采用统一协调调度中心中间件ZooKeeper控制秒杀系统中高并发多线程对于共享资源~代码块的并发 ...
- 【JEECG Dubbo专题】Dubbo+Zookeeper+Spring整合应用篇-Dubbo基于Zookeeper实现分布式服务(二)
Dubbo与Zookeeper.Spring整合使用 Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spri ...
- RPC Demo(二) 基于 Zookeeper 的服务发现
RPC Demo(二) 基于 Zookeeper 的服务发现 简介 基于上篇的:RPC Demo(一) Netty RPC Demo 实现 第二部分来实现使用Zookeeper作为服务 ...
- java实现系统参数的存储_基于ZooKeeper,Spring设计实现的参数系统
一.简介 基于ZooKeeper服务端.ZooKeeper Java客户端以及Spring框架设计的用于系统内部进行参数维护的系统. 二.设计背景 在我们日常开发的系统内部,开发过程中最常见的一项工作 ...
最新文章
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
- android gridview item 点击,Android-取消GridView/ListView item被点击时的效果
- 手动修改网卡接口模式从网桥变为路由
- 二、规则组织数学模型的建立
- sql视图语句_SQL视图:Replace View语句的示例语法
- 基于Docker搭建Jumpserver堡垒机操作实践
- SBM延迟飙升mysql_Mysql解决主从慢同步问题
- dubbo中源码之缓存设计
- Linux内存初始化(四) 创建系统内存地址映射
- VC++的链接错误LNK2001
- 电脑获取手机文件的一种方式(通过手机建立ftp)
- OSPF不规则区域,远离Area 0的区域连通性解决方案
- ros机器人编程实践(12.1)- 用turtlebot仿真巡线机器人(含turtlebot在kinetic安装教程)
- BScroll 实时监听滚动位置
- 移动互联网组建与优化
- 如何开发一个人脸识别,人脸识别系统,人脸识别考勤系统毕业设计毕设作品
- 轮询查找连接电脑设备IP地址
- 电子元器件贸易采购管理常见难题及解决方案
- Anaconda Navigator Applications 缺少Notebook等应用
- IDEA编译代码报错,找不到符号:找不到符号包
热门文章
- 昆仑mcp文件是什么版本_昆仑健康保2.0升级版怎么样?有哪些优缺点?
- c语言map函数k v都是int,Go语言sync.Map(在并发环境中使用的map)
- beyond compare4过期解决方法_面试必备:缓存穿透、雪崩解决方案及缓存击穿的四种解决方案...
- 【重要】2022年有三AI实战课程讲师招募,只等你来!
- 【直播回放】150分钟详解模型压缩理论和实践
- 【杂谈】为什么你学了AI,企业却不要你
- 通过Lazada成功打造自主女包品牌,这2个大学生是怎么做到的?
- 中国生物燃料市场产能预测与十四五战略前景展望报告2022年
- 全球及中国现金回收机行业销售前景与运营效益分析报告2022版
- 中国针状焦行业运营模式与投资风险评估报告2022-2028年