绞杀者模式(Strangler Pattern)是一种非常流行的从单体系统向微服务迁移的策略,其主张通过用新服务替换特定功能来将单体系统逐步转换为微服务,一旦新服务已经能够代替原有旧有功能,就将原有功能组件绞杀(即彻底停用)。
基于绞杀者模式将单体系统拆分为微服务的时候,任何新的开发都应该作为新服务的一部分,而不是单体系统,这保证了新的开发领域的代码具有较高的质量。建议在编写业务逻辑时遵循测试驱动开发(Test-Driven Development, TDD),并将SonarQube与部署管道集成,以避免产生任何技术债务。
借助绞杀者模式从单体系统向微服务系统迁移可以大致简化为三个步骤,即转化、共存和消亡。
简而言之,就是开发一个新组件(即微服务),让新组建和旧组件共存一段时间,最终消除旧组件。大致步骤如下:
- 最初,所有访问应用的流量都路由到旧版系统。
- 构建新组件后,可以对单体系统代码与新功能一起进行测试。
- 单体系统和新组件需要共同运行一段时间,这段过渡时间可能会较长。
- 对新组件进行增量开发和测试后,可以完全停用旧的单体系统。
如何选择首先要绞杀/重构的组件?
- 如果您是首次使用绞杀者模式,并且之前对这种模式并不是非常熟悉,此时建议从绞杀简单的组件开始尝试,这样一来也为绞杀复杂组件提供了知识储备和最佳实践。
- 如果某个组件的测试覆盖率较高,并且相关的技术债务较少,那么可以考虑从该组件开始较少,这样易于帮助团队建立信心。
- 如果某些组件对于可伸缩性具有较高的要求,可以从这些组件之一开始。
- 如果某个组件的业务需求比较频繁而需要定期部署,则可以从该组件开始。这将降低单体系统重新部署的频率,并且便于对于需求变更较为频繁的组件进行独立扩展和部署。