负载平衡侦听URI前缀的Azure Service Fabric服务

时间:2016-07-12 06:32:41

标签: azure azure-service-fabric

场景1(正常工作):这里的情况很好:我有2个可公开访问的无状态服务Foo和Bar

  • Foo:2个实例,侦听端口8081
  • Bar:1个实例,侦听端口8082

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

场景2(不工作):这里是我要启用的场景:再次为2无状态服务Foo和Bar

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

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

这里的事情开始变得奇怪:似乎ASF /负载均衡器并不真正理解它并且认为所有3个节点只是在端口8080上侦听,从而导致一些请求Foo最终在节点托管Bar上以及另一种方式轮。

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

我的问题

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

1 个答案:

答案 0 :(得分:2)

Service Fabric没有网络负载均衡器。 Service Fabric只是在一组VM上运行的集群/编排/应用程序平台。当您通过ARM(或Azure门户)在Azure中创建集群时,您在标准ARM模板中获得的资源之一是Azure负载均衡器,但它只是一个完全独立的事情,只知道您正在部署的虚拟机,而不是在他们身上运行的服务。您可以在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/