网站首页 > 开源技术 正文
配置中心
场景
- 系统的两类配置:一类是数据库账号等配置,另外一类是程序中硬编码的一些业务参数(比如:一些阈值、开关等)
- 对账号类的配置,不同环境需要有不同的配置,并且生产环境的一些配置需要保密
- 对业务类参数,随着业务的变化,需要经常调整。而调整时,需要重新发布系统,带来不必要的运维工作
功能
- 一致性:分布式环境下,系统的一些配置进行修改,配置修改后,需要对所有服务节点生效
- 实时性:配置修改后,需要实时生效,不需要重启应用
- 多环境:不同环境(DEV、UAT、FAT、PROD)等,需要有不同的配置
- 统一性:需要有统一的配置界面,对各个系统进行配置
- 安全性:对生产环境的账号密码,要做到权限隔离
- 稳定性:配置中心是所有服务都依赖的的中间件,如果配置中心出现问题,可能会影响所有的服务,所以要支持集群部署,以增强其稳定性
- 版本管理:可以管理多个历史版本,方便及时的回滚到某个版本
- 多格式:支持Properties、Json、Yaml 等不同文件格式的转换存储,方便系统的配置迁移到配置中心
- 灰度发布:配置有变更时,需要将配置推送的部分机器上做验证,验证通过后在推送所有的机器上
架构
1. 配置如何及时推送到应用?
以Apollo为例,流程图如下:
1)后台配置系统修改配置,发布新版本,版本信息写入数据库中,版本信息表
2)轮询线程隔一段时间(比如 10秒)查询一个数据库的版本信息表,看是否有版本更新,有版本更新时将最新的版本信息存到本地内存,同时通知客户端
3)通知客户端的方式,是通过DeferredResult,设置DeferredResult的Result,对应的长连接会立刻返回给客户端
4)客户端向后端查询版本更新信息,该查询通过长连接的方式,超时设置为60秒,超时之后,客户端向后端重新查询
5)后端的查询接口中,会new一个DeferredResult对象,并设置该对象的超时时间和超时的返回值。查询内存中是否有最新的版本信息,如果有最新的版本信息则设置DeferredResult的Result, 直接返回。如果没有最新的版本信息,则将DeferredResult对象放到内存列表中,存储起来,等待后续的通知。
2. 如何保证配置中心的稳定性?
1)集群部署
配置服务采用集群部署,应用客户端通过负载均衡来访问配置服务。
2)客户端缓存
应用的客户端本地缓存一份配置,如果配置服务出现故障,无法提供服务,应用还可以继续使用本地的配置
工具
推荐
- Apollo 官网(https://github.com/apolloconfig/apollo) Github(https://github.com/apolloconfig/apollo)
- Nacos 官网(https://nacos.io/) Github(https://github.com/alibaba/nacos)
- Spring Config Github(https://github.com/spring-cloud/spring-cloud-config)
其他
- Disconf Github
推荐
ArchManual 分布式系统架构手册,陆续更新
- 上一篇: 最全的微服务知识科普(服务 微服务)
- 下一篇: 架构学习之路——高可用高并发系统设计原则
猜你喜欢
- 2024-10-28 成为java微服务架构师的技术学习路线图
- 2024-10-28 Re:从 0 开始的微服务架构:(二)如何快速体验微服务架构?
- 2024-10-28 SpringConfig配置中心学习总结(spring 配置中心原理)
- 2024-10-28 WormHole服务网关管理平台(网关服务器)
- 2024-10-28 亿级流量网站架构核心技术「笔记」(一)
- 2024-10-28 架构师必懂的——分布式配置中心(Apollo)
- 2024-10-28 那些Java架构师必知必会的技术(那些java架构师必知必会的技术知识)
- 2024-10-28 Dubbo微服务架构下的Kubernetes云平台建设实践
- 2024-10-28 架构学习之路——高可用高并发系统设计原则
- 2024-10-28 最全的微服务知识科普(服务 微服务)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)