【问题标题】:Rolling Over Streaming Connections During Upgrades在升级期间翻转流连接
【发布时间】:2015-03-26 05:43:45
【问题描述】:
我正在开发一个使用 Amazon Kinesis 的应用程序,我想知道的一件事是如何在升级期间滚动应用程序而不会丢失流上的数据。我听说过诸如蓝/绿部署之类的事情,但我想知道升级数据流服务的最佳做法是什么,这样您就不会从流中丢失数据。
例如,我的应用程序有一个 HTTP 端点,它以一系列 POST 操作的形式摄取数据。如果我想用更新的版本替换服务,如何管理现有应用程序流式传输到我的端点?
【问题讨论】:
标签:
rest
http
data-stream
【解决方案1】:
一种常见的方法是使用带有虚拟 IP 的软件负载平衡器 (LB);在此 LB 后面,在正常操作期间将至少有两个 HTTP 摄取端点。在升级过程中,每个端点都会依次公布和升级。 LB 确保没有流量转发到已宣布的输出端点。
(端点本身可以位于不同的虚拟机、Docker 容器或物理节点上)。
当然,流需要是有限的; TCP 套接字/HTTP 流由端点之一拥有。但是,只要流可以正常停止,假设端点 A 拥有当前摄取,以下流程就可以工作:
- 告诉端点 A 不要接受新的流。 LB 将所有新流仅重定向到端点 B。
- 优雅地停止端点 A 上的现有流。
- 升级A.
- 宣布 A 重新加入。
- 冲洗并用端点 B 重复。
顺便说一句,如果您需要任何合理的正常运行时间和可靠性保证,您将需要两个具有负载平衡(或主/从)设置的端点。
有更多的定制方法允许在同一端点上进行热代码交换,但它们更定制并且依赖于特定的内部设计(例如,网络和由 IPC 连接的处理堆栈之间的独立进程)。