【问题标题】:Scaling of Azure service fabric Stateless servicesAzure 服务结构无状态服务的扩展
【发布时间】:2016-08-04 22:06:54
【问题描述】:

您能否让我更好地了解我们如何在不进行分区的情况下扩展无状态服务?

假设我们在一个集群中有 5 个节点,并且我们有 5 个服务实例。在简单的测试中,一个节点表现得像粘性一样,我发送的所有请求都只由一个节点提供服务。在我们有大量请求进入的场景中,是否可以自动使用其他实例来服务流量。我们如何处理服务结构中的这种横向扩展情况?

谢谢!

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    通常情况下,无状态 SF 服务不需要使用分区,因此请尽量避免:

    more on SF partitioning, including why its not normally used for stateless services

    如果您使用 ServiceProxy API,它将保持与集群中给定物理节点的粘性连接。如果您(比如说)公开 HTTP 端点,那么集群中的每个物理实例都会有一个(这意味着您最终一次只能与一个通信,除非您手动循环通过它们)。您可以通过以下方式避免这种情况:

    1. 为每个调用创建一个新的代理实例,如果你经常这样做,这往往会很昂贵(或者手动循环遍历实例端点 URL 列表,这可能很乏味和/或很昂贵)

    2. 在集群前面放置一个负载均衡器,并配置从客户端到 SF 节点的所有流量以通过它转发。负载均衡器可以配置为 Round-Robin 等样式语义:

    Azure Load Balancer

    Azure Traffic Manager

    祝你好运!

    【讨论】:

    • 我为所有调用使用了一个代理实例,我认为这就是我无法访问其他节点的原因。你说“如果你做很多,它会很贵”。我正在使用 Web 服务,并且 Api 端点将开始创建代理,并且该端点会受到很多影响。不是推荐的方式吗? @JoshL
    • 你在正确的轨道上,是的。唯一需要考虑的是集群中的每个无状态实例都有自己唯一的端点,因此如果您希望任何实例都可以处理请求,那么您将需要一些机制来确保这种情况发生。 SF 不为你做这个(还)。我上面提到的两种方法是可行的选择。
    • 如果我在集群中有一个 web api 和一个常规的无状态服务,我在从 web api 调用服务时是否仍然需要一个负载均衡器,以免在每个节点上都使用一个节点打电话?
    • 是的,您仍然需要我上面概述的解决方案之一。
    • 我在寻找使用 SF 的分布式计算(map/reduce 风格)问题的解决方案时遇到了这个问题。在这种情况下,无状态服务分区会不会很理想? - 没有状态,我想使用多个节点。
    【解决方案2】:

    您可以使用安装在每个节点上的反向代理来查询请求。使用https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reverseproxy

    然后反向代理会为您解析端点。如果您有多个无状态服务实例,那么它会将您的请求转发给一个随机实例。

    如果在重负载期间您可以增加服务和代理的实例数,则自动包含新实例。

    【讨论】:

    • 如何在加载过程中自动增加实例数,然后再减少?
    • 您必须有一个测量负载的平均值,然后触发增加/减少实例计数。您可以创建一个监视应用程序来监控性能(CPU 使用率、队列消息计数等),然后自动更新实例计数。
    【解决方案3】:

    我假设您是从集群外部调用您的服务。如果是,则您的问题不是特定于 Service Fabric,而是 Azure VMSS + LB。

    Service Fabric 在虚拟机规模集之上运行,这些 VM 在负载均衡器后面创建,当客户端连接到您的服务时,它们会通过负载均衡器创建与您的服务的连接,只要连接打开,负载均衡器分配一个目标 VM 来处理您的请求,并且从您的客户端发出的任何请求,在使用相同的连接(保持活动状态)时,都将由同一节点处理,这就是您的负载转到单个节点的原因。

    LB不会轮询请求,因为它们使用相同的连接,这是LB的限制(功能),要解决此问题,您应该打开多个连接或使用多个客户端(实例)。

    这是默认分发模式(基于哈希)。您还必须检查 LB 中的路由规则,以检查分发模式是 基于哈希的(5 tuple= ip+port)还是 IP 亲和模式 (仅限 ip),否则来自同一 IP 的多个连接仍将链接到同一节点。

    来源:Azure Load Balaner Distribution Mode

    【讨论】:

      猜你喜欢
      • 2018-08-30
      • 1970-01-01
      • 2016-12-04
      • 2017-05-23
      • 2018-12-09
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多