配置是应用中常见的内容,主要是用来通过修改配置来改变程序的执行。常见的如linux系统配置,通过修改系统配置,动态地对系统功能做调整。
在平常的应用中,主要有两种方式来管理配置:
- 通过配置文件来管理
- 使用配置中心来管理
常见的如Tomcat、Nginx,都是采用上面这种配置文件的方式来管理配置。采用配置文件的方式有一个问题,必须将服务重启后才能让配置生效。为了解决这个问题,一般需要配置中心来实现动态配置下发及加载。
配置中心可以算是微服务架构的标配组件,业界提供多种开源方案可供使用,例如:携程的Apollo,百度的Disconf, Spring cloud config等。配置中心的核心功能是配置项的存储和读取。
配置中心有两种方式来实现配置的变更推送,从而实现配置的动态变更。一种是轮询的查询方式;另一种是长连接推送的方式。
- 轮询方式,实现比较简单,定期查询所需要的配置是否有变化,如果有变化,则应用程序进行变更。在实现的时候一般不会查询全量的配置进行比较,而是通过计算配置的md5值,通过对比md5值,来判断配置是否发生变化。
- 长连接方式,通过在配置中心服务端保存每个连接关注的配置项列表。这样当配置中心感知到配置变化后,就可以通过这个连接把变更的配置推送给客户端。
对于配置中心,高可用的重要程度要远远大于高性能。通常将从配置中心拉取的配置信息,保存一份在本地文件中,当无法从配置中心获取最新配置时,可从本地保存的配置文件获取。