前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Orleans 知多少 | 2. 核心概念一览

Orleans 知多少 | 2. 核心概念一览

作者头像
Edison.Ma
发布2019-07-30 16:24:02
5590
发布2019-07-30 16:24:02
举报
文章被收录于专栏:DotNet Core圈圈

Orleans 术语解读

上面这张图中包含了Orleans中的几个核心概念:

  1. Grain
  2. Silo
  3. Orleans Cluster
  4. Orleans Client

从这张图,我们应该能理清他们之间的关系。

  1. Grain作为最小的执行单元
  2. Silo 是 Grain 的宿主运行环境,用来暴露具体的服务
  3. Orleans Server 提供Silo的运行环境
  4. 一个Server可以运行多个Silo服务
  5. 多个Silo组成一个Cluster集群
  6. 一个Cluster中的Grain是可以直接进行交互
  7. 客户端通过Orleans Client与Cluster建立连接

Orleans 的第一公民:Grain

Grain 简介

上面已经提到,Grain是Virtual Actor的具体表现。那如何理解Grain呢。

简单来说:Grain是一个可寻址的隔离的.NET对象实例

分解来看:

  1. Grain是一个对象实例:也就是说其是具体的某个Grain Type的一个内存实例。既然是对象,也就是说Grain可以有自己的状态和行为。
  2. 隔离的:是指Grain自身的状态和行为不受外界干预。
  3. 可寻址:并不是指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加入集群。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet技术平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Orleans 术语解读
  • Orleans 的第一公民:Grain
    • Grain 简介
      • Grain Identity
        • Grain Lifecycle
        • Grain的运行环境:Silo
        • Silo的宿主:Orleans Server
        • Silo的集群:Orleans Cluster
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档