Orleans 知多少 | 2. 核心概念一览
Orleans 术语解读
上面这张图中包含了Orleans中的几个核心概念:
- Grain
- Silo
- Orleans Cluster
- Orleans Client
从这张图,我们应该能理清他们之间的关系。
Grain作为最小的执行单元
Silo 是 Grain 的宿主运行环境,用来暴露具体的服务
Orleans Server 提供Silo的运行环境
一个Server可以运行多个Silo服务
多个Silo组成一个Cluster集群
一个Cluster中的Grain是可以直接进行交互
客户端通过Orleans Client与Cluster建立连接
Orleans 的第一公民:Grain
Grain 简介
上面已经提到,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 的身份标识可以是:
long
GUID
string
GUID + string
long + string
所以基于GrainType和Grain Identity就可以得到集群中唯一确定的Grain。即 Unique Grain = Grain Type + Grain Identity。
Grain Lifecycle
Grain 的生命周期是由Silo管理的。主要分为以下几个阶段:
- 其他Grain或Client调用目标Grain
- Silo运行时去激活Grain (若Grain是有状态的,激活时会同时恢复状态)
- Grain处理调用请求
- Grain闲置
- Silo运行时决定是否销毁Grain
- 销毁Grain,从内存中移除(若Grain是有状态的,则需要先持久化Grain的状态,以便下次激活时恢复状态)
Grain的运行环境: Silo
Grain作为Orleans中的最小执行单元,需要一个运行环境运行以暴露服务,而Silo就是这样一个角色存在。如果说Grain是最小粒度的执行单元,那么Silo就是最小的向外提供服务的执行单元。Silo通过将相关Grain进行组装,暴露一组服务,并在运行时管理Grain的生命周期。
Silo的宿主:Orleans Server
Silo本质上是一个进程单元,是需要运行在操作系统之上的,因为.NET Core的跨平台特性,所以可以运行在Windows、Linux或Mac系统中,当然也可以运行在相应的容器中。所以Orleans Server就是为Silo提供运行环境的宿主。
Silo的集群: Orleans Cluster
这里需要澄清一点,因为一个Orleans Server可以运行不同集群的Silo,所以Orleans Cluster 并非是指多个Orleans Server 组成的集群,而是指多个Silo(具有相同的ClusterId)组成的集群。Orleans通过内置的成员协议提供集群管理,我们有时将其称为Silo Membership。该协议的目标是让所有Silo(Orleans Server)就当前活动的Silo集合达成一致,检测故障Silo,并允许新的Silo加入集群。
Orleans 知多少 | 2. 核心概念一览的更多相关文章
- Java并发编程核心概念一览
作者博客地址 https://muggle.javaboy.org. 并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用.同步方法一旦开始,调用者必须等到方法结束才能执行后续动作:异步方法则 ...
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- ES6,ES2105核心功能一览,js新特性详解
ES6,ES2105核心功能一览,js新特性详解 过去几年 JavaScript 发生了很大的变化.ES6(ECMAScript 6.ES2105)是 JavaScript 语言的新标准,2015 年 ...
- Maven的几个核心概念
POM (Project Object Model) 一个项目所有的配置都放置在 POM 文件中:定义项目的类型.名字,管理依赖关系,定制插件的行为等等.比如说,你可以配置 compiler 插件让它 ...
- JAVAEE——BOS物流项目13:Quartz入门案例、核心概念、cron 表达式的格式(了解)
1.quartz入门案例 本入门案例基于spring和quartz整合完成. 第一步:创建maven工程,导入spring和quartz相关依赖 第二步:创建任务类 第三步:在spring配置文件中配 ...
- SpaceSyntax【空间句法】之DepthMapX学习:第二篇 输出了什么东西 与 核心概念
这节比较枯燥,都是原理,不过也有干货.这篇能不能听懂,就决定是否入门...所以,加油吧 博客园/B站/知乎/CSDN @秋意正寒 转载请在文头注明本文地址 本篇讲空间句法的几个核心概念,有一些也是重 ...
- Laravel 核心概念
工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...
- Kubernetes核心概念简介
本文将会简单介绍Kubernetes的核心概念.因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍.相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概 ...
- Laravel 的核心概念
工欲善其事,必先利其器.在开发Xblog的过程中,稍微领悟了一点Laravel的思想.确实如此,这篇文章读完你可能并不能从无到有写出一个博客,但知道Laravel的核心概念之后,当你再次写起Larav ...
随机推荐
- DELPHI之关于String的内存分配(引)
在函数.过程或者方法中定义一个字符串变量时,由于我们知道在函数.过程或者方法中定义的变量为局部变量,它的内存 是在栈中分配的,但是这里有个小细节我们要注意,对于一个局部的字符串变量,它的大小为4字节, ...
- 用代码关闭冰刃(IceSword)
(*冰刃这个系统分析工具以前还没用过.这样高级的工具,用结束进程的方式就不试了.按手工关闭的流程实现.首先是通过遍历当前进程,确定冰刃进程的主窗体:然后发送WM_CLOSE关闭主窗体.当关闭对话框出现 ...
- SYN5104型 时间综合测试仪
SYN5104型 时间综合测试仪 gps时钟测试仪时间/频率测量仪器使用说明视频链接: http://www.syn029.com/h-pd-73-0_310_6_-1.html 请将此链接复制到浏 ...
- Spring的Bean的生命周期
一:生命周期执行的过程如下:1) spring对bean进行实例化,默认bean是单例.2) spring对bean进行依赖注入.3) 如果bean实现了BeanNameAware接口,spring将 ...
- Tido 习题-二叉树-最高分
题目描述 老师想知道从某某同学到某某同学当中,分数最高的是多少.现在请你编程模拟老师的询问.当然,老师有时候需要更新某位同学的成绩. 输入 输入包含多组测试数据.每组输入第一行是两个正整数N和M(0& ...
- 09 Javascript的伪数组 arguments
arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. (1)返回函数实参的个数:arguments.length 例子: fn(2,4); fn(2,4,6); fn( ...
- bean 解析、注册、实例化流程源码剖析
本spring源码的版本:4.3.7 Spring bean的加载主要分为以下6步: (1)读取XML配置文件 (2)XML文件解析为document文档 (3)解析bean (4)注册bean (5 ...
- Liunx 安装 Nessus
Liunx 安装 Nessus 啥子是Nessus 它是一款系统漏洞扫描与分析软件,可以扫描服务器存在哪些漏洞,页面简介美观,非常Nice. 获取激活码 首先访问如下网站 https://www. ...
- c/c++基础内容回顾
1.1基本数据类型 1.1.1 变量的定义 变量类型 变量名 变量类型 变量名=初值: 注意:不能以C语言标识符作为变量名,变量名的第一个字符必须是字母或者下划线,其它位置字符必须是字母.数字.下划线 ...
- vscode解决同步设置插件连接不上git
vscode有一款比较好用的插件,就是设置同步.可以在一台电脑上同步另一台电脑的所有配置及插件! Settings Sync 但是在公司电脑有个奇葩问题,就是连接不上git. 解决:配置代理 &quo ...