前面根据 Orleans 框架创建了一个基础示例,今天结合 Orleans 文档做一个整体介绍。
Actor Model
在开始之前,我们简单介绍下 Actor Model 概念,Actor Model 的原理:所有的对象皆是 Actor,每个 Actor 之间通过消息进行通信,所有的操作都是异步的,从而使整个系统获得大规模的并发能力。
计算机科学中的 Actor Model 是解决并发的数学模型,将 “Actor” 视为解决并发的通用原语。为了响应它收到的消息,Actor 可以:做出本地决策,创建更多 Actor,发送更多消息,并确定如何响应收到的下一条消息。Actor 可以修改自己的私有状态,但只能通过消息相互影响(避免需要任何锁)。
在设计分布式和高并发系统时,Actor Model 被广泛应用。而且,一些框架提出抽象 Actor Model原理。Orleans 就是这种框架。还是更高级别的抽象。
Actor 是应用程序的基本构建模块,是唯一的封闭(隔离)单元。Orleans 框架 Actor 实现是由 Grains 来完成,Grains 它是一个虚拟 Actor,所以 Virtual Acotr Model 是 Orleans 的核心。接下来我们来了解 Orleans 的 Grains。
Grains
Grains 是创建 Orleans 应用程序的最小单元。由 identity(身份/标识)、behavior(行为)、state(状态)组成。
Orleans 会根据需要自行实例化或管理 Grains 对象。会将长期不使用的 Grains 对象从内存中释放。当 Grain 出现异常时会自动恢复。Orleans 会自动管理 Grain 的整个生命周期,使得开发人员可以专注业务开发中。
Grains 是 Orleans 构建可靠、可伸缩、高性能分布式系统的关键因素。Grains 如何在服务器集群或进程中运行?为了运行(或激活) Grains 引入了 Silos 。
Silos
Silos 是托管和执行 Grains 的容器。Orleans 通过 Silos 创建和管理 Grains 对象,并且执行 Grains 对象,客户端仅通过 Grains 定义的接口去调用。从而将 Grains 的对象状态封装起来,只公开 Grains 声明的接口方法。
Clients(客户端)
客户端又称 Grains 客户端,即调用 Grains 程序代码。客户端分为两种:一种与 Silos 存在相同进程中,即共同托管的客户端;另外一种是运行 Silos 外的进程中,即外部客户端。
1、共同托管客户端
客户端与 silos 是在同一个进程中,客户端可以直接从宿主应用的依赖注入窗口中获取,这样客户端可以直接与 Silos 进行通信,还能利用 Silos 集群额外的好处。
共同托管客户端有几个好处:
1)减少网络和 CPU 的开销及延迟
2)利用 Silos 集群的扩扑,不需要单独的网关
3)避免网络跳跃和序列化/反序列化,提高性能、吞吐量和可靠性
4)简化部署和应用程序拓扑
除了以上带来的优势,也有一些不好的缺点;
1)Grain 代码与客户端耦合度就提高,Grain 将不再是封闭(即隔离性)
2)导致 IO 阻塞或线程饥饿的锁竞争,会影响到 Grain 代码中的性能
3)客户端代码与 Grain 代码在同一处理器上执行,会给 CPU 缓存带来额外的压力,会增加本地资源的竞争
4)监控客户端代码和 Grain 代码上的问题会变得更加困难
共同托管客户端虽然会带来一些问题,但这也是一种流行的选择。因为很多应用程序都推荐这种做法。上述所说的一些缺点在实践中只是一小部分。而且,客户端的代码通常很少,它所需要分担的成本很小。能够影响的性能有限。运用一些 CPU 分析和调试器工具可以有效地识别问题根源。
2、外部客户端
外部客户端代码运行在 Orleans 集群之外的,因此,通过连接器或管理连接 所有 Grain 的集群和应用程序。
通常,外部客户端指的是 Web 前端,Web 前端主要通过 Orleans 集群作为中间件来连接 Grains 执行业务逻辑。Web 前端服务器接收网络请求,并进行身份验证和授权验证来决定哪些 Grain 可以请求。Web 前端服务器调用一个或多个 Grain 声明的接口方法,并将 Grain 处理的结果返回给 Web 前端并响应。
本文主要是对 Orleans 一个简述,主要来源于 Orleans 文档介绍并结合基础示例的学习和记录。Orleans 还提供很多特性,如:持久化、Timers(定时器) & Reminders、Streams、分布式 ACID 事务、Event Sourcing 等。具体运用,后面跟大家一起学习和分享。
最后,祝大家学习愉快!
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/218346.html