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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 本文重点讲解了分布式配置中心的设计原理,着重讲解了分布式配置中心框架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
相关文章
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
131 3
|
24天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
73 3
|
28天前
|
存储 人工智能 自然语言处理
高效档案管理案例介绍:文档内容批量结构化解决方案解析
档案文件内容丰富多样,传统人工管理耗时低效。思通数科AI平台通过自动布局分析、段落与标题检测、表格结构识别、嵌套内容还原及元数据生成等功能,实现档案的高精度分块处理和结构化存储,大幅提升管理和检索效率。某历史档案馆通过该平台完成了500万页档案的数字化,信息检索效率提升60%。
|
27天前
|
存储
文件太大不能拷贝到U盘怎么办?实用解决方案全解析
当我们试图将一个大文件拷贝到U盘时,却突然跳出提示“对于目标文件系统目标文件过大”。这种情况让人感到迷茫,尤其是在急需备份或传输数据的时候。那么,文件太大为什么会无法拷贝到U盘?又该如何解决?本文将详细分析这背后的原因,并提供几个实用的方法,帮助你顺利将文件传输到U盘。
|
1月前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
45 3
|
1月前
|
域名解析 存储 缓存
DNS是什么?内网电脑需要配置吗?
【10月更文挑战第22天】DNS是什么?内网电脑需要配置吗?
152 1
|
2月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
377 3
|
2月前
|
机器学习/深度学习 调度
mmseg配置解析 Polynomial Decay 多项式衰减
Polynomial Decay(多项式衰减)是一种常用的学习率调度方法,通过多项式函数逐步减少学习率,帮助模型更好地收敛。公式为:\[ lr = (lr_{initial} - \eta_{min}) \times \left(1 - \frac{current\_iter}{max\_iters}\right)^{power} + \eta_{min} \]。参数包括初始学习率、最小学习率、当前迭代次数、总迭代次数和衰减指数。适用于需要平滑降低学习率的场景,特别在训练后期微调模型参数。
69 0
mmseg配置解析 Polynomial Decay 多项式衰减
|
2月前
|
JSON JavaScript 前端开发
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
深入解析ESLint配置:从入门到精通的全方位指南,精细调优你的代码质量保障工具
92 0
|
2月前
|
JavaScript 前端开发 索引
Vue3 + Vite项目实战:常见问题与解决方案全解析
Vue3 + Vite项目实战:常见问题与解决方案全解析
98 0

推荐镜像

更多