报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

在.NET 中实现 Actor 模型的不同方式

  • 2014-08-22
  • 本文字数:1191 字

    阅读完需:约 4 分钟

上周,《实现领域驱动设计》(Implementing Domain-Driven Design)一书的作者 Vaughn Vernon ,发布了 Dotsero ,这是一个使用 C#编写的、基于.NET 的 Actor 模型工具包,它的实现参考了 Akka API。Akka 工具包是对 Actor 模型的一种实现,目前为止已经有对应 Java 和 Scala 版本的 API。

今年早些时候,微软Research 部门也发布了一个基于Actor 模型的框架, Orleans 框架的预览版。这个框架采用了云端编程模型,编写这个框架的目的在于尽可能减少创建互动式的服务时所面对的各种挑战,这些服务往往对伸缩性和可靠性有较高要求。

Orleans 团队认为,虽然 Erlang Akka 这些 Actor 平台已经在简化分布式系统编程方面前进了一步,但由于它们提供了相对较低层次的抽象与系统服务,因此自身的复杂性依然很高。开发者们必须要成为分布式系统方面的专家,才有可能使用这些工具创建正确的解决方案。为了避免这些复杂性,并吸引主流开发者,Orleans 团队提升了 Actor 的抽象层次。虽然它仍然基于 Actor 模型,但与任何现有的基于 Actor 模型的平台所不同的是:它将 Actor 视为抽象的,而不是物理的实体。

最近,Vaughn 与 Orleans 项目的带头人,来自微软 Research 部门的 Sergey Bykov 在 twitter 上进行了一番讨论。Vaughn认为,Orleans 本质上并非是一种基于Actor 模型的实现,其中部分原因在于它缺少了用以支持有限状态机(FSM)的 Become 和 Unbecome 方法,而 Vaughn 认为这是 Actor 原始的定义中所必需的一部分。他同时也认为,由于在 Orleans 中 Actor 是始终存在的,那么当客户端对某个本应不存在的 Actor 发起请求时,它难以意识到这一点,从而容易引发问题。

Sergey 在回应中表示,_Become_ 只是读取定义的其中一种方式,并非Actor 模型所必需的一部分。而从他的经验来看,由于Orleans 中的Actor 始终存在,因而减少了竞态条件的产生,并且简化了恢复操作,从这方面来看由此可能产生问题的可能性比Vaughn 所说要小很多。如果某个Actor 不应该存在,那么可以通过由应用程序逻辑返回一个错误状态的方式进行处理,虽然他也承认这种方式并不够理想,但比起在创建Actor 时遇到竞态条件的情况还是要更好一些。

最近, Azure 方面的一位微软MVP Richard Astbury 创建了一个简单的物联网网关应用程序,以此表明他对Orleans 的观点,即Orleans 能够帮助开发者在云端创建大规模、低延迟并且适应性良好的.NET 应用程序。Richard 表示,虽然这只是个简单的示例,但它已经包含了创建更复杂的场景时所需的各种基础构建块了。

今年三月时,有一份名为《 Orleans:针对可编程性与伸缩性的分布式虚拟 Actor 》的论文专门讲解了 Orleans 背后的设计原则。

Vaughn 去年在一篇关于响应式领域驱动设计(DDD)的文章中谈论了关于 Actor 模型的话题,并且在之前的一次演讲中谈论了 Actor Model 的产生以及 DDD 的相关话题。

查看英文原文:.NET Actor Model Implementations Differ in Approach

2014-08-22 03:383323
用户头像

发布了 428 篇内容, 共 184.6 次阅读, 收获喜欢 39 次。

关注

评论

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

618 技术特辑(二)几百万人同时下单的秒杀,为什么越来越容易抢到了

华为云开发者联盟

数据库 服务器 流量 618 弹性负载均衡

校友会小程序开发笔记二:功能需求设计

CC同学

小程序云开发 校友录小程序 校友会小程序

pprof排查Golang服务内存问题

循环智能

pprof 性能分析 Go 语言

【LeetCode】石子游戏Java题解

Albert

算法 LeetCode 6月日更

PO 就是Scrum中的产品经理?别再搞不清啦

万事ONES

项目管理 Scrum 敏捷开发 PO ONES

译文 | AI产品经理:如何打造一款SaaS+AI的优质产品

LigaAI

产品经理 研发管理

MySQL中的pid与socket是什么?

Simon

MySQL

密码学系列之:feistel cipher

程序那些事

加密解密 密码学 程序那些事

JAVA笔记(三)--变量及运算符

加百利

Java 程序员 后端 6月日更

6月26日,HarmonyOS开发者日将于杭州举办

科技汇

拍乐云受邀2021亚太CDN峰会,技术创新赋能行业新价值

拍乐云Pano

RTC

🌏【架构师指南】分布式技术知识点总结(上)

码界西柚

分布式 raft协议 paxos协议 6月日更

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

煎鱼

Java php 后端 Go 语言

react源码解析13.hooks源码

全栈潇晨

React

用EasyRecovery“监控硬盘”功能检测硬盘问题的方法

淋雨

数据恢复 EasyRecovery 文件恢复

快来,这里有23种设计模式的Go语言实现

华为云开发者联盟

线程 设计模式 单例模式 Go 语言

618 技术特辑(一)不知不觉超预算3倍,你为何买买买停不下来?

华为云开发者联盟

电商 图数据库 知识图谱 618 图引擎服务

阿里云视频云 Retina 多媒体 AI 体验馆开张啦!

阿里云CloudImagine

阿里云 短视频 视频处理 媒体处理 视频制作

教你两招,解决数据膨胀

华为云开发者联盟

数据 GaussDB(DWS) VACUUM 数据膨胀 FSM

校友会小程序开发笔记四:UI基本元素设计

CC同学

小程序云开发

缓存的世界 Redis(二)-持久化

卢卡多多

redis redis持久化 配置文件持久化 6月日更

校友会小程序开发笔记三:数据库设计

CC同学

小程序云开发 校友录小程序 校友会小程序

并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础

MetaThoughts

Java 多线程 并发 并发王者

项目经理如何有效管理需求变更?

万事ONES

需求管理 ONES 项目经理

校友会小程序开发笔记一:背景与技术方案的选型

CC同学

小程序云开发 校友录小程序 校友会小程序

Bzz节点分币系统开发,云算力矿机租赁系统搭建

开发者如何构建技术影响力

不脱发的程序猿

程序人生 开发者如何构建技术影响力 技术影响力

Python——字典的使用

在即

6月日更

针对 MySQL IO 特点进行的存储优化揭秘

焱融科技

MySQL 技术 分布式 高性能 文件存储

JavaScript 学习(三)

空城机

JavaScript 大前端 6月日更

可视化协助矿山,打造“高效率运营战略”,年降成本500W

一只数据鲸鱼

数据可视化 工业4.0 智慧矿山

在.NET中实现Actor模型的不同方式_.NET_Jan Stenberg_InfoQ精选文章