使用 HTTP2 的 AWS 应用程序负载均衡器
AWS Application Load Balancer with HTTP2
我有一个 RESTful 应用程序部署在负载均衡器后面的许多 EC2 实例上。
身份验证部分由名为 "X-App-Key".
的自定义请求 header 处理
我刚刚将我的经典负载均衡器迁移到应用程序负载均衡器,我开始遇到间歇性问题,其中一些有效请求(通过使用 CURL 测试)无法对某些用户进行身份验证。看起来自定义请求 header 只是间歇性地通过。使用 apache bench 大约 500 个请求中有 100 个失败。
如果我使用经典负载均衡器进行测试,所有 500 个都成功。
我对此进行了更多调查,发现失败的用户使用的是稍新版本的 CURL,特别是来自这些用户的请求使用的是 HTTP2。如果我将“--http1.1”添加到 CURL 请求,它们都可以正常通过。
因此,这些问题似乎特定于我们使用自定义请求 header 以及新一代应用程序负载平衡器和 HTTP2。
我是不是做错了什么?!
您可能需要在负载均衡器中启用 Sticky sessions。
需要它们来保持对同一实例的会话打开。
但是,在应用程序级别需要保持会话处于活动状态,并且在某些服务中并不是很有用,(取决于您系统的性质,不推荐) 因为它降低了类似 REST 的系统的性能。
我在这个 post...
上找到了答案
AWS Application Load Balancer transforms all headers to lower case
headers 似乎是小写的 ALB。我需要更新我的后端来支持这个
我有一个 RESTful 应用程序部署在负载均衡器后面的许多 EC2 实例上。 身份验证部分由名为 "X-App-Key".
的自定义请求 header 处理我刚刚将我的经典负载均衡器迁移到应用程序负载均衡器,我开始遇到间歇性问题,其中一些有效请求(通过使用 CURL 测试)无法对某些用户进行身份验证。看起来自定义请求 header 只是间歇性地通过。使用 apache bench 大约 500 个请求中有 100 个失败。 如果我使用经典负载均衡器进行测试,所有 500 个都成功。
我对此进行了更多调查,发现失败的用户使用的是稍新版本的 CURL,特别是来自这些用户的请求使用的是 HTTP2。如果我将“--http1.1”添加到 CURL 请求,它们都可以正常通过。
因此,这些问题似乎特定于我们使用自定义请求 header 以及新一代应用程序负载平衡器和 HTTP2。
我是不是做错了什么?!
您可能需要在负载均衡器中启用 Sticky sessions。
需要它们来保持对同一实例的会话打开。
但是,在应用程序级别需要保持会话处于活动状态,并且在某些服务中并不是很有用,(取决于您系统的性质,不推荐) 因为它降低了类似 REST 的系统的性能。
我在这个 post...
上找到了答案AWS Application Load Balancer transforms all headers to lower case
headers 似乎是小写的 ALB。我需要更新我的后端来支持这个