使用ETCD对WEB服务进行配置的几种方式
ETCD是一个高可用的键值存储系统,主要用于共享配置和服务发现。
前阵子由于项目中需要用到ETCD对于不同的环境进行配置,在考虑如何进行配置管理时,发现其实有如下几种管理方式。
即时型:变量设置后,立刻生效
重启型:变量设置后,需要重启应用,使配置生效
重写型:变量设置后,需要重新部署应用,使配置生效
即时型管理方法其实就是当将ETCD作为一个WebService使用。在应用中需要使用到配置的时候,向ETCD Server发送请求并解析返回值。当ETCD中键值对的值改变了,应用通过请求获取到了更新后的值,就立刻生效了。
即时型的特点是:
- 应用流程会被ETCD上配置的更改直接影响。
- 应用每次访问配置值时都需要访问ETCD API。
- 配置信息在应用中驻留时间短
- 配置更改到应用响应时间短。
- 更新配置不需要进行任何对应用的更改
- 容易出错。
重启型管理方法将读取ETCD中配置的过程放在应用初始化的过程中,当应用重新启动时,会向ETCD Server发送请求,将得到的配置储存在内存中,在需要时进行读取。
重启型的特点是:
- ETCD的配置更改不会立即影响程序流程。
- 应用启动后,所有的数据都在应用内存中。
- 配置更改到应用响应时间依赖于重启过程。
- 可以根据初始化时的参数决定读取配置的内容。
- 涉及单一Ops操作或Ops之间的合作
重写型使用方法则更进一步,将应用于ETCD Server分离,应用的配置依赖于一份配置文件,而部署过程中部署程序会向ETCD Server请求配置并写入应用所依赖的配置文件。
重写型的特点是:
- ETCD配置服务与应用完全分离。
- 有实体配置文件存在。
- 应用的配置更改依赖于部署过程。
- 配置更改到应用响应时间依赖于部署过程。
- 由于需要进行部署,涉及人员较多或需要可靠的自动化部署过程。
这三种类型都有各自的特点和适用范围,例如:
当ETCD中存储了敏感数据,不希望将其固化成文件,那么即时型和重启型就更加适用。
当应用与ETCD Server间连接不稳定,那么即时型就一定不是最好的选择。
当应用是一个由客户控制的客户端时,重新部署的代价就会变大,那么重写型无疑会使得配置的更改更加困难。