代码之家  ›  专栏  ›  技术社区  ›  teeboy

服务织物是否为每个有状态分区创建单实例?

  •  1
  • teeboy  · 技术社区  · 7 年前

    假设我在5节点集群上创建了一个带有5个分区的有状态服务架构服务。我看到每个节点都有一个分区。当我在VS中调试服务时,我注意到服务架构正在跨越所有5个分区创建有状态服务(每个分区基本上是1个静态实例)的5个实例。不管客户机调用了多少次,这个类只有5个实例可以满足来自的请求。 以下陈述是真的吗?

    • 状态服务中的任何类级成员变量本质上都是静态的(因为它分解为该分区上的一个实例),因此在更新时需要“锁定”语义。

    • 由于客户端总是为给定的分区解析为类的“相同”实例,客户端可以重新使用“代理”实例吗?

    • 当大量客户端每秒调用相同的服务实例时,这种“单点”状态服务创建模型如何影响性能和可伸缩性。[重载情况下] 我理解在配置V2远程侦听器时有一个设置,我们可以通过“FuffTrimeTrimeTimeListNevices设置”来指定“Max CurrurtCut来电”。
    2 回复  |  直到 7 年前
        1
  •  1
  •   Diego Mendes    7 年前

    这里有一些误解:

    实例不同于进程 当您说您可以在VisualStudio上看到实例时,实际上看到的是进程。有些情况下,您可以在单个进程中拥有多个实例,VisualStudio只显示一个,但实际上有5个(在您的情况下)。这是由 SF Hosting Model 配置,在你定义它应该如何运行的地方,我已经回答了相关的问题 here #1 here #2

    另一个是, 无状态服务有实例,有状态服务有分区和副本 . 基于此,您所看到的不是实例,它们是主副本(如果定义了复制和GT;1,则可能是次要的)。在文档中查看更多详细信息 here

    给定前面的细节,当您对服务进行分区时,取决于您使用的主机模型,它可以在同一进程上创建多个副本,或者每个进程创建多个副本。

    所有这些都只有一个捕获,来自同一分区的副本数量受限于每个节点1个,为了获得更多的信息,请看一下。 this issue on github

    关于你的问题:

    不管客户打了多少电话,只有5个实例 为这个类的请求提供服务。以下是声明吗 是真的吗?

    不!

    如果您正在谈论对ASP.NET端点或远程调用的请求,这不影响实例计数,实例由SF配置定义,并且客户端请求不会影响它,它将根据可用的实例在您如何平衡这些请求之间进行拆分。这些请求影响实例计数的唯一方式是在服务中定义自动缩放。

    当启动无状态\状态服务的新实例副本时(在同一进程内或外部),创建新对象。对这些服务的调用可能总是指向同一个对象,但并非总是如此,因为SF可能重新平衡服务并杀死这些实例,以在其他地方创建新的,或者在失败的情况下创建新实例。

    对于有状态服务也有这样的情况,除非只对一个副本指定读操作,否则调用只能转到主副本。如果次要被提升为主级,则新的调用不会被重定向到前一个主副本。常见的情况或集群维护和应用程序更新。

    状态服务中的任何类级成员变量基本上是静态的[因为它解析为一个单独的实例。 分区],因此在更新时需要“锁定”语义?

    如果使用共享宿主模型,所有静态对象将与同一进程内的任何实例共享。

    因为客户端总是解析为类的“相同”实例。 对于给定的分区,客户机始终可以重用“代理” 实例?

    根据先前的答案,是的,任何单级类都将被共享。 .

    这种“单一”的状态服务创建模型是如何影响的? 大量客户端调用同一服务时的性能和可伸缩性 一秒钟几百次。我明白了 配置V2远程侦听器时设置 我们可以通过 “Fuffic PrimeTrimeTestListNevsStudio”。

    我不理解这里的问题,也许以前的答案可能会为你澄清,如果不是,留下评论如下,我会更新它。

        2
  •  0
  •   teeboy    6 年前

    来自Microsoft的确认。服务结构确实为每个分区创建了一个“可靠服务”的1个[1 ]实例。这个“单点”实例将服务所有客户端远程处理/HTTP调用。如果复制副本发生故障转移,将创建一个新实例。

    推荐文章