在升级期间滚动流式连接

时间:2015-03-24 23:43:53

标签: rest http data-stream

我正在开发一个使用Amazon Kinesis的应用程序,我想知道的一件事是如何在升级期间翻转应用程序而不会在数据流上丢失数据。我听说过蓝色/绿色部署等等,但我想知道升级数据流服务的最佳做法是什么,这样你就不会从流中丢失数据。

例如,我的应用程序有一个HTTP端点,它将数据作为一系列POST操作提取。如果我想用更新版本替换服务,如何管理现有应用程序流到我的端点?

1 个答案:

答案 0 :(得分:0)

一种常见方法是使用具有虚拟IP的软件负载平衡器(LB);在此LB之后,在正常操作期间将至少有两个HTTP摄取端点。在升级期间,每个端点都会被轮流宣布并升级。 LB确保没有流量被转发到已宣布的端点。

(端点本身可以​​位于不同的VM,Docker容器或物理节点上)。

当然,流需要是有限的; TCP套接字/ HTTP流由其中一个端点拥有。但是,只要流可以正常停止,以下流程就会起作用,假设端点A拥有当前的摄取:

  1. 告知端点A不接受新流。所有新流将由LB重定向到端点B.
  2. 优雅地停止端点A上的现有流。
  3. 升级A.
  4. 宣布回来。
  5. 用终点B冲洗并重复。
  6. 作为一个侧面点,如果您需要任何合理的正常运行时间和可靠性保证,则需要两个具有负载平衡(或主/从)设置的端点。

    有更多的定制方法允许在同一端点上进行热代码交换,但它们更具定制性并依赖于特定的内部设计(例如,由IPC连接的网络和处理堆栈之间的单独进程)。