首页 > 解决方案 > 如何实现具有持久连接的有状态应用程序的负载平衡 - Envoy 和 Rsocket

问题描述

我正在研究服务器和客户端的架构模型,它们都通过 Rsocket 连接进行连接。我使用 Envoy 为服务器配置了一个负载均衡器。请求流程如下所示,

假设我有 3 个服务器实例和 1 个代理实例。

  1. 代理将使用其标头连接到任何一台服务器(使用 Envoy 中的 MAGLEV 负载平衡策略)。
  2. 所有后续请求都应定向到代理连接所在的特定服务器。

但是,如果我按比例放大/缩小服务器实例,则标头哈希值将被重新哈希,并且后续请求将重定向到代理连接(以前连接 - 仍驻留在旧服务器实例中)不存在于新服务器中的不同服务器实例实例。

因此,一种可能的解决方案是通过识别持有代理连接的正确服务器实例(需要对服务器代码进行一些更改)在服务器之间进行重定向。但我不太确定这是最好的解决方案。所以,我想知道我是否可以使用任何 Envoy 配置来解决这个问题,或者我可以实施什么逻辑来缓解这个问题。

标签: load-balancingenvoyproxystatefulservicemeshrsocket-java

解决方案


推荐阅读