哎嘿今天换个开头。总是一本正经地写着一般的技术博客不如随便写点东西聊聊。尝试变换下风格。反正也没人看(括弧笑)。 相信工作几年的朋友总有几个要好的小伙伴,都会有自己的摸鱼小群。 就这几天有个小伙伴遇到一个问题。 还别说以前从来没关注过。实际工作中涉及的也不多。甚至有的项目根本就不用。突然这么一提,欸嘿?还真不太清楚呢。那这样怎么做呢? 好吧,那如果让我们自己来实现分布式配置中心刷新配置的功能,该如何设计呢呢? 既然是分布式系统那肯定是一个配置中心对一个多台服务器,在最开始启动服务的时候,各个服务器都是从配置中心中获取的配置加载到自己的内存中。那当配置中心配置信息变化的时候如何让各个服务器刷新呢?服务器至少要知道配置信息发生变动了,所以这里需要一个消息通知机制配置信息如何传输,也就需要一个配置信息的存储位置服务器的配置信息的刷新机制 消息通知机制,这里就可以分为2种思路:服务端不断轮询主动请求配置中获取最新配置 配置中心通知各个服务器配置发生了变化,要对应的服务器去更新 那么在继续考虑一个问题,如何实现呢 基于数据库 每隔一段时间去请求数据库,获取配置信息。甚至这个方法都可以不用分布式配置中心(开玩笑的)基于git 好吧springCloudconfig用的就是git文件来实现,下面会简单说下。反正我懂得也不多基于zookeeper 配置信息存在zk节点,利用监听机制在节点信息变动的时候通知服务器获取最新配置信息 来看看一些配置中心的比对 注册中心 配置存储 时效性 数据模型 维护性 优点 缺点 disconf zookpeer 实时推送 支持传统的配置文件模式,亦支持KV结构数据 提供界面操作 实时推送稳定性、实效性、易用性较好 源码较多,阅读和使用起来相对较复杂 zookpeer zookpeer 实时推送 支持传统的配置文件模式,亦支持KV结构数据 命令操作 实时推送稳定性、实效性 开发量大 diamond mysql 每隔15s拉一次全量数据 只支持KV结构的数据 提供界面操 简单、可靠、易用 数据模型不支持文件,使用不方便 SpringCloudConfig git 人工批量刷新 文件模式 git操作 简单、可靠、易用 需要依赖GIT,并且更新GIT 除了上面的还有携程的Apollo(阿波罗)以及阿里的nacos等。 我们先来看看springcloud的实现机制: 当配置文件发生变化的时候触发请求到配置中心配置中心收到请求后发送更新配置的消息给SpringCloudBus总线bus总线接收到消息后通知集群节点更新配置节点收到消息后请求服务中心获取最新配置信息节点完成配置刷新 好了,就这样吧。这里留几个flag需要补的几篇内容(欢迎挖坟)springcloudconfig实际使用zookeeper实现配置中心nacos学习 封面图侵权删。