优雅的管理配置文件


最近在做一个局域网内服务器实例和虚拟机集群的管理系统,涉及到两方面,一是需要运行在每台服务器实例或者虚拟机上的程序,二是 Odoo 中的自定义模块,因为需要实现及时告警,Agent 预分析等功能,所以需要动态配置的项有很多,一开始打算让每台服务器实例独自负责告警和 Agent 调用的实现,最先浮出的问题就是如何管理配置文件。

如果让每台实例负责,则密钥,邮箱服务器配置,告警配置等都分散在各个实例中,并且我是存储在根目录的 .conf 文件内,通过 Pydnatic Model 在项目启动时加载到内存中,这就意味着一旦配置文件需要改动,那么服务必须重启,显然不可行,我的想法是实例端只保留最小配置(如向 Odoo 报告心跳的接口路径…), 其他配置存储在 Odoo 的配置文件或者数据库中,实例需要时进行实时获取,当然不知道是否可行,是否标准,于是便有了这篇文章。

目前配置文件的形式主要有: 不同格式的配置文件, 环境变量, 配置管理工具等, 但这都主要服务于单机配置, 对于需要分发的项目来说并不灵活, 这个需求有以下特点:

  • 配置需要分发到各个实例
  • 不同的实例可能需要不同的配置策略
  • 需要实现不重启即可更新(热更新)

刚才的想法可以解决需求, 但是需要避开高频获取配置信息的情况, 如果每个配置项都从 Odoo 端获取, 会造成不必要的延时开销. 更好的思路是: 配置文件由 Odoo 端统一管理, 并使用数据库模型持久存储, 在配置更改时, 主动推送最新的配置信息到各台实例(需要注意任务调度),