基于代理/演员的并发设计的设计模式[关闭]

Posted

技术标签:

【中文标题】基于代理/演员的并发设计的设计模式[关闭]【英文标题】:Design patterns for Agent / Actor based concurrent design [closed] 【发布时间】:2010-10-08 19:08:36 【问题描述】:

最近我一直在研究支持演员/代理/无共享架构的替代语言 - 即。 scala、clojure 等(clojure 也支持共享状态)。

到目前为止,我阅读的大多数文档都集中在介绍级别。我正在寻找的是四个更高级的文档,但没有共享任何基础。

为什么?它有助于理解设计思维的变化。简单的示例很简单,但在现实世界的 Java 应用程序(单线程)中,您可以拥有具有 1000 个具有复杂关系的成员的对象图。但是随着基于代理的并发开发,它引入了一套全新的想法,以便在设计大型系统时理解。 IE。代理粒度 - 一个代理应该管理多少状态 - 对性能等的影响,或者是将共享状态对象图映射到基于代理的系统的良好模式。将域模型映射到设计的技巧。讨论不是关于技术,而是更多关于如何在设计中最好地使用技术(现实世界的“复杂”示例会很棒)。

【问题讨论】:

【参考方案1】:

“参与者”本身就是并发编程的统一模式(异步消息队列加上处理它的执行上下文),但是有许多设计模式可以帮助指定基于代理的系统的方面或元素。许多最常见的可以在***的文章Concurrency Patterns 中找到。一些亮点:

Reactor Pattern Mediator Pattern Scheduler Pattern Observer Pattern

如果您还没有接触过它,Akka 可能会引起您的兴趣——它是一个运行在 JVM 上的“纯粹”事件驱动的 Actor 框架。

【讨论】:

【参考方案2】:

即使我想不出任何可以为您提供设计的真实世界示例 模式直接向上,有几个地方可以开始。

首先是正确理解这些概念。一本书帮助 你这样做是Making reliable distributed systems in the presence of software errors 由 Erlang Guru Joe Armstrong 编写,其中解释了面向并发的编程 以一种非常方便的方式。它实际上是一个博士学位。论文,但不要让那吓到你。 与大多数普通教科书相比,它更容易阅读,而且价格便宜。

查看实际系统通常意味着您必须对实际系统了解太多 它的语言对于评估事物也很有意义。对于 Erlang,documentation 提供设计方法和行为(设计模式库的 Erlang speek)。 这将说明此设置中最常用的设计模式。还有这些 已被证明在构建大规模系统方面是有效的,即数百万行代码(相当于 Java 等其他语言的 4 到 10 倍)和在分布式机器集群中的一台机器上运行的几百万个并发进程。 Facebook Chat 是最近一个真实实时系统的例子。

对于其他框架,恐怕我无法真正帮助您。

【讨论】:

Facebook 聊天听起来很有趣。当您查看聊天/pbx 设计问题时,“交互”对象是一个很好的“代理”,因为交互在很大程度上是自包含的状态(各方、各方的 fsm 等)。很高兴看到他们在设计方面做了什么。【参考方案3】:

我问了一个类似的问题here,其中有一些合理的答案可能会有所帮助。我在仔细观察你的。我还没有找到真正帮助我的东西,但我非常积极地寻找。

我认为思维转变是迈向并发架构和语言的最大障碍,在此之前,开发人员将坚持使用易于学习的 MS 样式范例。要想真正成为主流,它需要找到进入学校的途径,并与 C# 和 VB 一起教授。

我对@9​​87654322@ 的回答是“同时”。

【讨论】:

以上是关于基于代理/演员的并发设计的设计模式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

关系数据库设计(MySQL)

基于Redis和Nginx实现高并发缓存架构

静态代理设计模式(StaticProxy)

并发编程基于锁的并发数据结构设计

基于新媒体模式下影视剧的内容运营设计与实现

代理网关设计与实现(基于NETTY)