Orleans 2.0官方文档(闫辉的个人翻译)——1.1 优点

优点

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

开发人员生产力

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

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

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

  • 单线程执行grain

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

  • 透明激活

只有在有消息要处理时,运行时才会激活grain。这清楚地区分了创建对应用程序代码可见和受其控制的grain的引用以及内存中grain的物理激活的概念,这对应用程序是透明的。在许多方面,这类似于虚拟内存,因为它决定何时“翻页”(停用)或“页面输入”(激活)grain; 应用程序可以不间断地访问逻辑创建的grain的完整“内存空间”,无论它们是否在任何特定时间点都在物理内存中。透明激活通过在硬件资源池中放置和迁移grain来实现动态的自适应负载平衡。这个功能是对传统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编程模型使分布式应用程序的异步特性明确,并指导程序员编写非阻塞异步代码。结合异步消息传递和高效的调度,无需显式使用多线程,即可实现大规模的分布式并行性和总体吞吐量。

猜你喜欢

转载自blog.csdn.net/uddiqpl/article/details/85821608
今日推荐