Bootstrap
Orleans是微软开源的分布式云计算框架,它提供了一种直接的方法来构建分布式大规模计算应用程序,而无需了解并应用复杂并发或其他伸缩模式。它是由微软研究院创建和设计在云计算中使用。它是由微软研究院创建和设计在云计算中使用。本文主要介绍下Orleans框架的优点。

优点

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

开发人员生产力

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

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

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

  • 单线程执行grains

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

  • 透明激活

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

  • 位置透明度

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

  • 与持久存储透明集成

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

  • 自动传播错误

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

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

默认情况下透明可伸缩性

Orleans编程模型的设计是为了帮助程序员成功扩展几个数量级地应用程序或服务的途径。这是通过结合经过验证的最佳实践和模式,以及提供低级系统功能的有效实现来完成的。以下是支持可伸缩性和性能的一些关键因素:

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

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

  • 自适应资源管理

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

  • 多路通信

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

  • 高效的安排

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

  • 显式异步

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

官方文档:http://dotnet.github.io/orleans/Documentation/benefits.html