抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

ActorFx 介绍:一个云 Actor 运行时

2013 年 3 月 03 日

由 Microsoft 的附属公司 MS Open Tech 开发的 ActorFx 打算提供一个“非规范性的、独立于语言的动态分布式对象模型”。该模型由两个组件构成:actor 本身及其数据存储,它们分别由接口 IActor 和 IActorState 表示。

IActorState 进行状态管理

最初的 IActorState 是一个非常简单的接口,它的本质是一个暴露了 Set、Get、TryGet、Remove 和 Flush 方法的字典。最后一个能够异步运行的操作用于提交改变。按照约定,在调用 commit 方法之后改变会被自动保存到持久化存储,而在此之前则会被存储在一个“本地副作用缓冲区(local side-effect buffer)”中。

这种简化隐藏了一个秘密,那就是可以请求 IActorState 存储任何内容,包括活动代码(Active Code)。

Actor 方法

之前使用 Actor 时必须教导它,让它知道自己能做什么。与传统的.NET 编程不同的是,这并不是通过人工向服务器部署代码来实现的。相反,方法是在运行时使用 IActor.AddAssembly 函数推送到 actor 的。程序集由一个字节数组表示,因此能够通过线路传输并将其存储到 IActorState 自身内部。

这意味着每一个 Actor 都是一个完全封闭的对象。它没有从类或者原型(prototype)中继承方法,它自己本身就有这些方法。同时随时都可以简单地改变这些方法,只要推送一个具有同样名称的新程序集即可。

因为是一次性地加载程序集,所以实际的 Actor 方法需要使用 ActorMethod 属性标记。被该属性标记的方法必须遵循委托模式 Func<IActorState, object[], object>。

向 Actor 发送消息

可以使用 IActor.CallMethod 向一个 Actor 发送消息。IActor.CallMethod 方法有两个参数,一个是方法的名字(来源于之前添加的程序集),另一个是该方法参数的数组。它的返回类型是简单的 System.Object。

通过 IActor.CallMethod 调用方法时,客户端还需要传入客户端 ID 和序列号。这样 Actor 运行时就能识别重复的请求并重新发送之前调用的结果。当然,客户端需要负责确保对于给定的消息这一对值是唯一的。

Actor 之间的通信

Actor 之间通过 IActorProxy 的瞬间实例进行通信。通过代理一个 Actor 能够调用另一个 Actor 的 CallMethod。
除了直接的方法调用之外,还能使用代理设置订阅。基于修改版本的 IObserver,来自于发布 Actor 的事件能够引发对订阅 Actor 方法的调用。调用 Subscribe 方法返回令牌(token)的 Dispose 方法便可以取消订阅。

客户端示例

到现在为止我们谈论的大部分内容都是与 Actor 运行时实现相关的。大多数开发者将会处理 FabricActorClient 这样的客户端。下面我们看看关键的方法:

public class FabricActorClient
{
public FabricActorClient(Uri fabricUri, Uri actorUri, bool useGateway);
public bool AddAssembly(string assemblyName, byte[] assemblyBytes);
public Object CallMethod(string methodName, object[] parameters);
public IDisposable Subscribe(string eventType, IObserver eventObserver);
}

再次强调,必须注意 AddAssembly 会查找匹配 Func<IActorState, object[], object> 签名的静态方法。

ActorFx 基于 Apache 许可,目前处于 alpha 状态,可以从 CodePlex 网站上获取。

查看英文原文: Introducing ActorFx, a Cloud Based Actor Runtime

2013 年 3 月 03 日 01:00795
用户头像

发布了 321 篇内容, 共 105.6 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

技术白皮书:现代企业架构设计

信码由缰

企业架构

ipfs国家认可吗?ipfs挖矿靠谱吗?

IPFS老胡

IPFS国家认可吗 ipfs挖矿靠谱吗

都2021年了,你还在用Jenkins?赶快看看这些替代方案吧

编程菌

Java 编程 程序员 计算机 技术宅

裸辞闭关62天,啃下这些分布式技术笔记,有幸通过阿里Java岗P6面试

Java~~~

Java 架构 面试 分布式 高可用

大二上半学期还挂科两门,大三上半学期就找到了外企实习工作,半年时间,我是怎么逆袭的?

编程菌

Java 编程 程序员 面试 计算机

斯图飞腾发布《如何将客户反馈转化为有价值的商业洞察》白皮书

Geek_459987

博睿数据斩获“飞腾PCS认证集成商”,推动国产化生态建设再进一步!

博睿数据

百度世界大会2021: 与时代共振,AI让生活更好

百度大脑

人工智能

OCR开发者福音:PDF提取Excel文件算法开源啦

百度开发者中心

最佳实践 开发者 方法论 开源项目 OCR

面试还不会Spring?阿里P8总结的100道面试解析,让你实锤面试官

程序员改bug

Java spring 编程 架构 程序员面试

三年开发,跳槽腾讯三面终获Offer,定级T2-1(面试题+经验总结)

编程菌

Java 编程 程序员 面试 计算机

上游思维:如何定义成功?

石云升

读书笔记 8月日更 上游思维

分享 6 个JavaScript学习资源

devpoint

JavaScript GitHub 8 月日更

百度商业大规模微服务分布式监控系统-凤睛

百度开发者中心

产品 最佳实践 方法论 经验分享 监控系统

美图资深技术专家亲笔:400页的高并发系统设计,近50个核心难点,让你面试直接封神!

Java技术那些事

Java 编程 程序员 面试 java程序员

模块五作业

俊杰

架构实战营

云原生 | 混沌工程工具 ChaosBlade Operator Pod 篇

RadonDB开源社区

数据库 混沌工程

分享我的华为面经,华为OD岗笔试+面试心得,本人已成功入职!

编程菌

Java 华为 程序员 面试 计算机

Web JS SDK 架构解析

神策技术社区

技术 源码分析 神策数据

上线直接霸占GitHub榜一!腾讯内部spring全家桶笔记细节拉满!

Java 白

Java 编程 架构 腾讯 面试

借鉴这份Java复习路线,我成功收获蚂蚁金服、阿里、美团等Offer

程序员改bug

Java 程序员 架构 编程语言

hadoop 基本原理与应用

神策技术社区

hadoop 程序员 Hadoop全分布式集群

金九银十你打算用什么硬核技能噎死面试官呢?附Java面试核心笔记

Java~~~

Java spring 架构 面试 微服务

阿里技术3面+HR面,奋战两个月,终斩获offer定级阿里P6+

编程菌

Java 编程 程序员 面试 计算机

第一次看房

escray

生活记录 8月日更

ASM 实现 Hook Lambda 和方法引用

神策技术社区

前端 后端 asm 代码 神策数据

iOS SDK 的 H5 打通方案演进 | 数据采集

神策技术社区

程序员 前端 后端 数据 方案

别再乱搞了,看看优秀的代码是如何分层的!

Java技术那些事

Java 编程 程序员 计算机 8 月日更

啃完这7套Java面试题,金九银十阿里P7稳了,收藏夹吃灰

Crud的程序员

Java 架构 编程语言 java面试 程序员面试

你真的懂Redis与MySQL双写一致性如何保证吗?

Linux服务器开发

MySQL redis 中间件 架构师 Linux服务器开发

Android SDK 的 H5 打通方案演进

神策技术社区

前端 后端 神策数据 shujv

Study Go: From Zero to Hero

Study Go: From Zero to Hero

ActorFx介绍:一个云Actor运行时-InfoQ