ETCD是一个高可用的键值存储系统,主要用于共享配置和服务发现。

前阵子由于项目中需要用到ETCD对于不同的环境进行配置,在考虑如何进行配置管理时,发现其实有如下几种管理方式。

即时型:变量设置后,立刻生效

重启型:变量设置后,需要重启应用,使配置生效

重写型:变量设置后,需要重新部署应用,使配置生效

 

即时型管理方法其实就是当将ETCD作为一个WebService使用。在应用中需要使用到配置的时候,向ETCD Server发送请求并解析返回值。当ETCD中键值对的值改变了,应用通过请求获取到了更新后的值,就立刻生效了。

即时型的特点是:

  • 应用流程会被ETCD上配置的更改直接影响。
  • 应用每次访问配置值时都需要访问ETCD API。
  • 配置信息在应用中驻留时间短
  • 配置更改到应用响应时间短。
  • 更新配置不需要进行任何对应用的更改
  • 容易出错。

重启型管理方法将读取ETCD中配置的过程放在应用初始化的过程中,当应用重新启动时,会向ETCD Server发送请求,将得到的配置储存在内存中,在需要时进行读取。

重启型的特点是:

  • ETCD的配置更改不会立即影响程序流程。
  • 应用启动后,所有的数据都在应用内存中。
  • 配置更改到应用响应时间依赖于重启过程。
  • 可以根据初始化时的参数决定读取配置的内容。
  • 涉及单一Ops操作或Ops之间的合作

重写型使用方法则更进一步,将应用于ETCD Server分离,应用的配置依赖于一份配置文件,而部署过程中部署程序会向ETCD Server请求配置并写入应用所依赖的配置文件。

重写型的特点是:

  • ETCD配置服务与应用完全分离。
  • 有实体配置文件存在。
  • 应用的配置更改依赖于部署过程。
  • 配置更改到应用响应时间依赖于部署过程。
  • 由于需要进行部署,涉及人员较多或需要可靠的自动化部署过程。

这三种类型都有各自的特点和适用范围,例如:

当ETCD中存储了敏感数据,不希望将其固化成文件,那么即时型和重启型就更加适用。

当应用与ETCD Server间连接不稳定,那么即时型就一定不是最好的选择。

当应用是一个由客户控制的客户端时,重新部署的代价就会变大,那么重写型无疑会使得配置的更改更加困难。