企业网站推广是不是必要的,望牛墩镇做网站,电话交换机ip地址,网络安全培训最强的机构Orleans 术语解读上面这张图中包含了Orleans中的几个核心概念#xff1a;GrainSiloOrleans ClusterOrleans Client从这张图#xff0c;我们应该能理清他们之间的关系。Grain作为最小的执行单元Silo 是 Grain 的宿主运行环境#xff0c;用来暴露具体的服务Orleans Server 提供… Orleans 术语解读上面这张图中包含了Orleans中的几个核心概念GrainSiloOrleans ClusterOrleans Client从这张图我们应该能理清他们之间的关系。Grain作为最小的执行单元Silo 是 Grain 的宿主运行环境用来暴露具体的服务Orleans Server 提供Silo的运行环境一个Server可以运行多个Silo服务多个Silo组成一个Cluster集群一个Cluster中的Grain是可以直接进行交互客户端通过Orleans Client与Cluster建立连接Orleans 的第一公民GrainGrain 简介上面已经提到Grain是Virtual Actor的具体表现。那如何理解Grain呢。简单来说Grain是一个可寻址的隔离的.NET对象实例。分解来看Grain是一个对象实例也就是说其是具体的某个Grain Type的一个内存实例。既然是对象也就是说Grain可以有自己的状态和行为。隔离的是指Grain自身的状态和行为不受外界干预。可寻址并不是指new一个对象返回的内存引用。如果是在单机环境通过内存引用还可以进行直接访问。但对于分布式应用Grain可能分布在集群中的任一机器简单的内存引用是无法实现跨机器寻址的。Grain Identity在面向对象编程中使用new创建对象时获取的引用可以表示其标识的实例所有方面。但在分布式系统中对象引用不能表示实例标识因为引用通常仅限于单个地址空间。那如何实现分布式环境Grain的可寻址呢那就需要给Grain一个身份也就是Grain Identity。以订单举例为了标识某一个具体订单我可以赋予订单一个唯一的订单编号通过这个编号就可以找到具体的某个订单。Grain Identity 也就是这种思路。通过给Grain打上逻辑身份标识一方面可以完成可寻址方便其他Grain或Client进行调用一方面确保同一个Grain在集群中能够按需创建。单例、多例、指定数量的实例。默认grain 的身份标识可以是longGUIDstringGUID stringlong string所以基于GrainType和Grain Identity就可以得到集群中唯一确定的Grain。即 Unique Grain Grain Type Grain Identity。Grain LifecycleGrain 的生命周期是由Silo管理的。主要分为以下几个阶段其他Grain或Client调用目标GrainSilo运行时去激活Grain 若Grain是有状态的激活时会同时恢复状态Grain处理调用请求Grain闲置Silo运行时决定是否销毁Grain销毁Grain从内存中移除若Grain是有状态的则需要先持久化Grain的状态以便下次激活时恢复状态Grain的运行环境SiloGrain作为Orleans中的最小执行单元需要一个运行环境运行以暴露服务而Silo就是这样一个角色存在。如果说Grain是最小粒度的执行单元那么Silo就是最小的向外提供服务的执行单元。Silo通过将相关Grain进行组装暴露一组服务并在运行时管理Grain的生命周期。Silo的宿主Orleans ServerSilo本质上是一个进程单元是需要运行在操作系统之上的因为.NET Core的跨平台特性所以可以运行在Windows、Linux或Mac系统中当然也可以运行在相应的容器中。所以Orleans Server就是为Silo提供运行环境的宿主。Silo的集群Orleans Cluster这里需要澄清一点因为一个Orleans Server可以运行不同集群的Silo所以Orleans Cluster 并非是指多个Orleans Server 组成的集群而是指多个Silo具有相同的ClusterId组成的集群。Orleans通过内置的成员协议提供集群管理我们有时将其称为Silo Membership。该协议的目标是让所有SiloOrleans Server就当前活动的Silo集合达成一致检测故障Silo并允许新的Silo加入集群。