这篇随笔主要记录了本身学习Orleans的通过和理解,在学习过程当中会一直更新,思路和理解可能有些偏颇,若是有幸有大佬看到这篇文章,但愿能给予批评指正。html
(一) 入门例子前端
(二) 测试用例git
3.github
首先,Microsoft Orleans是在.net用简单方法构建高并发、分布式的大型应用程序框架。web
官方文档以及源码:http://dotnet.github.io/orleans/编程
如下理解是学习了《Microsoft Orleans 之 入门指南》(http://www.javashuo.com/article/p-tpacjmue-o.html)windows
Orleans 框架能够构建大规模、高并发、分布式应用程序,而不须要学习专业分布式以及并发知识框架。它是由微软研究和设计应用于云计算。被普遍应用于微软云产品,并且微软官方游戏:Halo四、Halo5(光环|光晕)的云服务所有由它来承载,很多公司在用它。并发
特色:框架
1.默认的可拓展性,构建复杂的分布式应用程序,可使您的程序轻易拓展到数百个服务。异步
2.低延时,它可使你的程序状态保存于内存中,因此你的应用程序能够快速响应请求。
3.简化并发,Orleans 容许你使用C#代码构建Actors 之间的异步处理消息。
注:(Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动做和交互的通用规则,一个Actor指的是一个最基本的计算单元。它能接收一个消息而且基于其执行计算。具体的我尚未去深刻学习,http://www.jianshu.com/p/449850aa8e82这篇文章能够简单的了解)
在Orleans,actors 被称做grains,采用一个接口来表示,Actors的消息用异步方法来接受,以下:
运行在Orleans 框架里的实现代码public interface IMyGrain : IGrainWithStringKey { Task<string> SayHello(string name); }
而后经过建立代理对象,并调用Grains的方法来发送消息public class MyGrain : IMyGrain { public async Task<string> SayHello(string name) { return "Hello " + name; } }
var grain = GrainClient.GrainFactory.GetGrain<IMyGrain>("grain1"); await grain.SayHello("World");
cluster:
大量的silos 同时在一块儿工做就造成了orleans的集群,orleans运行彻底自动化的集群管理。
全部silo都使用一个动态更新的共享成员存储库,并有助于协调集群管理,经过阅读共享存储库了解对方的位置,在任什么时候候,一个silo能够经过注册在共享存储中链接到一个集群。
这种方式的集群能够在运行时动态扩展。 Orleans 提供弹性和可用性从群集中删除无效的silos。
Orleans 和客户端代码
Orleans 包括两个不一样的部分:Orleans 基础部分(grains) 和客户端部分
Orleans 的一部分是由应用程序的运行时服务称silos grains 组成,在调度限制下的运行时执行的Grain代码和确保内部在Orleans 编程模型。
客户端部分一般是一个web前端,经过少许的Orleans 客户端库链接到Orleans 部分,使得客户端代码能够经过引用服务端的一个grain的引用进行通信。
例如:一个ASP.NET web应用程序运行在服务端的部分能够是Orleans 的客户端。 客户端部分运行在.net 应用程序池的主线程中,和不受调度的限制和Orleans 运行时的保证。
Orleans 导入的包
Orleans 有两个必须的包Microsoft.Orleans.Server(服务端包)和Microsoft.Orleans.Client(客户端包)
在NuGet里直接安装就好了,它会自动把其余依赖的包也都安装上,vs就是这么省心,可是须要注意的是,不要随意去更新Orleans包所引用的其余包的版本,可能会致使一些奇奇怪怪的错误(血的教训)
Orleans 的工具
万能的vs还给咱们提供了一个模板化的项目建立工具:Orleans Tools for Visual Studio。
经过vs的扩展和更新能够直接安装,安装并重启完成以后咱们能够看到以下结构:
如上图所示:
1 是安装好后Orleans 的一个模版集节点,选中后左边面板中会有三个项目模版。
2 是咱们项目中一个服务的承载项目,这里是用来测试用的,因此是一个控制台应用程序,同时也将host所需的类库nuget进来了。针对你项目的须要,能够是一个windows 服务,一个控制台应用,一个Windows forms 的程序,或者也能够寄宿到iis的web中。
3 是grain的实现 ,咱们大部分时间就是与里面的东西打交道,它里面是一些实现了grain借口,或者业务类的一系列类集合。
4 是grain 接口定义处,为什么要孤立出来呢,由于未来这些接口是要暴露出来让其余须要的地方调用吗。
Orleans 有哪些部分组成
我简单的把Orleans分红了四个部分
IGrains : 这里放置全部Grains类要扩展的接口。
Grains : 这个里面实现全部IGrain载明的接口,实现全部的Grain类,包括它们的方法以及字段。
Host : 这个里面就是要运行Silo的。也就是服务端
Client : 这个里面就是要运行GrainClient的。它要和Host通讯,它就是客户端。