分布式配置中心原理解析!SpringCloud Config 实现分布式配置的整体解决方案

简介: 本文重点讲解了分布式配置中心的设计原理,着重讲解了分布式配置中心框架SpringCloud Config框架的基本配置和使用方式。基本介绍了分布式配置中心的基础组件,包括Web管理系统,存放分布式配置文件的服务器,ConfigServer,ConfigClient组件。最后介绍了SpringCloud Config框架自动刷新的基本配置方式。

SpringCloud Config

  • SpringCloud整合了微服务中的整体解决方案:分布式配置中心,分布式锁,分布式任务调度平台,分布式事务,分布式日志收集
  • 产生背景:在微服务中如果使用传统的方式管理配置文件,配置文件管理器将会非常复杂;在生产环境中,配置文件改变时,需要重新配置war包,重新读取配置文件信息到JVM中
  • SpringCloud Config分布式配置中心:

    • 在微服务中使用同一个服务器管理所有服务配置文件信息
    • 在服务器运行的过程中,如果配置文件发生改变,不需要重启服务器就可以实时更改配置文件信息
Config配置文件的实时刷新不等同于热部署
热部署的底层实现其实还是重启服务器,不适合于生产环境,只适合于本地的开发测试

Config架构

  • 当一个系统中的配置文件发生改变的时候,需要重新启动该服务,才能使配置文件生效
  • SpringCloud Config可以实现微服务中所有系统的配置文件的统一管理,还可以实现当配置文件发生变化时,系统会自动更新获取新的配置

分布式配置中心框架

  • 阿波罗: 携程的分布式配置中心框架,有图形界面可以管理配置文件信息,配置文件信息存放在数据库中
  • SpringCloud Config: SpringCloud自带的分布式配置中心框架,没有后台可管理的分布式配置中心,配置文件信息存放在版本控制器中,如git,svn
zookeeper实现分布式配置中心,利用持久节点+事件通知实现

分布式配置中心设计原理

设计分布式配置中心的组件

  • web管理系统: 可以在web后台使用图形界面管理配置文件(SpringCloud Config没有图形化管理组件)
  • 存放分布式配置文件的服务器:

    • 使用数据库存放配置文件:Apollo
    • 使用版本控制器(git,svn等)存放配置文件信息:SpringCloud Config
  • ConfigServer: 缓存配置文件的服务器(用于缓存git服务器上的配置文件信息)
  • ConfigClient: 用于读取ConfigServer配置文件信息
存放分布式配置文件的服务器:持久化存储的服务器
ConfigServer:临时缓存存放的服务器

分布式配置中心原理

  • 用户提交配置文件信息到版本控制器:git/SVN服务器上存放
  • ConfigServer缓存从git服务器上获取到的配置文件信息
  • ConfigClient端从ConfigServer端获取配置文件信息
搭建git环境:持久化存储配置文件信息
1.新建项目
2.新建文件夹(git上的文件夹以服务进行区分)
3.把配置文件存放到git文件夹中


搭建ConfigServer环境
1.引入configServer依赖spring-cloud-config-server
2.配置文件
eureka.client.service-url.defaultZone:http://loaclhost:8100/eureka        # 注册中心服务地址
spring.application.name=config-server        # config-server服务注册别名
spring.cloud.config.server.git.url=(git文件夹url地址)    # config-server读取git项目的地址 
spring.cloud.config.server.git.search-paths=- config    # 读取配置文件的目录地址
spring.cloud.config.label=master        # 读取的分支环境
server.port=8888        # 服务端口号
3.在主类上标注@EnableEurekaClient注解注册到注册中心,标注@EnableConfigServer注解开启ConfigServer功能模块


搭建ConfigClient环境
1.引入configClient依赖spring-cloud-config-client
2.配置文件
spring.application.name=config-client        # 服务别名(要与git服务器保存的配置文件名一致)
spring.cloud.config.profile=dev                #读取的版本环境
spring.cloud.config.discovery.service-id=config-server    # 读取的configServer环境,configServer在注册中心的别名
spring.cloud.config.discovery.enable=true    # 开启读取权限
eureka.client.service-url.defaultZone=http://loaclhost:8100/eureka    #注册中心地址
server.port=8889    #服务端口号
3.创建cotroller类读取配置文件信息,标注@RestController注解和@RequestMapping注解
4.创建configClient启动类,标注@EnableEurekaClient注解注册到注册中心
  • git上创建配置文件名称规范:

    • 服务名称-环境.properties(ticket-dev.properties)

Config配置文件实时刷新

  • 默认情况下不能实时刷新配置文件信息,需要重启服务器才能刷新配置文件,这样不是很方便
  • SpringCloud Config分布式配置中心支持手动刷新和自动刷新:

    • 手动刷新: 需要人工调用接口,读取最新配置文件信息--监控中心
    SpringBoot Actuator监控中心
    1.引入actuator依赖spring-boot-starter-actuator
    2.在配置文件中开启监控端点
    management.endpoints.web.exposure.include="*"        # 开启所有端点
    3.启动运行configClient
    4.在需要刷新的controller类中的bean当标注@RefreshScope注解使actuator刷新生效
    • 自动刷新: 消息总线进行实时通知--springbus
相关文章
|
5月前
|
机器学习/深度学习 监控 算法
分布式光伏储能系统的优化配置方法(Matlab代码实现)
分布式光伏储能系统的优化配置方法(Matlab代码实现)
264 1
|
4月前
|
编解码 运维 算法
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
【分布式能源选址与定容】光伏、储能双层优化配置接入配电网研究(Matlab代码实现)
273 12
|
10月前
|
安全 网络安全 数据库
YashanDB分布式节点间SSL连接配置
本文介绍YashanDB分布式节点间SSL连接配置方法,确保通信安全。需统一为整个集群配置SSL,使用相同根证书签名的服务器证书,否则可能导致连接失败或数据库无法启动。文章详细说明了使用OpenSSL生成根证书、服务器私钥、证书及DH文件的步骤,并指导如何将证书分发至各节点。最后,通过配置数据库参数(如`din_ssl_enable`)并重启集群完成设置。注意,证书过期需重新生成以保障安全性。
|
12月前
|
SQL 数据建模 BI
【YashanDB 知识库】用 yasldr 配置 Bulkload 模式作单线程迁移 300G 的业务数据到分布式数据库,迁移任务频繁出错
问题描述 详细版本:YashanDB Server Enterprise Edition Release 23.2.4.100 x86_64 6db1237 影响范围: 离线数据迁移场景,影响业务数据入库。 外场将部分 NewCIS 的报表业务放到分布式数据库,验证 SQL 性能水平。 操作系统环境配置: 125G 内存 32C CPU 2T 的 HDD 磁盘 问题出现的步骤/操作: 1、部署崖山分布式数据库 1mm 1cn 3dn 单线启动 yasldr 数据迁移任务,设置 32 线程的 bulk load 模式 2、观察 yasldr.log 是否出现如下错
|
6月前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
468 2
|
6月前
|
存储 缓存 NoSQL
【📕分布式锁通关指南 12】源码剖析redisson如何利用Redis数据结构实现Semaphore和CountDownLatch
本文解析 Redisson 如何通过 Redis 实现分布式信号量(RSemaphore)与倒数闩(RCountDownLatch),利用 Lua 脚本与原子操作保障分布式环境下的同步控制,帮助开发者更好地理解其原理与应用。
415 6
|
7月前
|
存储 缓存 NoSQL
Redis核心数据结构与分布式锁实现详解
Redis 是高性能键值数据库,支持多种数据结构,如字符串、列表、集合、哈希、有序集合等,广泛用于缓存、消息队列和实时数据处理。本文详解其核心数据结构及分布式锁实现,帮助开发者提升系统性能与并发控制能力。
|
11月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
1197 0
分布式爬虫框架Scrapy-Redis实战指南
|
5月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
442 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)

推荐镜像

更多
  • DNS