version-control - 微服务和版本控制如何处理部署
问题描述
我目前正在尝试弄清楚如何使用微服务处理版本控制。
根据我的阅读,最好的策略是为每个微服务拥有一个单独的 git 存储库。
然而,在部署时必须上传多个 git 存储库似乎相当复杂。
具体来说,我正在摸索如何在多个微服务需要相互依赖的更改的情况下部署更新,以及在生产部署出现问题时如何回滚到以前的版本。
这似乎是大多数使用微服务的开发人员不得不面对的一个难题。
任何建议都将不胜感激,特别是如果可以使用现有库而不是从头开始构建一些东西,
谢谢,西蒙
解决方案
没有简单的答案或库可以解决问题,但是有一些策略可以提供帮助。我在下面概述了一些
服务的向后兼容性 - 每当您发布时,请确保您的 API(REST 或其他)与以前的使用者一起使用,这可以通过证明较新属性的默认值来完成。
API 的版本控制 - 当您所做的更改不小且具有破坏性时,请引入新版本的 API,以便老用户可以继续使用以前的版本。
Canary 部署 - 当您部署新版本的微服务时,只有一小部分对新服务的调用和之前版本的其余部分。观察行为并在需要时回滚。
蓝绿部署 - 有两个生产环境,一个蓝色被证明可以工作,另一个绿色正在暂存包含最新版本。当测试完成绿色环境并且您有足够的信心时,将所有呼叫路由到绿色。
参考
推荐阅读
- postgresql - 如何使用 -f 选项将 sql 脚本文件列表传递给 psql
- sql - SQL Server:根据 ID 更新值而不插入表
- php - 列出带有帖子的 WordPress 类别和子类别
- simulink - Simulink 和 arduino 串行通信
- javascript - clearInterval(intervalId) 只是停止间隔,它并没有真正清除它
- angular - 需要使用 karma jasmine 解决组件的服务依赖错误
- google-bigquery - Bigquery 标准 SQL“max_by”和“regr_slope”函数
- python - 使用美丽的汤访问脚本标签内的字典
- openebs - 在创建 cStor 池之前是否需要格式化磁盘?
- java - 文件输入到 Spring Boot 应用程序