Actor设计模式和现实世界的例子

2023-11-27

我目前正在学习 Actor 设计模式,或者模型,它看起来很有趣。然而,我正在努力寻找任何像样的现实世界示例来说明如何或在何处应用此模型(除了带有余额的简单银行帐户或游戏的敌人坐标等的基本示例之外)。

作为我研究的一部分,我遇到了一个示例电子商务微服务应用程序 (eShopOnDapr),其中订单是一个 Actor。这是否是一个可以使用 Actor 模型的真实示例?

这种设计模式可以或者应该与微服务一起使用吗?使用上面的示例,订购服务仅处理订单,而不处理产品或客户等。对我来说,订单可能是参与者是有意义的,但最好使用其他技术构建服务,例如使用 CQRS,甚至只是基本的状态管理(创建订单的实例并在每次更新时记录其状态)

正如你所看到的,在设计模式的这个领域,我还有很多东西需要学习,但如果有人能给我指出一些好的 doco 或 YouTube 剪辑,用一些很好的现实世界例子来解释这些事情,那就太好了。


如果您的应用程序相对简单,它可能是例如一个同步的 CRUD REST 应用程序,那么 Actor 模型可能就有点过分了。

对于更大、更复杂的领域,具有更多移动部分的 Actor 模型可以简化您对应用程序的思考,并能够将其分解为组成部分。有很多架构注意事项和选项需要考虑,它们在很大程度上取决于您的特定用例和非功能性需求 (NFR)。

正如@levi-ramsey 所说他的回答 CQRS might除了 actor 之外还可以使用,但是是可选的。添加它是一个独立的选择。事件溯源(ES)也是如此。领域驱动设计(DDD)。

参与者模型有用的一些 NFR 是分布(参与者的位置透明性)和弹性(委托给子参与者,并且“让他们崩溃”,其中主管可能会重新启动或升级错误)。 Actor 模型可以抽象出大量的网络管道,这对于微服务架构来说是一个福音。

根据领域复杂性、业务逻辑、模块化/可扩展性、可扩展性等需求,结合各种架构实践(例如 Actors/DDD/CQRS/ES 和六边形架构)更有意义。但前提是您的应用程序保证......它们各有优缺点(例如微服务和事件溯源中的“最终一致性”)。

上述组合出现在分布式 DDD (DDDD) 中,也称为响应式 DDD。在这里可以找到 Vaughn Vernon 的一些精彩视频,例如在响应式系统中使用具有领域驱动设计 (DDD) 的 Actor 模型(他将领域聚合转变为演员),还有 Alexey ZimarevDDD、事件溯源和参与者(他将参与者逻辑放在应用程序层中)。

您会发现很多与 Akka 相关的材料。他们有很好的文档材料。我个人发现原型演员有趣的是,由 Akka 创始人之一创建,Alexey 是团队的一员。

本文就设计模式而言认识顶级 Akka.NET 设计模式是一个好的开始。 Akka 文档有一节介绍交互模式。虽然我没读过,但我想应用 Akka 模式奥莱利的书相当不错。

就示例代码而言,Github演员模型主题可能会带来一些值得学习的伟大项目,例如Proto Actor 项目有一个很大的清单Go 语言示例 or 点网示例申请,以及训练营课程.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Actor设计模式和现实世界的例子 的相关文章

  • Java 枚举相对于旧的“类型安全枚举”模式的优势?

    在 JDK1 5 之前的 Java 中 Typesafe Enum 模式是实现只能采用有限数量值的类型的常用方法 public class Suit private final String name public static final
  • C# 扩展方法 - 设计模式

    我想知道 C 扩展方法是否基于任何现有的设计模式 设计模式只是一种众所周知的范例 即 当你想实现 X 时 就做 Y 面向对象语言 例如 C 中的一个众所周知的范例是 当您想要对对象的状态进行操作时 调用它的实例上的方法 但是 在创建扩展方法
  • 构建器模式的真实示例

    我想看看 Builder 模式是如何在现实世界的应用程序 API 中使用的 我找到的例子都是披萨 蛋糕 汽车等等 加上 GoF 书中的解析器示例 您能否告诉我这个模式在现实世界的应用程序 API 中的一些用法 最好是来自 C NET 或 P
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • API 网关和边缘服务有什么区别?

    我理解 Richardson 所描述的 API 网关背后的概念 http microservices io patterns apigateway html http microservices io patterns apigateway
  • 奥尔良谷物任务调用结果

    对于这个长问题我深表歉意 我一直在对奥尔良进行实验 以了解它的各种特性 这些问题在逻辑上都归为一类 第一个测试涉及客户端每 1 秒向特定 Grain 发出一次请求 而 Grain 需要 10 秒来执行请求 代码是这样的 client cod
  • Struts ActionForm 属性应该是什么类型?

    我使用 Struts 1 2 4 继承了这个巨大的遗留 Java Web 应用程序 我有一个关于 ActionForms 的具体问题 其中一些仅具有字符串属性 即使对于数字 其中一些使用看似合适的类型 整数 日期 字符串等 这里的最佳实践是
  • Akka/Scala:映射 Future 与 pipelineTo

    In Akka参与者 在发送一个Future结果给另一个演员 A 映射Future发挥作用tell结果给演员 B 定义一个onSuccess未来的回调 其中tell结果给演员 C 管道Future结果给演员pipeTo 其中一些选项已在上一
  • 你们中有多少人进行三层设计?

    多年来 三层设计一直是我数据库驱动应用程序的标准设计理念 它从未让我失望过 对于那些练习它的人 描述一下你的层次 我发现很多人混淆了业务层和数据访问层 使其更像是 2 5 层设计 我更喜欢使用存储过程将数据层几乎完全移动到数据库中 并且在代
  • const int 列表而不是 enum

    我开始研究大型 C 代码库 并发现使用带有多个 const ints 字段的静态类 这个类的行为与枚举完全一样 我想将类转换为实际的枚举 但权力被拒绝 我想转换它的主要原因是这样我可以将枚举作为数据类型而不是 int 这对可读性有很大帮助
  • tbb:并行查找第一个元素

    我遇到了这个问题 查找列表中满足给定条件的第一个元素 不幸的是 该列表相当长 100 000 个元素 并且使用单个线程评估每个元素的条件总共需要大约 30 秒 有没有办法干净地并行化这个问题 我浏览了所有tbb模式 但找不到任何合适的 UP
  • 如何在 akka actor 中测试公共方法?

    我有一个 akka 演员 class MyActor extends Actor def recieve def getCount id String Int do a lot of stuff proccess id do more st
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 包含其他类集合的类的设计(操作方法)

    如何设计涉及其他类集合的类 一般示例 A 工作空间包含数量Projects A Project包含大量资源 Each Resource可能包含大量Files 所以这里标识的类可以是 Workspace Project Resource 和
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 空对象模式以避免空检查?

    最近 我遇到了空对象设计模式 我的同事说它可以用来消除整个代码中遇到的空指针检查 例如 假设 DAO 类返回有关 Customer 的信息 在名为 CustomerVO 的值对象中 我的主类应该提取名字和电子邮件 ID 并向客户发送电子邮件
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 具有线程安全性的 eventbus 最佳实践

    我的应用程序具有用户交互活动和后台服务 这是修改数据模型的唯一地方 后台服务监听用户所做的操作以及来自网络的传入消息 因此 可能会出现并发问题 我尝试使用处理程序来防止这些问题 对于事件层 我使用 greenrobots Eventbus
  • 存储库模式和 Linq to sql

    我正在尝试使用角色表 用户表和具有用户 ID 角色 ID 的外部参照表来实现用户身份验证和授权 为了实现通用存储库来更新角色 插入角色 添加用户 将用户添加到角色 更新用户 更新用户角色 验证用户 添加用户会话进行审核等 我是否需要为每个存
  • 我可以在用例中扩展参与者吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我可以在用例中扩展参与者吗 例如我有

随机推荐

  • 如何从“签出但已删除”状态恢复文件?

    我试图签出一个文件 它进入 签出但已删除 状态 我无法撤消结账 也不知道下一步需要做什么 当我为此上网时 我发现了一篇文章IBM 网站结帐但已删除状态 但我没有尝试重命名文章中提到的文件名 但仍然出现错误 我使用的是 Clearcase 7
  • 使用 out/ref 与返回相比有什么好处?

    我正在使用 XNA 框架制作游戏 因此我使用了很多对向量进行操作的函数 尤其Vector2 64 位结构 让我困扰的是大多数方法都是用 ref 和 out 参数定义的 这是一个例子 void Min ref Vector2 value1 r
  • 在Python中,有没有办法以某种格式验证用户输入? [复制]

    这个问题在这里已经有答案了 在Python中 我要求用户输入一个办公室代码位置 其格式需要为 XX XXX 其中X是字母 我如何确保他们的输入遵循格式 并且如果不要求他们再次输入办公室代码 Thanks 标准 且与语言无关 的方法是使用常用
  • 这个 C++ 堆栈分配器有改进吗?

    对我的基于堆栈的分配器有什么建议吗 除了建议使用具有私有 公共成员的类 struct Heap void heap start void heap end size t max end Heap size t size heap start
  • 尝试获取类型 ICacheManager、键“缓存管理器”的实例时发生激活错误

    我似乎在这里碰壁了 希望能够得到任何有能力的人的帮助 我不太确定下面的错误消息是什么意思 我正在使用企业模式服务的缓存块 但我不断遇到以下问题 我下载了最新版本并尝试逐步解决该问题 但我似乎无法确定确切的问题 我需要帮助 提前致谢 Test
  • 在 Python 中,单击如何查看父命令具有必需参数的子命令的 --help?

    我的程序使用Click用于命令行处理 它有一个带有必需参数的主命令 该命令具有带有可选参数的子命令 不同的子命令采用不同的选项 但它们都需要来自其父命令的相同参数 我希望命令行看起来像这样 python myprogram py argum
  • heroku rake db:migrate > 没有要加载的文件 -- faker

    我第一次尝试将 Rails 3 应用程序部署到 Heroku 似乎可以向上推 但是当我尝试跑步时 heroku rake db migrate 我收到以下错误 rake aborted no such file to load faker
  • iOS 核心数据错误 - 一对多关系的值类型不可接受

    我对这个问题感到抓狂 这看起来应该是非常简单的事情 iOS Objective C 对我来说是新的 所以也许我只是没有掌握一些基本的东西 问题是我已经向核心数据模型添加了一个新实体 并建立了一对多关系 该模型已经有两个具有一对一关系的实体
  • 如何最好地测试 Java 代码?

    我自己一直在开发一个比较大的系统 这是我第一次开发大型系统 同时处理200 通道的信息 我知道如何使用 Junit 来测试每种方法 以及如何测试边界条件 但是 对于系统测试 我仍然需要测试所有接口 可能还需要测试一些压力测试 也许还有其他事
  • TakeUntil 未按文档说明工作?

    From 的文档TakeUntil操作员 强调我的 TakeUntil 订阅并开始镜像源 Observable 它还监视您提供的第二个 Observable 如果第二个 Observable 发出一个项目或发送终止通知 TakeUntil
  • 内拉伸 以适应窗口大小

    我正在尝试在 DOM 内拉伸 svg 文档以适应窗口大小 like so div div click to zoom div div
  • UITextView inputView

    我正在为 iPad 制作自定义输入法 我希望能够用我的输入法替换系统键盘 并通过该输入法输入文本 根据文档 我需要做的就是用我的视图设置 inputView 属性 它将用来代替系统键盘 我这样做了 就显示键盘而言 它有效 但我如何实际在文本
  • 如何使用 Nginx 将 404 请求重定向到 Django 单页应用程序中的主页?

    我有一个 Django 单页应用程序 目前 当您访问网站上不存在的 URL 时 会显示 404 错误 但是 在这种情况下 我想重定向到该网站的主页 我不确定我是否应该如何使用 Nginx 执行此操作 或者是否有办法在 Django 中执行此
  • 在 php 中循环时显示输出

    是否可以在无限循环中在浏览器上显示字符串 这就是我想要发生的事情 while 1 echo should display these lines on browser while in infinite loop br 对的 这是可能的 你
  • CORS 的概念以及我应该强制执行 Origin 标头吗?

    据我所理解CORS 无法以让您真正确定呼叫者是谁的方式来完全保护您 因为调用者可以发送他想要的任何 ORIGIN 标头 实际上我在某处读到你无法通过 javascript 设置原始标头 因为它是一个受限制的标头 但我不太确定这一点 无论如何
  • 我的设备控制器 rspec 中的“创建后”问题

    好吧 我的第一个问题 所以要温柔一点 我正在使用 devise 进行身份验证 但我有自己的控制器来扩展创建用户时发生的情况 我在注册 注册 时创建 用户 和 机构 在路线 devise for users controllers gt re
  • Visual Studio 2008 中的 if 语句怪异

    我遇到了一个非常奇怪的问题 所以我记录了我的会话 因为我认为没有人会相信我 我遇到了一个似乎非常基本的错误 这是一个单线程应用程序 我所做的就是评估布尔值 布尔值等于 false 但是 if 语句的执行就好像它是 true 一样 有点像 你
  • Imaplib 中的 EOF 错误

    我正在编写一个 python 小程序 用于监视工作场所电子邮件箱的未读计数 当我在小程序闲置大约 10 分钟后尝试使用任何 imaplib 方法时 遇到了 EOF 错误 一切工作正常 直到小程序存活超过 10 分钟 这是imaplib对象的
  • OpenMP - 仅创建一次线程

    我尝试使用 OpenMP 编写简单的应用程序 不幸的是我在加速方面遇到问题 在此应用程序中 我有一个 while 循环 该循环体由一些应按顺序执行的指令和一个 for 循环组成 我用 pragma omp parallel for使这个 f
  • Actor设计模式和现实世界的例子

    我目前正在学习 Actor 设计模式 或者模型 它看起来很有趣 然而 我正在努力寻找任何像样的现实世界示例来说明如何或在何处应用此模型 除了带有余额的简单银行帐户或游戏的敌人坐标等的基本示例之外 作为我研究的一部分 我遇到了一个示例电子商务