orleans(238)

这个亚马逊云素材同步代码是我至今最大坡度的代码
第一次有种想早点下班好回去恶补知识的感觉,可惜又不得不加班完成任务。

  1. silo 代表一个服务,可以是主节点也可以是副节点
  2. grain 可以看作是一个单例进程,队列只有一个,会排队修改数据。相同类型的只要key不同,它们就互相独立

  3. 客户端一开始就会连接一个服务即silo.(GrainClient.Initialize)

  4. StreamProvider订阅,无论是隐式还是显式,都要用this.stream.OnNextAsync(data)去分发
    显式还是隐式都是一个grain,初始化注册订阅后才能使用

  1. Orleans.Immutable 这个是由于和grain的方法调用传参是一次深拷贝
    grain之间通信,silo之间通信也是深拷贝。
    为了避免,所以用这个来控制,避免深拷贝。

  2. Orleans永远不会在执行Task的中途创造另一个Task,所以要求程序代码在执行Task的中途,不要开辟多线程.不然会报错或者会破坏单线程机制.如果真的有需要创造额外的task.

  3. StatelessWorkergrain,状态无关类型;可以在集群的多个silo里,每一个silo都创造一个相同标识的Grain。 针对此类grain的请求,都只在第一个接受到请求的silo里执行。 Orleans会在所有此类grain忙的时候,自动增加一个

// //