场景1(正常工作):这里的情况很好:我有2个可公开访问的无状态服务Foo和Bar
8081
8082
向http://clusteruri:8081
或http://clusteruri:8082
发送请求的工作正常,我发现对于Foo,请求很好地分布在托管这两个实例的两个节点之间。
场景2(不工作):这里是我要启用的场景:再次为2无状态服务Foo和Bar
http://+:8080/foo
http://+:8080/bar
请注意,这两个服务都会侦听相同的端口,但路径不同(通过使用构建在http.sys之上的主机(如WebListener)实现)。
这里的事情开始变得奇怪:似乎ASF /负载均衡器并不真正理解它并且认为所有3个节点只是在端口8080上侦听,从而导致一些请求Foo最终在节点托管Bar上以及另一种方式轮。
似乎ASF /负载均衡器能够自动处理服务侦听专用端口的情况,但实际上并不支持在同一端口(但路径不同)上侦听服务。
我的问题
答案 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/