负载平衡侦听 URI 前缀的 Azure Service Fabric 服务
Load balancing Azure Service Fabric services listening on URI prefix
场景 1(有效):这里的场景运行良好:我有 2 个可公开访问的无状态服务 Foo 和 Bar
- Foo: 2 个实例,侦听端口
8081
- 栏:1 个实例,侦听端口
8082
向 http://clusteruri:8081
或 http://clusteruri:8082
发送请求工作正常,我看到对于 Foo,请求很好地分布在托管两个实例的两个节点之间。
场景 2(不工作):这里是我想启用的场景:再次是 2 个无状态服务 Foo 和 Bar
- Foo: 2 个实例,侦听 URI 前缀
http://+:8080/foo
- 栏:1 个实例,侦听 URI 前缀
http://+:8080/bar
请注意,这两个服务在 相同端口上侦听,但路径不同 (通过使用构建在 http.sys 之上的主机实现,如 WebListener) .
这里事情开始变得奇怪:似乎 ASF/load 平衡器并没有真正理解它并认为所有 3 个节点都只监听端口 8080 导致一些对 Foo 的请求最终在节点托管 Bar 上结束反之亦然。
似乎 ASF/load 平衡器能够自动处理服务在专用端口上侦听的场景,但并不真正支持在同一端口(但不同路径)上侦听的服务。
我的问题
- 有没有办法让场景 2 像场景 1 一样工作"out of the box"(即不实施执行路由的自定义应用程序网关服务)?
- 有人可以解释一下 ASF configures/communicates 如何让场景 1 正常工作吗? IE。我在哪里可以 "see" ASF 配置负载均衡器,请求 Foo 应该转到 Node0 或 Node1,而对 Bar 的请求应该转到 Node2,具体取决于请求发送到哪个端口?
Service Fabric 没有网络负载平衡器。 Service Fabric 只是在一组 VM 上运行的 clustering/orchestration/application 平台。当你通过 ARM(或 Azure 门户)在 Azure 中创建集群时,你在标准 ARM 模板中获得的资源之一是 Azure 负载均衡器,但它是一个完全独立的东西,只知道你正在部署的 VM ,而不是它们上的服务 运行。负载均衡器的配置是您在 ARM 模板中执行的操作(或再次通过 Azure 门户)。 Service Fabric 不知道负载均衡器。如果您在自己的硬件上设置集群,这与您期望的拓扑相同。
方案 1 在 Azure 中有效而方案 2 无效的原因是因为 Azure 负载均衡器是第 4 层负载均衡器:它了解开放端口但不了解 HTTP 和 URL 等应用程序协议,并且不不知道您的节点上有不同的应用程序 - 它看到的只是开放端口。但是,ALB 确实允许您设置 HTTP probes 来告诉 ALB 将流量发送到哪些节点。
这里有一些可能有用的背景信息:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/
场景 1(有效):这里的场景运行良好:我有 2 个可公开访问的无状态服务 Foo 和 Bar
- Foo: 2 个实例,侦听端口
8081
- 栏:1 个实例,侦听端口
8082
向 http://clusteruri:8081
或 http://clusteruri:8082
发送请求工作正常,我看到对于 Foo,请求很好地分布在托管两个实例的两个节点之间。
场景 2(不工作):这里是我想启用的场景:再次是 2 个无状态服务 Foo 和 Bar
- Foo: 2 个实例,侦听 URI 前缀
http://+:8080/foo
- 栏:1 个实例,侦听 URI 前缀
http://+:8080/bar
请注意,这两个服务在 相同端口上侦听,但路径不同 (通过使用构建在 http.sys 之上的主机实现,如 WebListener) .
这里事情开始变得奇怪:似乎 ASF/load 平衡器并没有真正理解它并认为所有 3 个节点都只监听端口 8080 导致一些对 Foo 的请求最终在节点托管 Bar 上结束反之亦然。
似乎 ASF/load 平衡器能够自动处理服务在专用端口上侦听的场景,但并不真正支持在同一端口(但不同路径)上侦听的服务。
我的问题
- 有没有办法让场景 2 像场景 1 一样工作"out of the box"(即不实施执行路由的自定义应用程序网关服务)?
- 有人可以解释一下 ASF configures/communicates 如何让场景 1 正常工作吗? IE。我在哪里可以 "see" ASF 配置负载均衡器,请求 Foo 应该转到 Node0 或 Node1,而对 Bar 的请求应该转到 Node2,具体取决于请求发送到哪个端口?
Service Fabric 没有网络负载平衡器。 Service Fabric 只是在一组 VM 上运行的 clustering/orchestration/application 平台。当你通过 ARM(或 Azure 门户)在 Azure 中创建集群时,你在标准 ARM 模板中获得的资源之一是 Azure 负载均衡器,但它是一个完全独立的东西,只知道你正在部署的 VM ,而不是它们上的服务 运行。负载均衡器的配置是您在 ARM 模板中执行的操作(或再次通过 Azure 门户)。 Service Fabric 不知道负载均衡器。如果您在自己的硬件上设置集群,这与您期望的拓扑相同。
方案 1 在 Azure 中有效而方案 2 无效的原因是因为 Azure 负载均衡器是第 4 层负载均衡器:它了解开放端口但不了解 HTTP 和 URL 等应用程序协议,并且不不知道您的节点上有不同的应用程序 - 它看到的只是开放端口。但是,ALB 确实允许您设置 HTTP probes 来告诉 ALB 将流量发送到哪些节点。
这里有一些可能有用的背景信息:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/