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
Orleans 整体介绍的更多相关文章
- Java 并发编程整体介绍 | 内含超多干货
前段时间一直在学习多线程相关的知识,目前也算有了一个整体的认识,今天呢,主要从整体介绍一下,只谈造火箭,拧螺丝这种细节还需要自己深究. 首先是操作系统级别对于多线程的支持,由 CPU 的多级缓存.缓存 ...
- SNF快速开发平台--规则引擎整体介绍及使用说明书
一.设计目标 a)规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b)能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c)运算速度快 ...
- PyQt5整体介绍
1 PyQt5整体介绍 PyQt5是基于图形程序框架Qt5的Python语言实现,由一组Python模块构成. PyQt5的官方网站是:www.riverbankcomputing.co.uk. Py ...
- [置顶] API相关工作过往的总结之整体介绍
此系列的总结文章,仅仅是我个人工作总结,有考虑不周之处还请各位同行多多指教. API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是 ...
- ZooKeeper系列(1) 整体介绍(转)
原文地址:https://www.cnblogs.com/wuxl360/p/5817471.html 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术. ...
- Spark Streaming之一:整体介绍
提到Spark Streaming,我们不得不说一下BDAS(Berkeley Data Analytics Stack),这个伯克利大学提出的关于数据分析的软件栈.从它的视角来看,目前的大数据处理可 ...
- Apache Flink 整体介绍
前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...
- MINA系列学习-mina整体介绍
今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者类的方法.我倒是想从mina源码的结构和功能上对这个框架进行剖析.源码的阅 ...
- Java Executor并发框架(一)整体介绍
一.概述 Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池.在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在 ...
随机推荐
- python 版本配置问题
环境变量里有anaconda 但是命令行输入python却并不是anaconda里的python 这个现象的产生是由于anaconda在环境变量里的顺序靠后,python2.7已经在其他环境变量里被找 ...
- 19-11-10-Night
关于$Miemeng$,它死了. 大家有没有记得我在暑假里曾经写过一个著名模数? const int Mod=998224353; 现在有续集了(捂脸)(改不过题.jpg) const int Mod ...
- Servlet和模本办法
抽象类HttpServlet,提供7个子方法的默认实现,当我们手写Servlet只需要继承HttpServlet并替换相应的do方法来完成自己的业务逻辑即可. 我们一般的实现方法: public My ...
- Cesium官方教程7--三维模型
原文地址:https://cesiumjs.org/tutorials/3D-Models-Tutorial/ 三维模型 (3D Models) 这篇教程给大家介绍,如何在Cesium中通过Primi ...
- 玩转大数据系列之Apache Pig高级技能之函数编程(六)
原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...
- hexo_localhost:4000_无法访问
title: 'hexo_localhost:4000_无法访问' date: 2016-05-02 09:38:51 categories: blog tags: [hexo] 问题描述 安装完成h ...
- kafka comsumer
kafka的顺序消费只保证在同一个partition中而已
- nulls_hlist原理 和 tcp连接查找
原文链接 http://abcdxyzk.github.io/blog/2018/09/28/kernel-sk_lookup/
- Windows API 第20篇 GetVolumeNameForVolumeMountPoint
函数原型: BOOL GetVolumeNameForVolumeMountPoint( ...
- [Swoole系列入门教程 2] 入门级的Swoole的demo.服务端与客户端