新部署一个服务时,除了服务本身,还有它启动依赖的配置文件也要一并发布到目标主机。配置文件从哪里来?如何发送到目标主机?修改后如何同步?
我们可以在页面提供上传或新增功能,为每个服务保存一份默认的配置文件包,新部署时将此包的内容写入etcd,由主机上的守护进程去同步,后续的修改也只是更新etcd里的内容,原理请见 配置文件那些事
实际上服务的配置文件不只有默认包,每次修改内容都会创建一个新的包,这个包里的所有版本号都应可应用到该服务的每个实例,因此需要记录服务有哪些配置文件版本号、实例当前关联的版本号,就是一对多的关系。我们要修改一下模型:
class ConfRevision(models.Model):
# ...
service = models.ForeignKey(MicroService, on_delete=models.DO_NOTHING) # 1个服务可以有多个配置文件版本号
class MicroServiceInstance(models.Model):
# ...
conf_revision = models.ForeignKey(ConfRevision, null=True, blank=True, on_delete=models.DO_NOTHING) # 1个配置文件可以对应多个实例
页面设计与实现
为了方便录入文件,希望能实现以下功能:
- 除了手动填写,最好有个从文件上传的功能
- 页面支持增加、修改、删除某个配置包的文件
- 内容预览
- 文件对比,查看修改历史
为了更方便的实现功能,引入vue 和 ui组件 elementui 我们就从DOM中脱离出来,只需要操作数据就好。
前端最后提交到后端的是1个或多个文件,由于配置文件是纯文本格式,所以很方便的用数组来保存内容,使用json传输到后端。
服务的配置文件列表:
支持以下操作:
- 关联实例
- 设置为默认配置
- 修改内容
- 修改描述
某个具体的配置文件:
- 支持手动添加文件
- 支持从文件导入
- 格式校验
文件对比:
同步到etcd
目前的代码已经在本地数据库实现了一个完整的配置版本管理功能:
- 浏览器作为统一的修改入口
- 后端保存文件的修改历史,每一次修改都生成一个新的修订号
- 简单文件对比,方便查看修改了哪些内容
之后的内容下发就是将内容写入etcd,相对来说比较容易。
相关的页面和代码比以往要多,放到 这里
原文地址:https://www.cnblogs.com/wbjxxzx/p/12112441.html
时间: 2024-10-31 19:55:51