我正在开发一个使用 Amazon Kinesis 的应用程序,我想知道的一件事是如何在升级期间滚动应用程序而不会丢失流上的数据。我听说过诸如蓝/绿部署之类的事情,但我想知道升级数据流服务的最佳做法是什么,这样您就不会从流中丢失数据。
例如,我的应用程序有一个 HTTP 端点,它以一系列 POST 操作的形式摄取数据。如果我想用更新的版本替换服务,我如何管理现有的应用程序流到我的端点?
我正在开发一个使用 Amazon Kinesis 的应用程序,我想知道的一件事是如何在升级期间滚动应用程序而不会丢失流上的数据。我听说过诸如蓝/绿部署之类的事情,但我想知道升级数据流服务的最佳做法是什么,这样您就不会从流中丢失数据。
例如,我的应用程序有一个 HTTP 端点,它以一系列 POST 操作的形式摄取数据。如果我想用更新的版本替换服务,我如何管理现有的应用程序流到我的端点?
一种常见的方法是使用带有虚拟 IP 的软件负载平衡器 (LB);在这个 LB 后面,在正常操作期间至少会有两个 HTTP 摄取端点。在升级过程中,每个端点都会依次公布和升级。LB 确保没有流量转发到已宣布的输出端点。
(端点本身可以位于不同的虚拟机、Docker 容器或物理节点上)。
当然,流需要是有限的;TCP 套接字/HTTP 流由端点之一拥有。但是,只要流可以正常停止,假设端点 A 拥有当前摄取,以下流程就可以工作:
另外,如果您需要任何合理的正常运行时间和可靠性保证,您将需要两个具有负载平衡(或主/从)设置的端点。
有更多的定制方法允许在同一端点上进行热代码交换,但它们更定制并且依赖于特定的内部设计(例如,网络和由 IPC 连接的处理堆栈之间的单独进程)。