简介

  这篇随笔主要记录了自己学习Orleans的经过和理解,在学习过程中会一直更新,思路和理解可能有些偏颇,如果有幸有大佬看到这篇文章,希望能给予批评指正。

导航

(一) 入门例子

(二) 测试用例

3.

理解

  首先,Microsoft Orleans是在.net用简单方法构建高并发、分布式的大型应用程序框架。

  官方文档以及源码:http://dotnet.github.io/orleans/

  以下理解是学习了《Microsoft Orleans 之 入门指南》(https://www.cnblogs.com/endv/p/6147976.html

  Orleans 框架可以构建大规模、高并发、分布式应用程序,而不需要学习专业分布式以及并发知识框架。它是由微软研究和设计应用于云计算。被广泛应用于微软云产品,而且微软官方游戏:Halo4、Halo5(光环|光晕)的云服务全部由它来承载,不少公司在用它。

  特点:

    1.默认的可拓展性,构建复杂的分布式应用程序,可以使您的程序轻易拓展到数百个服务。

    2.低延时,它可以使你的程序状态保存于内存中,所以你的应用程序可以快速响应请求。

    3.简化并发,Orleans 允许你使用C#代码构建Actors 之间的异步处理消息。

    注:(Actor模型是一个概念模型,用于处理并发计算。它定义了一系列系统组件应该如何动作和交互的通用规则,一个Actor指的是一个最基本的计算单元。它能接收一个消息并且基于其执行计算。具体的我还没有去深入学习,http://www.jianshu.com/p/449850aa8e82这篇文章可以简单的了解)

    在Orleans,actors 被称作grains,采用一个接口来表示,Actors的消息用异步方法来接受,如下:

public interface IMyGrain : IGrainWithStringKey
{
Task<string> SayHello(string name);
}
运行在Orleans 框架里的实现代码
public class MyGrain : IMyGrain
{
public async Task<string> SayHello(string name)
{
return "Hello " + name;
}
}
然后通过创建代理对象,并调用Grains的方法来发送消息
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通信,它就是客户端。

Orleans 初接触的更多相关文章

  1. Orleans 初接触(二) 测试用例

    [返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.快速入门示例 这个例子也是跟着<Microsoft Orleans 之 入门指南>(https://www ...

  2. Orleans 初接触(一) 入门例子

    [返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...

  3. 初接触BurpLoader工具

    初接触burp工具 菜鸟一枚,现在在接触一段时间测试,我在测试功能性的时候,想着网站被黑案例那么多,我是不是也应该弄弄安全性测试了,所以就有了下边的第一次接触BurpLoader工具来测试手机的app ...

  4. 软工实践练习-Git初接触

    第一次听到Git,有点不知所云,听了实践课老师的讲解,才明白了Git作为最先进的分布式版本控制系统的重要性. 至于Git的安装和使用仍旧是自己摸索着去完成了,当然在这过程中也是遇到了很多的问题. 接下 ...

  5. vi初接触

    vi初接触 它有三种模式: 一 一般模式 二 编辑模式 三 命令行模式 介绍几种比较常用的吧 -- 退出:q 写入:w 强制:! (以上可叠加) 显示行号:set nu 取消:set nonu 跳转到 ...

  6. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  7. ExtJS初接触 - 在项目中使用ExtJS

    ExtJS初接触 - 在项目中使用ExtJS 今天ExtJS官网发布了ExtJS最新正式版4.2.1.Ext JS 4.2.1 正式版 下载 ExtJS为开发者在开发富客户的B/S应用中提供丰富的UI ...

  8. Java之路——Java初接触

    本文大纲 1.Java是什么 2.Java历史 3.Java技术范围 3.1 Java SE平台技术范围 3.2 Java EE技术范围 3.3 Java 体系技术范围 4.总结 1.Java是什么 ...

  9. python 之 数据类型初接触

    python 之 数据类型初接触 标准数据类型 Python3 中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Set(集合) Dicti ...

随机推荐

  1. vim查询替换

    查询: 在民令模式输入/或者? n/N 替换:

  2. C. Present(二分 + 扫描线)

    题目链接:http://codeforces.com/contest/460/problem/C 题意: n盆花,浇k次水, 每次可使花高度 + 1, 每次可浇相邻的w盆,ai 表示 i-th盆花 的 ...

  3. JSON的使用场景及注意事项介绍

    上篇我们讲解了JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford) 和 奇普·莫宁斯达(Chip Mornings ...

  4. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

  5. String对象常量池

    对象池的主要目的是实现数据的共享处理, 在java之中对象池可以分为两种: 1.静态常量池 :指*.class加载时会自动将此程序之中保存的 字符串.普通的常量.类和方法的信息等全部经行分配 2.运行 ...

  6. MySQL将一个表的查询结果作为本表的查询条件更新数据

    先建一张S01人口统计信息表: drop table if exists S01人口统计信息; /*================================================== ...

  7. 运维常用 MySQL 命令

    目录 设置用户密码 方法一 方法二 丢失root密码找回 添加用户 设置用户密码 方法一 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass ...

  8. Vsftp与PAM虚拟用户

    使用yum 安装vsftp yum install vsftpd pam pam-* db4 db4-* 创建一个保存用户及密码的文件 cd /etc/vsftpd/ touch virtual_lo ...

  9. gulp+webpack+angular1的一点小经验(第三部分使用一些angular1的插件ui-bootstrap与highcharts)

    第一个要介绍的是我们的麻烦制造器:angular-ui-bootstrap ui-bootstrap可以有很多通用的插件给大家用,比如弹窗啊(modal),翻页控件啊(pagination),为什么说 ...

  10. Anticancer Effect of Deuterium Depleted Water - Redox Disbalance Leads to Oxidative Stress(低氘水的抗癌作用-氧化还原失衡导致了氧化应激)-解读人:范徉

    期刊名:Molecular & Cellular Proteomics 发表时间:(2019年12月) IF:4.828 单位:瑞典卡罗林斯卡学院 物种:人 技术:标记定量蛋白质组学,氧化还原 ...