Orleans 整体介绍
背景
Orleans
是微软开源的Actor模型开发框架。
Actor模型
此模型解决了并发编程时对资源竞争使用的问题,将对同一个业务数据的访问从并行变为串行执行,降低了多线程编程的难度,使普通编程人员也能轻松编写高并发应用。
特点
Orleans的主要特点是通过框架提升开发人员的效率,并默认提供对应用系统横向扩展的能力,即使是普通开发人员也能轻松的完成。
提高开发效率
Orleans通过提供以下这些关键抽象、运行保证、系统服务来提高开发人员的效率,并不在意开发人员是否是并发编程专家。
熟悉的OOP
IGrain声明了一些异步的方法, Grains负责实现他们,是不是很熟悉?我们可以像调用本地方法一样去调用这些远程的Grain方法,Orleans负责将它们转换为消息并在网络上传输、调度。
Grain的单线程执行
Orleans保证了一个Grain不会在多个线程上执行(通过primaryKey区分Grain),编程人员永远不用担心在Grain层面的并发问题,也不需要使用锁或其它同步机制来保证对共享数据的访问。
透明激活
Grain仅当要处理消息时才会激活,不同于普通的类实例需要实例化或释放,Grain只有激活和休眠两种状态,并且可以在不同的硬件设备中迁移,实现动态、自适应的负载均衡,并且开发人员不需关心这些具体细节。
透明传输
开发人员调用Grain时,不需要知道Grain的物理位置在哪一个硬件设备上,只需要创建对Grain的逻辑引用。
集成持久化
Orleans允许将Grina的内存状态持久化到存储设备。它允许扩展或定制持久化提供程序,并保证只有在成功更新持久状态后才调用者才能收到结果。
自动传递错误
运行时使用异步和分布式try / catch的语义自动在调用链上传播未处理的错误。 因此,错误不会在应用程序中丢失。
这允许程序员将错误处理逻辑放在适当的位置,而无需在每个级别手动传播错误的繁琐工作。
默认情况下透明可伸缩性
Orleans 通过提供以下特性帮助开发人员将系统应用的可扩展性提升几个数量级;这是通过将最佳实践和成熟的模型相融合,并通过提供高效率、低学习成本的系统来达成这一目标。
应用状态的隐式细粒度划分
Orleans 使用 Grain
作为可直接访问的实体,程序员隐式地打破了应用程序的单体状态。Orleans 并没有规定 Grain 应该是多大或多小,但绝大多数情况下会有大量的 Grain,每个 Grain 代表了应用中的自然实体,例如用户、订单中,每个用户是一个单独的Grain,可通过UserId
做为primaryKey
来区分各个UserGrain。由于Grain的独立性,并且物理位置被抽象为了逻辑位置,所以Orleans在负载均衡和热点处理方面具有极大的灵活性,并且不需要开发人员考虑这些部分。
自适应的资源管理
当 Grain 互相调用时,它们不需要去猜测其它 Grain 的位置。因为框架具有位置透明的特性,Runtime 可以动态管理和调整可用硬件资源的分配,通过对集群中的 Grain 的动态迁移来保证负载,而不会使传入的请求失败。通过创建特定Grain的多个副本,保证吞吐量,而无需修改应用程序代码。
多路通信
Grain 采用的是逻辑地址,并且它们之间的消息传递在Tcp socket上多路复通,这允许Runtime 托管数百万个具有极低开销的Grain。另外,激活和停用 Grain 不会产生 Socket 成本。
高效的调度
Runtime 可以执行大规模的单线程 Grain 调度,使用非阻塞、基于连续方式编写 Grain,应用程序以非常有效的协程方式运行,这使系统通够达到高吞吐量并以非常高的CPU利用率运行,并具有极高的稳定性。事实上,系统中的Grain数量增加和负载的增加不会导致额外的线程或其它的系统开销,这有利于单个节点和整个系统的扩展。
显式异步
Orleans 框架中分布式应用程序的异步特点明确,旨在指导程序员编写非阻塞异步代码。结合异步消息传递和高效的调度,开发人员无需使用多线程编程技术即可实现大规模的分布式并行性和总体吞吐量。
作者:_黑冰_
链接:https://www.jianshu.com/p/eb1bb81b8ab6