docker - 在不中断当前执行的情况下升级微服务
问题描述
假设您有一个微服务架构,其拓扑包含两个服务 A 和 B,每个服务都运行 3 个实例。
A 它是一个接收 Web 请求的 Web 服务,B 它是一个基于 cli 的应用程序,用于侦听队列中的事件
现在你想部署一个新版本的 B,但是因为 B 的实例现在可以处理信息。
如何在不中断当前执行的情况下进行部署,用新实例替换旧实例?
有任何工具、模式或策略可以处理这种情况吗?
解决方案
您需要一个简单的策略,停止为即将部署的实例提供对 B 的新请求。如果它使用休息来消耗事件,那么您可以使用负载均衡器,如果您有负载均衡器,那么使用领事,领事模板,您可以将该实例与负载均衡器分离。保持大约 5 分钟(您需要评估),然后开始部署。如果您不确定如何确定当前实例是否已完成现有事件的所有处理,则必须使用此方法。如果这些事件是使用 MQ 消费的,那么您可以调用一个端点,该端点将禁用新的事件消费。然后有相同的等待和部署策略。
推荐阅读
- git - git 添加 . 失败,抱怨目录不存在
- reactjs - React + Redux:TypeError:无法读取未定义的属性“推送”
- amazon-web-services - AWS Codebuild 在 EB Deploy 上失败 - GIT:无法遍历提交的父项
- r - 基于内部列表元素值的列表子集列表
- android - 如何将 HTML5 网站部署为移动应用程序?
- c - 使用 getchar() 和 putchar() 进行文件复制
- arrays - 结构体数组初始化
- javascript - 使用锚标记在 div 上滚动的 Jquery 无法正常工作
- web-scraping - 当“按钮”输入字段没有名称时如何使用 Python 请求登录
- swift - 迅速。将北向表示为航向方向的范围