增量变更 描述了软件架构的两个方面:如何增量地构建软件和如何部署软件。
在开发阶段,允许小的增量变更的架构更易于演进,因为对于开发者来说,变更范围相对更小。对部署而言,增量变更指业务功能的模块化和解耦水平,以及它们是如何映射到架构中去的。示例如下。
假设有一个小工具商家 PenultimateWidgets,该商家采用微服务架构和一些现代工程实践运营着一个产品目录页面。该页面的一个功能是让用户给出小工具的星级评分。PenultimateWidgets 的其他一些业务也需要评分,比如客服代表、物流服务商评价等,所以这些业务共享星级评分服务。某天,该服务的开发团队发布了新版本,新版本允许用户给出半星评价(一个小而重要的升级)。其他需要评分的服务不需要强制升级,而可以逐渐地在合适的时候迁移到新版本。PenultimateWidgets 的 DevOps 实践采用了架构级别的监控,不仅监控各个服务,还监控服务与服务之间的路由。当运营人员观察到在给定时间内没有请求路由至特定服务时,他们自动将该服务从体系中移除。
这是一个在架构级别进行增量变更的例子:如有需要,原服务和新服务可以并存。团队可以在适当(不太忙或必要)的时候完成迁移,当所有迁移都完成时,旧版本的服务将会作为垃圾被自动回收。
增量变更的成功需要一些持续交付实践的配合。并不是任何情况都需要所有这些实践,但通常它们会一起发生。第 3 章将讨论实现增量变更的方法。