基础设施代码重构:特性标志与单体架构拆分实践
特性标志的使用与管理
特性标志是一种在基础设施代码重构中常用的技术,它可以帮助我们隐藏或隔离基础设施资源、属性和依赖的变化。在完成变更后,通常应该移除特性标志,因为过多的特性标志会使基础设施代码变得复杂,增加故障排查的难度。
特性标志的常见用例包括:
- 协作时避免对同一基础设施资源或依赖的变更冲突。
- 阶段性地进行一组变更,并通过更新标志快速部署。
- 测试变更,并在失败时迅速禁用。
然而,更改特性标志可能会对系统造成干扰。例如,在sundew团队的服务器示例中,不能简单地将特性标志设置为true就期望服务器正常运行应用程序。我们需要结合其他技术,如滚动更新,来减少对系统的影响。
单体架构的问题与拆分必要性
单体架构的基础设施代码将所有资源定义在一个地方,这会导致团队成员在进行变更时需要解决冲突,并且变更部署时间长。例如,sundew团队的系统中,由于存在包含数百个资源和属性的单例配置,每次变更都需要花费30分钟,并且容易产生冲突。
为了减少团队成员之间的工作冲突,加快变更部署速度,我们需要将单体架构的基础设施代码拆分为更小、更模块化的组件。
单体架构与单仓库的区别
将基础设施配置放在单个仓库中并不一定意味着采用了单体架构。我们可以将单个仓库细分为不同的子目录,每个子目录包含独立的基础设施代码。
单体架构意味着将许多资源紧密耦合在一起管理,难以独立更改其中的一部分。这种架构通常源于最初的单例模式,并随着时间的推移不断扩展。