Orleans简介

Orleans简介.

 

  Orleans是微软开源的分布式actor模型框架.actor模型的原理网络上有不少文章.有许多理论性的文章,深入地我都不知道怎么应用.在这里我就不赘述了.既然是博客,就说说本身的理解。html

对于编程来讲,不论是前台仍是后台,在如今的计算机环境下,多线程编程是不可避免的。多线程带来的不少好处,也带来的不少编程上的“坏处”。好处就是,什么并发、高效,高资源利用率等等高大上的词语。这些就不详细说了。就说说坏处.数据库

多线程带来的最大的变化就是:我先前保存的变量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是否是你想要的。  

  我初步计划写8篇左右.争取把Orleans的全部主要方面介绍完毕,初步目的是看完以后能用Orleans处理问题.

  我曾经对Orleans进行了简单的翻译.并做为资料与好友分享.考虑到国内Orleans的框架文章并非不少,因此想写一些文章,来介绍一下它. ,本人不是什么大牛,只是肯花时间而已.必定有不少地方不完善,甚至是错误的.可以有资格”用”此框架的人,必定都是公司的技术骨干,因此我也有不少地方向你们学习.若是谁想跟我交流联系,欢迎加我QQ:82676624.

  在写这些文章的时候,有些类并无使用汉语翻译,而是直接拿来了英文单词,这是由于这些单词大部分状况下在Orleans系统内表明着特定的意思,甚至是类的名字。直接用英文单词方便编写程序。另外一些则是一些通用的词语。总而言之,是由于懒。  

  为了更为深刻的展开,先举个栗子。同时这里会集中Orleans文章的连接

       在这里: 

  举个Orleans入门栗子

  例子源码

  Orleans例子--再进一步

  Orleans稍微复杂的例子--互动

  Orleans简单配置

  Orleans持久化

  orleans一些概念

  Orleans集群的构建

  Orleans Consul再解释

  Orleans之EventSourcing

相关文章
相关标签/搜索