分布式配置中心201902

分布式配置中心

1.配置中心简介

2.xxl-conf简介

3.代码模拟演示

1.配置中心简介

为什么需要集中配置

当然是程序的发展,需要引入集中配置

随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……

对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制……

随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,因此需要引用配置中心治理

1.1 程序现状

业务的急剧扩张,导致单机服务无法满业务需求。这时候需要对单体大服务进行切开,服务走向SOA(微服务化)

?

这种场景中,配置文件的部署如上图所示。这样去部署配置简直是一场噩梦,而且无法做到快速的动态的调整。失去了配置主要意义之一。所以统一配置中心显得非常必要。

1.2 有哪些开源配置中心

spring-cloud/spring-cloud-config https://github.com/spring-cloud/spring-cloud-config spring出品,可以和spring cloud无缝配合

淘宝 diamond https://github.com/takeseem/diamond 已经不维护

disconf https://github.com/knightliao/disconf java开发,蚂蚁金服技术专家发起,业界使用广泛

ctrip apollo https://github.com/ctripcorp/apollo/ Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,具备规范的权限、流程治理等特性。

xxl-conf https://gitee.com/xuxueli0323/xxl-conf 轻量级分布式配置管理平台,拥有"轻量级、秒级动态推送、多环境、跨语言、跨机房、配置监听、权限控制、版本回滚"等特性。

1.3 配置中心对比

功能特性?

?

技术路线兼容性?

可用性与易用性?

1.4 对比结果

综上,ctrip applo是较好的选择方案,但是由于xxl-conf功能简单易用,可满足绝大多数配置需求,也轻量化,依赖也低。

支持不同环境(开发、测试、生产)、不同集群

完善的管理系统,权限管理、发布审核、操作审计

SpringBoot集成友好 ,较小的迁移成本

配置修改实时生效(热发布)

版本发布管理

2.xxl-conf简介

1,概述特性

2,背景发展

3,架构设计

4,快速入门

2.1 概述特性

概述

XXL-CONF 是一个轻量级分布式配置管理平台,拥有"轻量级、秒级动态推送、多环境、跨语言、跨机房、配置监听、权限控制、版本回滚"等特性。现已开放源代码,开箱即用。

特性

1、简单易用: 接入灵活方便,一分钟上手;

2、轻量级: 部署简单,不依赖第三方服务,一分钟上手;

3、配置中心HA:配置中心支持集群部署,提升配置中心系统容灾和可用性。

4、在线管理: 提供配置中心, 通过Web界面在线操作配置数据,直观高效;

5、多环境支持:单个配置中心集群,支持自定义多套环境,管理多个环境的的配置数据;环境之间相互隔离;

6、多数据类型配置:支持多种数据类型配置,如:String、Boolean、Short、Integer、Long、Float、Double 等;

7、跨语言:底层通过http服务(long-polling)拉取配置数据并实时感知配置变更,从而实现多语言支持。

8、跨机房:得益于配置中心集群关系对等特性,集群各节点提供幂等的配置服务;因此,异地跨机房部署时,只需要请求本机房配置中心即可,实现异地多活;

9、高性能:得益于配置中心的 "磁盘配置" 与客户端的 "LocalCache",因此配置服务性能非常高;单机可承担大量配置请求;

10、实时性: 秒级动态推送;配置更新后, 实时推送配置信息, 项目中配置数据会实时更新并生效, 不需要重启线上机器;

11、配置变更监听功能:可开发Listener逻辑,监听配置变更事件,可据此动态刷新JDBC连接池等高级功能;

12、最终一致性:底层借助内置广播机制,保障配置数据的最终一致性,从而保证配置数据的同步;

13、配置备份: 配置数据同时在磁盘与MySQL中存储和备份,并定期同步, 提高配置数据的安全性;

14、多种获取配置方式:支持 "API、 注解、XML占位符" 等多种方式获取配置,可灵活选择使用;

15、兼容Spring原生配置:兼容Spring原生配置方式 "@Value"、"${}" 加载本地配置功能;与分布式配置获取方式隔离,互不干扰;

16、分布式: 支持多业务线接入并统一管理配置信息,支撑分布式业务场景;

17、项目隔离: 以项目为维度管理配置, 方便隔离不同业务线配置;

18、高性能: 通过LocalCache对配置数据做缓存, 提高性能;

19、客户端断线重连强化:设置守护线程,周期性检测客户端连接、配置同步,提高异常情况下配置稳定性和时效性;

20、空配置处理:主动缓存null或不存在类型配置,避免配置请求穿透到远程配置Server引发雪崩问题;

21、用户管理:支持在线添加和维护用户,包括普通用户和管理员两种类型用户;

22、配置权限控制;以项目为维度进行配置权限控制,管理员拥有全部项目权限,普通用户只有分配才拥有项目下配置的查看和管理权限;

23、历史版本回滚:记录配置变更历史,方便历史配置版本回溯,默认记录10个历史版本;

24、配置快照:客户端从配置中心获取到的配置数据后,会周期性缓存到本地快照文件中,当从配置中心获取配置失败时,将会使用使用本地快照文件中的配置数据;提高系统可用性;

25、访问令牌(accessToken):为提升系统安全性,配置中心和客户端进行安全性校验,双方AccessToken匹配才允许通讯;

2.2 背景发展

背景

常规项目开发过程中, 通常会将配置信息位于在项目resource目录下的properties文件文件中, 配置信息通常包括有: jdbc地址配置、redis地址配置、活动开关、阈值配置、黑白名单……等等。使用properties维护配置信息将会导致以下几个问题:

1、需要手动修改properties文件;

2、需要重新编译打包;

3、需要重启线上服务器 (项目集群时,更加令人崩溃) ;

4、配置生效不及时: 因为流程复杂, 新的配置生效需要经历比较长的时间才可以生效;

5、不同环境上线包不一致: 例如JDBC连接, 不同环境需要差异化配置;

优点

1、不需要 (手动修改properties文件) : 在配置中心提供的Web界面中, 定位到指定配置项, 输入新的配置的值, 点击更新按钮即可;

2、不需要 (重新编译打包) : 配置更新后, 实时推送新配置信息至项目中, 不需要编译打包;

3、不需要 (重启线上服务器) : 配置更新后, 实时推送新配置信息至项目中, 实时生效, 不需要重启线上机器; (在项目集群部署时, 将会节省大量的时间, 避免了集群机器一个一个的重启, 费时费力)

4、配置生效 "非常及时" : 点击更新按钮, 新的配置信息将会即可推送到项目中, 瞬间生效, 非常及时。比如一些开关类型的配置, 配置变更后, 将会立刻推送至项目中并生效, 相对常规配置修改繁琐的流程, 及时性可谓天壤之别;

5、不同环境 "同一个上线包" : 因为差异化的配置托管在配置中心, 因此一个上线包可以复用在生产、测试等各个运行环境, 提供能效;

发展

于2015年,我在github上创建XXL-CONF项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计……

至今,XXL-CONF已接入多家公司的线上产品线,接入场景如电商业务,O2O业务和核心中间件配置动态化等,截止2018-10-24为止,XXL-CONF已接入的公司包括不限于:

- 1、深圳市绽放工场科技有限公司

- 2、深圳双猴科技有限公司

- 3、商智神州软件有限公司

- 4、浙江力太科技 - ……

2.3 架构设计

架构图?

配置中心由以下几个核心部分组成:

1、管理平台:提供一个完善强大的配置管理平台,包含:环境管理、用户管理、项目管理、配置管理等功能,全部操作通过Web界面在线完成;

2、管理平台DB:存储配置信息备份、配置的版本变更信息等,进一步保证数据的安全性;同时也存储"管理平台"中多个模块的底层数据;

3、磁盘配置数据:配置中心在每个配置中心集群节点磁盘中维护一份镜像数据,当配置新增、更新等操作时,将会广播通知并实时刷新每个集群节点磁盘中的配置数据, 最终实时通知接入方客户端;

4、客户端;

客户端设计?

客户端基于多层设计,核心四层设计如下:

1、API层:提供业务方可直接使用的上层API, 简单易用, 一行代码获取配置信息;同时保证配置的实时性、高性能;

2、LocalCache层:客户端的Local Cache,极大提升API层的性能,降低对配置中心集群的压力;首次加载配置、监听配置变更、底层异步周期性同步配置时,将会写入或更新缓存;

3、Mirror-File层:配置数据的本地快照文件,会周期性同步 "LocalCache层" 中的配置数据写入到 "Mirror-File" 中;当无法从配置中心获取配置,如配置中心宕机时,将会使用 "Mirror-File" 中的配置数据,提高系统的可用性;

4、Remote层:配置中心远程客户端的封装,用于加载远程配置、实时监听配置变更,提高配置时效性;

2.4 快速入门

环境搭建

1,mysql安装

2,mysql数据库初始化

3,zookeeper安装

4,xxl-conf源码编译打包(或Docker镜像方式)

5,xxl-conf调整配置文件配置

6,启动配置中心,添加配置内容

7,客户端引入xxl-conf的maven的jar

8,客户端配置获取4种方式

9,配置变更监听

3.代码模拟演示

1,管理中心操作指南

2,配置获取3种方式

3,数据库配置热发布

4,操作演示

3.1 管理中心操作指南

环境管理

环境管理(新增|编辑|删除)

?

项目管理

项目管理(新增|编辑|删除)

?

用户(权限)管理

用户(新增|编辑|删除|授权项目)

?

配置管理

配置(新增|编辑|删除|同步)

?

3.2 配置获取3种方式

?

1,API方式

String paramByApi = XxlConfClient.get("default.key01", null);

?

2,@XxlConf 注解方式

@XxlConf("default.key02")

public String paramByAnno;

?

?

3,XML占位符方式

<bean id="demoConf" class="com.xxl.conf.sample.demo.DemoConf">     <property name="paramByXml" value="$XxlConf{default.key03}" /> </bean>

?

?

3.3 数据库配置热发布

?

?

?

3.4 操作演示

1,添加环境

2,添加项目

3,授权项目

4,添加配置

5,编写客户端代码

6,演示3种取值方式

7,动态数据源动态更新配置热生效配置

8,动态数据源动代码阅读

感谢大家观看!

如有错误请指出互相交流,让小弟也学习学习,谢谢!

原文地址:https://www.cnblogs.com/nznzd/p/10509647.html

时间: 2024-11-06 20:20:34

分布式配置中心201902的相关文章

Spring Cloud构建微服务架构分布式配置中心

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息.加密/解密信息等访问接口:而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息.Spring Cloud Conf

Spring Cloud Config 分布式配置中心使用教程

一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是config client. 二.构建Config Server 创建一个spring-boot项目,取名为config-s

构建微服务架构Spring Cloud:分布式配置中心

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分.其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息.加密/解密信息等访问接口:而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息.Spring Cloud Conf

企业分布式微服务云SpringCloud SpringBoot mybatis (六)分布式配置中心

一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是config client.二.构建Config Server 创建一个spring-boot项目,取名为config-se

spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config

我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config.它用来为分布式系统中的基础设施和微服务提供集中化的外部配置支持,分为服务端和客户端两个部分. 其中服务端也称为分布式配置中心,他是独立的微服务应用,用来连接配置仓库并为客户端提供获取接口(这些接口返回配置信息.加密.解密信息等): 客户端是微服务架构中的各个微服务应用或基础设施,它们通过制定的配置中心来管理

Spring Cloud Config分布式配置中心的使用和遇到的坑

分布式配置中心 为什么要有用分布式配置中心这玩意儿?现在这微服务大军已经覆盖了各种大小型企业,每个服务的粒度相对较小,因此系统中会出现大量的服务,每个服务都要有自己都一些配置信息,或者相同的配置信息,可能不同环境每个服务也有单独的一套配置,这种情况配置文件数量比较庞大,维护起来相当费劲,举个栗子: 在开发的过程中,一般数据库是开发环境数据库,所有服务DB的IP配置为:92.168.0.1,突然老大说,开发环境换了,DB的IP要修改,这下可不好受了,所有模块挨个修改DB的配置,就问你难受不难受?

业余草 SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)

在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server

pollo分布式配置中心部署以及使用(转发)

pollo分布式配置中心部署以及使用 2018年06月12日 16:38:46 阅读数:1427 一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 官方github:https://github.com/ctripcorp/apollo 作者对Apollo对介绍:https://github.com/ctripcorp/apollo/wik

史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)

在上一篇文章讲述zuul的时候,已经提到过,使用配置服务来保存各个服务的配置文件.它就是Spring Cloud Config. 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中.在spring cloud config 组件中,分两个角色,一是config server,二是co