当前位置: 首页 > 工具软件 > Orleans > 使用案例 >

Orleans 2.0 官方文档 —— 1.2 概览 -> 优点

宋高谊
2023-12-01

优点

Orleans的主要优点是:开发人员的工作效率,即使对于非专业程序员也是如此,默认情况下透明的可扩展性,而无需程序员的特别努力。我们在下面展开详述这两个优势。

开发人员生产力

Orleans编程模型通过提供以下的关键抽象、保证和系统服务,来提高专家级和非专家级程序员的工作效率。

  • 熟悉的面向对象编程(OOP)范式

Grains是.NET类,它使用异步方法实现声明的.NET grain接口。因此,grain对程序员来说似乎是可以直接调用其方法的远程对象。这为程序员提供了熟悉的OOP范式,做法是将方法调用转换为消息,将它们路由到正确的端点,调用目标grain的方法,以完全透明的方式处理故障和极端的情况。

  • 单线程执行的grain

运行时保证grain一次不会在多个线程上执行。结合与其他grain的隔离,程序员永远不会在grain级别面临并发性,并且永远不需要使用锁或其他同步机制,来控制对共享数据的访问。仅这个特征,就使得非专业级程序员易于开发分布式应用程序。

  • 透明激活

仅当有消息要处理时,运行时才会激活grain。这清楚地将创建一个引用到grain的概念(此引用对应用程序代码是可见的,并受其控制),和内存中grain的物理激活(此激活对应用程序是透明的)进行了分离。在许多方面,这类似于虚拟内存,因为它决定何时“翻页”(停用)或“页面输入”(激活)grain;应用程序可以不间断地访问逻辑地创建的grain的完整“内存空间”,无论它们在任何特定时间点是不是在物理内存中。透明激活通过在硬件资源池中放置和迁移grain,来实现动态的自适应负载平衡。这个功能是对传统Actor模型的重大改进,在这个模型中,Actor的生命周期是由应用程序管理的。

  • 位置透明度

程序员用来调用grain方法或传递给其他组件的grain引用(代理对象),只包含grain的逻辑标识。Orleans运行时透明地完成了grain的逻辑标识到其物理位置的转换,以及相应的消息路由。应用程序代码与grain通信,同时保持对其物理位置的透明(物理位置可能由于故障或资源管理而导致随着时间的推移而变化,或者因为grain在被调用时被停用)。

  • 与持久存储透明集成

Orleans允许将grain的内存状态声明性地映射到持久性存储。它可以同步更新,透明地保证调用者只有在成功更新持久状态后,才能收到结果。扩展和/或自定义现有的、可用的持久存储提供程序集合,是相当简单的。

  • 自动传播错误

运行时使用异步的语义和分布式try/catch,自动地在调用链上传播未处理的错误。因此,错误不会在应用程序中丢失。

这允许程序员将错误处理逻辑放在适当的位置,而无需在每个层级进行手动传播错误的繁琐工作。

默认情况下透明可伸缩性

Orleans编程模型旨在引导程序员,沿着一条可能成功地将应用程序或服务扩展到几个数量级的路径前进。这是通过合并已经验证的最佳实践和模式,以及提供较低级别系统功能的有效率的实现,来达成的。以下是支持可伸缩性和性能的一些关键因素:

  • 应用状态的隐式细粒度划分

通过使用grain作为可直接寻址的实体,程序员隐式地打破了应用程序的整体状态。虽然Orleans编程模型没有规定grain应该有多大或多小,但在大多数情况下,有相对大量的grain——数百万或更多——是有意义的,每个grain代表应用程序的自然实体,例如用户帐户或采购订单。由于grain是可单独寻址的,并且它们的物理位置被运行时抽象掉,Orleans在负载均衡和以透明和通用方式处理热点方面,具有极大的灵活性,而无需应用程序开发人员的任何考虑。

  • 自适应资源管理

grain与其他grain相互作用时,对它们的位置没有任何假设。由于位置透明,运行时可以以动态方式管理和调整可用硬件资源的分配。运行时通过对跨计算集群的grain放置和迁移,做出细粒度的决定,来实现这一点,以响应负载和通信模式——而不会使传入的请求失败。通过创建特定grain的多个副本,运行时可以在不更改应用程序代码的情况下,增加grain的吞吐量。

  • 多路通信

Orleans的grain具有逻辑端点,并且它们之间的消息传递在一组固定的所有物理连接(TCP套接字)上进行多路复用。这允许运行时承载数百万个可寻址实体,并且每个grain的操作系统开销很低。此外,激活和停用grain,在注册/取消注册物理端点(例如TCP端口或HTTP URL)时,甚至在关闭TCP连接时,都不会产生成本。

  • 高效调度

运行时在一个自定义的线程池中,调度大量单线程grain的执行,每个物理处理器核心有一个线程。使用以非阻塞、基于连续的方式(Orleans编程模型的一个要求)编写的grain代码,应用程序代码以非常有效的“协作”多线程方式运行而没有争用。这使得系统能够达到高吞吐量,并以非常高的CPU利用率(高达90%+)运行,同时具有极大的稳定性。系统中grain数量的增长和负载的增加,不会导致额外的线程或其他OS原语,这有助于单个节点和整个系统的可伸缩性。

  • 显式异步

Orleans编程模型使分布式应用程序的异步特性明确,并指导程序员编写非阻塞异步代码。结合异步消息传递和高效的调度,无需显式使用多线程,即可实现大规模的分布式并行性和总体吞吐量。

 类似资料: