设计模式与演员

时间:2012-11-26 02:13:46

标签: scala messaging akka actor event-driven-design

基于演员的范式非常酷。它有效扩展的能力使其成为必须评估任何并发系统的范例。我已经做了一些关于它的阅读,并且对核心意图有了一个不错的想法:用消息和多个“演员”驱动昂贵的操作,以最大限度地减少由于请求/响应交互引起的等待,从而提高系统的吞吐量。但是,我没有充分了解人们与演员使用的设计模式。我正在寻找基于演员的系统的设计模式。

演员设计模式的一个常见示例是一个系统,其中有一个主协调员角色和一群子工作者角色。他们将昂贵的操作映射到较小的块,将较小的块作为消息发送给一堆工作者,等待来自它们的响应,然后将它们全部减少到结果。在这种模式的一些复杂的例子中,工作者通知主人他们已经准备好做更多的工作,并且主人的路线更多地按需工作。这可以确保适当的工作平衡,并且在工作量变化很大时非常有用。

我搜索了更多基于演员的模式的文献,除了上面的例子之外找不到任何其他例子。我还没有通过Akka Actors项目样本,但任何指针都非常有用。

5 个答案:

答案 0 :(得分:11)

我强烈推荐Derek Wyatt的“Akka Concurrency”书 - 它专注于最新的Akka发行版(2.1),并介绍了使用Akka和许多设计模式(强调事件驱动设计)的几个最佳实践。但它确实在Scala中承担了相当多的知识。

来自Akka Summer of Blog系列的帖子也非常有用(其中一些也是由Derek [和我一个人]写的)。

答案 1 :(得分:3)

首先,熟悉http://en.wikipedia.org/wiki/Flow-based_programminghttp://en.wikipedia.org/wiki/Dataflow_programming。 Actor模型是datatflow编程的子集,并且actor模型实现甚至更受限制。

答案 2 :(得分:1)

值得一提的是企业集成模式(http://www.eaipatterns.com/)的工作。完全有可能在他们的作品中从未提及“演员”这个词,但是从队列处理器到演员的翻译是微不足道的,比如将Poe从英语翻译成法语。像你描述的负载平衡模式是你在那里学到的最少的。

答案 3 :(得分:1)

我发现了一些关于基于事件的编程的文献。

http://www.amazon.com/Event-Based-Programming-Taking-Events-Limit/dp/1590596439/ref=pd_rhf_ee_s_cp_8

关于基于事件的交互模式的章节似乎很有希望

答案 4 :(得分:0)

我刚刚对一个类似的问题给出了 more elaborate answer,但我将在这里总结我发现的有关 Actor 模型的最有趣的资源。

设计模式:

反应式 Actor 和 DDD:

Proto Actor(Akka 的一位创作者在 Alexey Zimarev 的帮助下进行的项目)。我发现这个项目比 Akka 更容易理解,它非常详尽(我与他们没有从属关系,但考虑使用):

然后在 Github actor-model 主题上搜索可能会产生有趣的东西。

我在 QCon 视频 Actors or Not: Async Event Architectures 中找到的更多书籍推荐: