背景

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

Orleans 整体介绍的更多相关文章

  1. Java 并发编程整体介绍 | 内含超多干货

    前段时间一直在学习多线程相关的知识,目前也算有了一个整体的认识,今天呢,主要从整体介绍一下,只谈造火箭,拧螺丝这种细节还需要自己深究. 首先是操作系统级别对于多线程的支持,由 CPU 的多级缓存.缓存 ...

  2. SNF快速开发平台--规则引擎整体介绍及使用说明书

    一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...

  3. PyQt5整体介绍

    1 PyQt5整体介绍 PyQt5是基于图形程序框架Qt5的Python语言实现,由一组Python模块构成. PyQt5的官方网站是:www.riverbankcomputing.co.uk. Py ...

  4. [置顶] API相关工作过往的总结之整体介绍

    此系列的总结文章,仅仅是我个人工作总结,有考虑不周之处还请各位同行多多指教. API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是 ...

  5. ZooKeeper系列(1) 整体介绍(转)

    原文地址:https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术. ...

  6. Spark Streaming之一:整体介绍

    提到Spark Streaming,我们不得不说一下BDAS(Berkeley Data Analytics Stack),这个伯克利大学提出的关于数据分析的软件栈.从它的视角来看,目前的大数据处理可 ...

  7. Apache Flink 整体介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  8. MINA系列学习-mina整体介绍

    今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法.我倒是想从mina源码的结构和功能上对这个框架进行剖析.源码的阅 ...

  9. Java Executor并发框架(一)整体介绍

    一.概述 Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池.在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在 ...

随机推荐

  1. zabbix 自动发现端口服务监控教程

    目录 创建数据表(收集haproxy服务的信息) 针对生成的数据表做监控 在haproxy服务机器上配置 在zabbix上添加监控 前言: 1.线上业务使用了几十上百台haproxy服务,需要针对这些 ...

  2. linux top命令VIRT,RES,SHR,DATA的含义(转)

    linux top命令VIRT,RES,SHR,DATA的含义 字体: 大 小Posted by 佚名 | tags: top  VIRT  RES  SHR VIRT:virtual memory ...

  3. 安卓手机端微信网页浏览记录清理debugx5.qq.com

    最近我们环境从复)星(云切换到阿里云.早上地铁路上就有小伙伴@,一阵搜索.找的如下的方法. 记录一下: 目前只支持安卓手机的微信内置浏览器清理. 由腾讯提供的网址http://debugx5.qq.c ...

  4. LintCode_13 字符串查找

    题目 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 您在真实的面 ...

  5. 什么是 MIME TYPE

    首先,我们要了解浏览器是如何处理内容的.在浏览器中显示的内容有 HTML.有 XML.有 GIF.还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形式来显示呢?答案是 MIME T ...

  6. 实用的 JavaScript 调试小技巧

    ‘debugger;’ 除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断 ...

  7. <每日一题>题目25:快速排序

    ''' 快速排序:分而治之,一分为二进行排序 ''' import cProfile import random def quick_sort(nums): if len(nums) <= 1: ...

  8. <随便写>佛祖,哈哈!

    print(" _ooOoo_ ") print(" o8888888o ") print(" 88 . 88 ") print(" ...

  9. 11-3-while

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. ES6之主要知识点(八)Symbol

    防止属性名的冲突.这就是 ES6 引入Symbol的原因. 它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean).字符串(String). ...