Orleans 2.0官方文档(闫辉的个人翻译)——5.4 异构的silo

异构的筒仓

概览

在给定的集群上,silo可以支持一组不同的grain类型: 

在这个例子中,集群支持类型为ABCDE的grain:

  • grain类型AB可放置在silo 1和2。
  • grain类型C可以放在silo 1,2或3上。
  • grain类型D只能放在Silo 3上
  • grain类型E只能放在Silo 4上。

所有的silo都应引用集群所有grain类型的接口,但是,grain类只能被承载它们的silo引用。

客户端并不知道哪个silo支持给定的grain类型。

在支持它的每个silo上,给定的Grain Type的实现必须相同。以下方案是无效的:

在silo 1和2上:

public class C: Grain, IMyGrainInterface
{
   public Task SomeMethod() { … }
}

在silo 3

public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
   public Task SomeMethod() { … }
   public Task SomeOtherMethod() { … }
}

配置

不需要配置,您可以在集群中的每个silo上,部署不同的二进制文件。然而,如果必要的话,你可以用TypeManagementOptions中的TypeMapRefreshInterval属性,来更改silo和客户端检查支持的类型发生变化的时间间隔。

出于测试目的,你可以使用GrainClassOptions中的ExcludedGrainTypes属性,它是您要在silo中排除的类型的列表名称。

限制

  • 如果支持的grain类型集合发生变化,则不会通知已连接的客户。在前面的示例中:
    • 如果Silo 4离开集群,客户端仍将尝试调用类型E的grain。它会在运行时失败,并抛出一个OrleansException。
    • 如果客户端在Silo 4加入之前连接到集群,则客户端将无法调用类型E的grain。它会失败,并抛出一个ArgumentException。
  • 不支持无状态grain:集群中的所有silo,必须支持同一组无状态grain。

猜你喜欢

转载自blog.csdn.net/uddiqpl/article/details/86619344
今日推荐