Orleans简介
Orleans简介.
Orleans是微软开源的分布式actor模型框架.actor模型的原理网络上有很多文章.有许多理论性的文章,深刻地我都不知道怎么应用.在这里我就不赘述了.既然是博客,就说说自己的理解。
对于编程来说,不管是前台还是后台,在现在的计算机环境下,多线程编程是不可避免的。多线程带来的很多好处,也带来的很多编程上的“坏处”。好处就是,什么并发、高效,高资源利用率等等高大上的词语。这些就不详细说了。就说说坏处.
多线程带来的最大的变化就是:我先前保存的变量A,在我想要再次利用它的时候,A是否被其他线程给更改了?数据库中叫脏读,我们拿过来用,“避免脏读”又有个同义词叫做“操作的原子性”。为了解决脏读的问题,有一下几种办法:
- 办法一变量A在初始赋值的时候,就规定它不可以被更改,就是不可变,英文叫做immutable,很多函数式语言如F#,scala等都有不可变量。既然量是不可变的。就不会有什么脏读问题了。这真是个好办法,但是在C#和JAVA这样的语言里,这不是个好办法。
- 办法二就是大家经常使用的,多线程,架锁。精巧的设计类,小心的使用这些来,管理各种资源的竞争。为了避免脏读,在C#以及JAVA里,架锁是一个可行的办法。但是这样会使得效率变低(锁架地多了,这个会更明显),更为关键是带来逻辑的复杂性。架锁的程序,可以说是一个“正确但是脆弱”的程序。离开了初创人员,后来的人想读懂读透?呵呵,人生苦短。
- 办法三,也是Orleans采用的办法,设计一个类,保证这个类从“创建”过程到“销毁”过程,以及“中途调用它的方法”的执行过程,这三个“过程”不管何时何地调用,都会在同一个线程中运行。这样的化,我就可以放心大胆的去修改,调用这个类的方法,而不用担心这个指向这个类的变量出现“脏读”的情况。这个某种程度上算是办法一和二的折中。为了说明这个办法,就不得不说Actor模型。
人与人的沟通只是通过消息,不管是听闻嗅触等等感觉,都是往外界往人的身体发送的消息.人处理后做出反应.这个处理与反应是异步的.接受消息和处理消息都是并行的、同时的进行。actor模型就是模拟这种通信方式.用Actor作为名称,也算是指明了这个模型想要模拟什么。
既然是模拟,那就是简单化。Orleans模型里,每一个actor有专门的类代表它,叫做Grain,这个grain类就是模拟通信场景中的”人”,但是Orleans为了解决多线程带来的“资源竞争”等问题,采用了办法三,再Orleans框架内,它保证每个grain类符合以下行为规范:
A. 发往同一个grain类实例的任何消息都会在固定线程内执行。
B. grain类按照接受消息的先后,依次处理消息。在任意时间点,一个grain实例只处理一个消息。
C. grain实例内的字段属性,只能由实例本身访问。外界不能访问。
在大部分情况下,这些规范都是成立的。这些规范被称为“单线程机制”。但是也要有“变通”,这些“变通”涉及到很多其他方面,在以后的文章中会解释是如何变通的,为什么要变通,以及什么场景下才需要变通。不过现在你可以认为,这些规则就是“法律”。在Orleans的框架内,这些grain们都是一些“头脑简单并且自闭的人”。你作为设计者,如果恰到好处的布置这些“人”,它们会给你惊喜。比如对于消息的处理,可以做到全程无锁等。。。高大上的特性。
同时Orleans是使用Actor模型的,同时微软更近了一步,它是使用的虚拟的Actor模型。具体怎么个虚拟法,这个以后的文章中解释。
以上说了那么多,就说明Orleans是使用actor模型的。还没有说分布。Orleans是分布式的。那是因为所有Actor之间的互动是跨线程的,甚至是跨计算机的。同时Orleans框架保证开启多个服务端程序实例,通过简单的配置,它们的行为就会如同单一的服务端实例一样。客户端感觉不到区别,简单的说就是服务端能“合体”。两个小奥特曼,每个小奥特曼由更小的细胞组成,同时他们又合体变成了一个大的奥特曼,就问你怕不怕,你如果不怕,Orleans甚至实现了“合体的合体”---这种横向扩展性为高可用,资源的充分利用以及大吞吐量带来可很大的想象空间,同时也是灵活部署的基础。另外利用Orleans的Actor模型,也可以很容的实现event sourcing。它甚至已经内置了event sourcing中间件。
Orleans同时也有Net.Core版本,利用它可以实现跨平台运行,它名字叫做Orleans vNext.我是按照framwork版本写的。两个版本的使用方法几乎相同。
这个世界有很多actor模型框架,JAVA和Scala的AKKA,C#的AKKA.Net以及Orleans。它们都是开源的,都可以去下载它们的源码学习。在写文章的时候,Orleans版本刚刚是1.5版本,所以我就只能按照1.5版本来写。
要读的非常的顺畅,我假定读者都熟悉C#,熟悉多线程,特别是C#中Task类的用法,虽然很多时候,这些没有这些知识也能非常顺利的读懂,但是有,会在关键的时刻帮助你理解Orleans。更进一步,如果熟悉了以上知识,才能明白Orleans能不能帮助你解决实际工作中的问题。以及在技术选型的时候,明白Orleans是不是你想要的。
为了更为深入的展开,先举个栗子。
Orleans简介的更多相关文章
- Microsoft Orleans 之简介
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Microsoft Orleans构建高并发、分布式的大型应用程序框架
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- Orleans 知多少 | Orleans 中文文档上线
Orleans 简介 Orleans是一个跨平台框架,用于构建健壮,可扩展的分布式应用程序 Orleans建立在.NET开发人员生产力的基础上,并将其带入了分布式应用程序的世界,例如云服务. Orle ...
- 微软分布式云计算框架Orleans(1):Hello World
自从写了RabbitHub框架系列后的一段时间内一直在思索更加轻量简便,分布式高并发的框架(RabbitHub学习成本较高),无意间在网上级联看到了很多新框架:从helios到Akka.NET在到Or ...
- Orleans框架------基于Actor模型生成分布式Id
一.Actor简介 actor模型是一种并行计算的数学模型. 响应于收到的消息,演员可以:做出决定,创建更多Actor,发送更多消息,并确定如何响应接收到的下一条消息. 演员可以修改自己的状态,但只能 ...
- Orleans 知多少 | 2. 核心概念一览
Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...
- Orleans 初接触
简介 这篇随笔主要记录了自己学习Orleans的经过和理解,在学习过程中会一直更新,思路和理解可能有些偏颇,如果有幸有大佬看到这篇文章,希望能给予批评指正. 导航 (一) 入门例子 (二) 测试用例 ...
- Orleans[NET Core 3.1] 学习笔记(四)( 3 )监控Orleans Silo的方式 OrleansDashboard
简介 Orleans用起来的确很爽,更爽的是咱们有能监控它的工具. OrleansDashboard 这个工具是一个可视化的Silo监控工具,Silo和Grain的活跃状态一目了然,各个接口的响应速度 ...
随机推荐
- css样式表。作用是美化HTML网页.
样式表分为:(1)内联样式表 和HTML联合显示,控制精确,但是可重用性差,冗余多. 如:<p style="font-size:10px">内联样式表</p&g ...
- java基础(9) - 泛型解析
泛型 定义简单的泛型类 泛型方法 /** * 1.定义一个泛型类 * 在类名后添加类的泛型参数 <T> * 泛型类里面的所有T会根据创建泛型类时传入的参数确定类型 * 2.定义泛型方法 * ...
- EXT 基础环境搭建
EXT 基础环境搭建使用 Sencha CMD 下载地址 https://www.sencha.com/products/extjs/cmd-download/ Sencha CMD 常用命令 API ...
- accp8.0转换教材第3章MySQL高级查询(一)理解与练习
一.单词部分 ①constraint约束②foreign外键③references参考 ④subquery子查询⑤inner内部的⑥join连接 二.预习部分 1.修改表SQL语句的关键字是什么 RE ...
- 高级Java程序员的技术进阶之路
据不完全统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万.而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大.那么,作为 ...
- java基础之集合框架(1)
一.介绍Collection 1.概念:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection ...
- 谈谈tableView的重要属性内边距
全屏穿透效果需要做到两点 tableView的可视范围占据整个父控件(或者屏幕)--设置contentsize滚动范围. 所有的cell都可以被看到,也就是说tableView中的cell不会被导航栏 ...
- 你要clean Android Studio project 么
原文:http://tekeye.uk/android/export-android-studio-project 如果嫌复制出来的项目太多,可以用文后的批处理删除一些文件,Android studi ...
- Java+Tomcat + Idea + Jrebel 实现热部署
1. 首先安装idea的jrebel插件, jrebel是收费的,所以要在网上下载验证码. 2. 安装好以后再setting 菜单能看到一个jrebel的菜单. 3. 4.其中需要选中frame失去 ...
- python打印万年历
1.输入年份,输入月份 2.格式化输出本月的日历 3.思路 输入年,月,打印对应年月的日历.1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大 ...