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的活跃状态一目了然,各个接口的响应速度 ...
随机推荐
- 第一个SpringMVC实例和解析(HelloSpringMVC)
1. 开发步骤: (1)增加Spring支持 下载Spring安装包和其依赖的commons-logging.jar,复制到项目Web应用的lib文件夹(WebRoot/WEB-INF/lib): S ...
- visual studio for mac在线安装网络错误
vs2017 for mac 终于出正式版了,兴冲冲的准备摆脱虚拟机. 官网https://www.visualstudio.com/zh-hans/vs/visual-studio-mac/下了安装 ...
- SQL SERVER 删除前判断指定的表或者存储过程是否存在
1.创建存储过程: CREATE PROCEDURE proc_pr ---将create修改成alter可以修改存储过程: AS BEGIN IF EXISTS(SELECT * FROM syso ...
- 【原创】 Docker 中 运行 ASP.NET Core 站点
一. 建立 .NetCore 项目 a.新建项目 b.选择项目类型 c.添加控制器 d.添加视图 e.修改默认请求 f.发布 二. 准备 CentOS 环境 a.准备虚拟机 b.安装 docker ...
- hdu2415(树上背包)
这道题好像没什么人写题解,于是写了一发 题意:有个坏蛋想要参加竞选,需要得到m个人的支持,买通第i个人(1<=i<=n)需要一个cost[i],同时这些人又有上下属关系,只要买通了领导,他 ...
- java环境配置,试用和基本数据结构
一.java环境配置 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:jdk文件所在的路经变量名:CLASS ...
- 移动端em与rem区别
rem与em都是相对单位,我们使用它们的目的就是为了适应各种手机屏幕. rem是根据html根节点来计算的,而em是继承父元素的字体.比如下面一个demo <!doctype html> ...
- docker~通过vs2017的Dockerfile来生成镜像
回到目录 Dockerfile这个东西我们之前是介绍过,它方便,快捷,易用,而在vs2017中也对docker进行了支持,而生成docker image的方式就是有用Dockerfile为基础的,在添 ...
- [luogu]P1352 没有上司的舞会[树形DP]
本Lowbee第一次写树形DP啊,弱...一个变量写错半天没看出来...... 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点 ...
- tensorflow softmax应用
---恢复内容开始--- 1.softmax函数 2.tensorflow实现例子 #!/usr/bin/env python # -*- coding: utf-8 -*- import tenso ...