目录
一、如何对配置进行管理
在开发应用的时候,管理配置的方式主要有两种:
- 一种是通过配置文件来管理;
- 一种是使用配置中心来管理
随着配置项越来越多,为了更好地对配置项进行管理,同时避免修改配置项后还要重新对代码做编译,你选择把配置项拆分成独立的文件(文件可以是properties格式、xml格式或yaml格式)。不过,这些文件还是会和工程一起打包部署,只是更改配置后不需要重新编译代码了。
二、配置中心是如何实现的
业界也提供了多种开源方案供你选择,比较出名的有携程开源的Apollo、百度开源的Disconf、360开源的QConf、Spring Cloud的组件Spring Cloud Config等
Apollo支持不同环境,不同集群的配置,有完善的管理功能,支持灰度发布、更改热发布等功能,在所有配置中心中功能比较齐全
1.配置信息如何存储
核心的功能就是配置项的存储和读取
存储路径如下:
/confs/global/{env}/{project}/{service}/{version}/{module}/{key} //全局配置
/confs/regions/{env}/{project}/{service}/{version}/{region}/{module}/{key} //机房配置
/confs/nodes/{env}/{project}/{service}/{version}/{region}/{node}/{module}/{key} //节点配置
2.变更推送如何实现
实现配置的动态变更,也就是说不需要重启服务器就能让配置生效了。而我们一般会有两种思路来实现变更推送:一种是轮询查询的方式,一种是长连推送的方式
长连推送这里有一个需要注意的点, 如果有很多应用服务器都去轮询拉取配置,由于返回的配置项可能会很大,那么配置中心服务的带宽就会成为瓶颈。为了解决这个问题,我们会给配置中心的每一个配置项多存储一个根据配置项计算出来的MD5值。
配置项一旦变化,这个MD5值也会随之改变。配置中心客户端在获取到配置的同时,也会获取到配置的MD5值,并且存储起来。那么在轮询查询的时候,需要先确认存储的MD5值和配置中心的MD5是不是一致的。如果不一致,这就说明配置中心里存储的配置项有变化,然后才会从配置中心拉取最新的配置。
长连的方式,它的逻辑是在配置中心服务端保存每个连接关注的配置项列表。这样当配置中心感知到配置变化后,就可以通过这个连接把变更的配置推送给客户端。
3.如何保证配置中心高可用
我们把数据库的地址存储在了配置中心里,如果配置中心宕机导致我们无法获取数据库的地址,那么自然应用程序就会启动失败。因此,我们的诉求是让配置中心“旁路化”。 也就是说,即使配置中心宕机,或者配置中心依赖的存储宕机,我们仍然能够保证应用程序是可以启动的。
增加两级缓存:第一级缓存是内存的缓存;另外一级缓存是文件的缓存