Daz*_*zfl 7 design-patterns cqrs actor microservices
我\xe2\x80\x99m 目前正在学习Actor 设计模式或模型,它看起来很有趣。然而,我\xe2\x80\x99m正在努力寻找任何像样的现实世界示例来说明如何或在何处应用此模型(除了带有余额的简单银行帐户或游戏的敌人坐标的基本示例之外) , ETC)。
\n作为我研究的一部分,我遇到了一个示例电子商务微服务应用程序 (eShopOnDapr),其中订单是一个 Actor。这是否是一个可以使用 Actor 模型的真实示例?
\n这种设计模式可以或者应该与微服务一起使用吗?使用上面的示例,订购服务仅处理订单,而不处理产品或客户等。对我来说,订单可能是参与者是有道理的,但最好使用其他技术构建服务,例如使用 CQRS,甚至只是基本状态管理(创建一个 Order 实例并在每次更新时记录它\xe2\x80\x99s 状态)
\n正如你所看到的,在设计模式的这个领域,我还有很多东西需要学习,但如果有人能给我指出一些好的 doco 或 YouTube 剪辑,用一些很好的现实世界例子来解释这些事情,那就太好了。
\n如果您的应用程序相对简单,并且它可能是同步 CRUD REST 应用程序,那么 Actor 模型可能有点过分了。
对于更大、更复杂的领域,具有更多移动部分的 Actor 模型可以简化您对应用程序的思考,并能够将其分解为组成部分。有很多架构注意事项和选项需要考虑,它们在很大程度上取决于您的特定用例和非功能性需求 (NFR)。
正如 @levi-ramsey 在他的回答中所说,除了演员之外,还可以使用CQRS ,但它是可选的。添加它是一个独立的选择。事件溯源 (ES) 和领域驱动设计 (DDD) 也是如此。
参与者模型有用的一些 NFR 是分布(参与者的位置透明性)和弹性(委托给子参与者,并且“让他们崩溃”,其中主管可能会重新启动或升级错误)。Actor 模型可以抽象出大量的网络管道,这对于微服务架构来说是一个福音。
根据领域复杂性、业务逻辑、模块化/可扩展性、可扩展性等需求,结合各种架构实践(例如 Actors/DDD/CQRS/ES 和六边形架构)更有意义。但前提是您的应用程序保证......它们各有优缺点(例如微服务和事件溯源中的“最终一致性”)。
上述组合出现在分布式 DDD (DDDD) 中,也称为响应式 DDD。在这里可以找到 Vaughn Vernon 的一些精彩视频,例如在反应系统中使用具有领域驱动设计 (DDD) 的 Actor 模型(他将域聚合转变为 Actor),以及DDD、事件溯源和 Actor中的 Alexey Zimarev (他将应用层的参与者逻辑)。
您会发现很多与 Akka 相关的材料。他们有很好的文档材料。我个人觉得proto.actor很有趣,它是由 Akka 创始人之一创建的,Alexey 也是团队的一员。
就设计模式而言,这篇文章认识顶级 Akka.NET 设计模式是一个好的开始。Akka 文档有一个关于交互模式的部分。虽然我还没读过,但我认为O'Reilly 的Applied Akka Patterns书相当不错。
就示例代码而言,Github actor-model主题可能会带来一些可供学习的优秀项目,例如 Proto Actor 项目有大量可供应用的Golang 示例或DotNet 示例,以及Bootcamp 课程。
参与者模型对微服务具有高度的机械同情心,尽管它往往更适用于思考服务的实现。
它同样不是 CQRS 所独有的。
如果您正在寻找在微服务中使用参与者模型以及事件溯源和 CQRS 的好示例,请参阅Lightbend 的 Akka 平台指南。