注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

Orleans - M$的分布式系统  

2014-12-02 11:54:35|  分类: net_Orleans |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Orleans

对于网络游戏这种应用,不适合web那种stateless的构架。M$给出的解决方案,是orleans。类似erlang的actor模型,每个actor自己都是有状态的。

Virtual Actors,每个 Actor 对于整个系统来说,一旦注册后,是永久存在的。类似虚拟内存,此时就算 Actor 不在内存中,也不妨碍其它 Actor 给其发消息。
如果不在内存中(non-active状态),系统自动找一个空闲server将其实例化(Automatic instantiation),并发送消息,让其处理。
virtual actor是orleans和其它分布式系统最大的区别。比如erlang是要求你关心一个actor是否创建成功的,这样就会有一个很复杂的supervisor tree。

每种actor,在整个系统中,只有一份,并且是单线程执行逻辑。相当于 event-multiplexing,这就拒绝了各种同步机制。
存储由系统来保证,提供一个接口,调用一下,保存一次。然后由使用者,根据需求来选择什么时机调用(checkpoint)。
另外,对于stateless并发业务,也可以创建多个 stateless actor。

系统支持Timer和Reminder。Timer,只有Actor存在的时候,才存在的定时器。Reminder,无论Actor是否存在,都会执行的定时器。
Reminder很适合于类似crontab的行为,很久才执行一次的逻辑。

Actor执行逻辑,是cooperative multitasking。每次工作称为一个turn,一旦执行,不被打断,由使用者自己控制。
因为 all actors 都是一个 developer team 开发的,所以不存在 actor 没写好,一个 turn 占用太多时间的问题。

Actor之间的消息路由,通过 Diestributed Directory 来实现。每个Server自己会cache一份actor-server的信息,尽量保证消息发送不需要经过多次route。一个 Server 挂掉,其它 Server 会互相通知 actor 的注册信息,会保证eventual consistency。
  评论这张
 
阅读(797)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017