【问题标题】:Can I use load balancer for scaling Azure Service Fabric apps我可以使用负载均衡器来扩展 Azure Service Fabric 应用吗
【发布时间】:2015-10-14 09:47:54
【问题描述】:

最近了解了 Azure Service Fabric,这似乎是一种将可扩展应用程序开发为一组微服务的好方法。到处都在告诉我们,我们需要有无状态的前端 Web 服务和有状态的分区内部服务。内部服务scale by partitioning the data

但是负载中的前端服务会发生什么? .机会很小,因为他们除了依赖内部有状态服务什么都不做。我们仍然应该在前端服务之前使用负载均衡器吗?如果是这样,我们是否也可以使用 OWIN 或任何其他 Web 主机通过 Service Fabric 的无状态模型来托管相同的内容?

这个问题已经在 SO 中提出,但作为评论。它没有得到答复,因为原始问题不同。 Azure Service Fabric usage

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    是的,您肯定也希望在无状态服务之间分配负载。主要区别在于,由于它们是无状态的,它们可以以循环方式处理请求。

    有状态服务有分区,映射到服务状态的各个块,而无状态服务只是有实例,它们是彼此相同的克隆,只是在不同的节点上。您可以在应用程序清单中的默认服务定义中设置实例数。例如,此声明将确保集群中始终运行 5 个无状态服务实例:

    <Service Name="Stateless1">
       <StatelessService ServiceTypeName="Stateless1Type" InstanceCount="5">
         <SingletonPartition />
       </StatelessService>
    </Service>
    

    您还可以将 InstanceCount 设置为 -1,在这种情况下,Service Fabric 将在每个节点上创建您的无状态服务实例。

    Azure 负载平衡器将在每个实例之间循环您的传入流量。不幸的是,目前还没有一种在一体机环境中模拟这种情况的好方法。

    【讨论】:

    • 为什么不能在单机环境下模拟呢?当我尝试使用 Web 端点(TCP/端口 80)向服务添加更多实例时,它抱怨端口 80 很忙。是这个问题吗?
    • 两个原因:1) Azure 负载均衡器在 Service Fabric 外部,并且没有本地等效项。 2)你不能让多个进程在一台机器上监听完全相同的端点/端口。
    • @SeanMcKenna-MSFT 第二条语句本身并不正确,因为 Windows 具有 TCP 端口共享功能,允许许多进程在同一个端口上侦听但具有不同的 URI。好像如果 URI 有一些唯一的 id,那么你可以解决这个问题。或者如果可能的话,让他们在临时端口上侦听并在本地自动注册到诸如 nginx 之类的东西,它在端口 80 上侦听,然后循环到已注册的本地实例。看到这些 cmets 后头脑风暴....
    • @Csaba:是的,当我说“完全相同的端点/端口”时,我指的是完整的 URI 路径。所以你可以有一个进程句柄localhost:8081/foo 和另一个句柄localhost:8081/bar 但不能两个同时处理一个或另一个。您可以让 Service Fabric 为每个实例分配一个动态端口,然后按照您的建议构建您自己的小型负载均衡器。但是,这本身就是对真实环境的不准确表示,并且对于本地和云进行不同的配置有点困难。
    • 了解 Azure 负载均衡器以集群中的每台计算机为目标也很重要。当您使用例如 InstanceCount=2 而不是 InstanceCount=-1 时,Azure 负载均衡器不知道这些实例放置在哪些机器上,因此默认情况下它还会将流量路由到没有该服务的机器。您将不得不依赖每个服务的自定义探测(这会在 SF 移动服务时导致错误),或者您可以使用单独的 nodeTypes 并将服务和负载均衡器绑定到此池。但是,这也有缺点,并使 IMO 的集群设置更加复杂。
    猜你喜欢
    • 2021-06-22
    • 2017-08-13
    • 1970-01-01
    • 2020-09-09
    • 2020-09-02
    • 2019-10-29
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多