【问题标题】:Load balancing Azure Service Fabric services listening on URI prefix对监听 URI 前缀的 Azure Service Fabric 服务进行负载平衡
【发布时间】:2016-07-14 01:16:15
【问题描述】:

场景 1(工作):这里的场景运行良好:我有 2 个可公开访问的无状态服务 Foo 和 Bar

  • Foo: 2 个实例,监听端口8081
  • 栏:1 个实例,监听端口 8082

http://clusteruri:8081http://clusteruri:8082 发送请求可以正常工作,我发现对于 Foo,请求很好地分布在托管两个实例的两个节点之间。

场景 2(不工作):这里是我想要启用的场景:同样是 2 个无状态服务 Foo 和 Bar

  • Foo: 2 个实例,监听 URI 前缀 http://+:8080/foo
  • 栏:1 个实例,监听 URI 前缀 http://+:8080/bar

请注意,这两个服务都侦听相同的端口,但路径不同(通过使用构建在 http.sys 之上的主机,如 WebListener 来实现)。

这里的事情开始变得奇怪了:似乎 ASF/负载均衡器并没有真正理解它,并认为所有 3 个节点都只是在端口 8080 上侦听,导致对 Foo 的一些请求最终在托管 Bar 的节点上结束,反之亦然圆。

似乎 ASF/负载均衡器能够自动处理服务侦听专用端口的情况,但并不真正支持服务侦听同一端口(但路径不同)。

我的问题

  • 有没有办法让场景 2 像在场景 1 中一样“开箱即用”地工作(即,不实现执行路由的自定义应用网关服务)?
  • 有人可以解释一下 ASF 如何配置/通信以使场景 1 正常工作吗? IE。我在哪里可以“看到” ASF 配置了负载均衡器,即对 Foo 的请求应该发送到 Node0 或 Node1,而对 Bar 的请求应该发送到 Node2,具体取决于请求发送到哪个端口?

【问题讨论】:

  • 您能分享一下您的通信监听器的代码吗?以及如何创建代理。

标签: azure azure-service-fabric


【解决方案1】:

Service Fabric 没有网络负载平衡器。 Service Fabric 只是在一组 VM 上运行的集群/编排/应用程序平台。当您通过 ARM(或 Azure 门户)在 Azure 中创建集群时,您在标准 ARM 模板中获得的资源之一是 Azure 负载均衡器,但它是一个完全独立的东西,只知道您正在部署的 VM ,而不是在它们上面运行的服务。负载均衡器的配置是您在 ARM 模板中(或再次通过 Azure 门户)执行的操作。 Service Fabric 不了解负载均衡器。如果您在自己的硬件上设置集群,这与您所期望的拓扑相同。

场景 1 有效而场景 2 在 Azure 中无效的原因是 Azure 负载均衡器是第 4 层负载均衡器:它理解开放端口但不理解 HTTP 和 URL 等应用程序协议,并且不理解你的节点上有不同的应用程序——它看到的只是开放的端口。但是,ALB 确实允许您设置 HTTP probes,告诉 ALB 将流量发送到哪些节点。

这里有一些可能有用的背景信息:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-connect-and-communicate-with-services/

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 2019-03-21
    • 2018-10-14
    • 2021-06-22
    • 2016-02-20
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多