什么是SEDA(分阶段事件驱动架构)?

时间:2010-08-25 22:06:30

标签: architecture stage event-driven eda

SEDA: An Architecture for Well-Conditioned, Scalable Internet Services

“SEDA是分阶段事件驱动架构的首字母缩写词,并将复杂的,事件驱动的应用程序分解为由队列<连接的一组阶段 / EM>“。

我知道这是一个架构,并且SEDA有很多实现(参见Wikipedia article)。什么是“舞台”?有人可以提供有关分阶段事件驱动架构的全面高级摘要,以及它与传统(未分阶段?)事件驱动架构的区别吗?

2 个答案:

答案 0 :(得分:15)

舞台类似于“事件”。为了简化这个想法,可以将SEDA视为一系列在它们之间发送消息的事件。

我认为,使用这种架构的一个原因是,您可以对逻辑进行分段,并将其连接并解耦每个事件,主要用于具有低延迟要求的高性能服务。

如果使用Java TPE,您可以监控每个阶段的运行状况,吞吐量,错误,延迟,并快速找到性能瓶颈的位置。并且作为一个很好的副作用,使用较小的代码片段,您可以轻松地测试它们并增加代码覆盖率(这是我的情况)。

记录中,这是Cassandra(NoSQL)和Mule ESB(AFAIK)的内部架构。

我建议阅读原始论文(抱歉,重复链接):

这是我为SEDA for Java EE建模的框架:http://code.google.com/p/seide/

答案 1 :(得分:1)

文档位于github

文件中提到的SEDA: “SEDA内部的基本处理单位是舞台。舞台 是一个由事件处理程序组成的自包含应用程序组件, 传入的事件队列和线程池...... 每个阶段都由影响调度的控制器管理 和线程分配。阶段线程通过从传入事件队列中拉出一批事件并调用应用程序提供的事件处理程序来进行操作。事件处理程序处理每批事件,并通过将其排入其他阶段的事件队列来调度零个或多个事件。“

对我而言,您可以将舞台设计为应用程序流的逻辑模块化。它可以基于功能,基于关注点的分离,基于性能,基于操作和维护。

我会请你阅读附带的PDF文件,因为它提到需要一个事件队列来解耦东西,逻辑能力化以实现组件的最大效率,如何有效地重用运行应用程序的现有资源,如网络,存储,CPU周期等,

为了绘制平行线,有一些关于装配线工人的研究,他们从头到尾连续组装工作,实现了较低的生产率,但是当他们被隔离并做成单一工作并将部分组装的单元传递给下一组,他们每个人都有效地管理他/她的工作。基本上你的装配流程分为多个阶段,每个阶段或其中一组负责在舞台上工作。

这里所做的一切都是围绕每个人或团体启用和设置框架,以及从一个人/团体到另一个人/团体的沟通模式。现在我们可以将每个人/组和他周围的框架设置进行比较。

要在SEDA中添加事件维度,请考虑人员组之间的通信方式以及所涉及的事件数量。比方说,第1阶段的人已经用完了螺母和螺栓来完成他们的阶段,他们立即通知订购部经理关于螺母和螺栓。订单部门经理可能会从另一个第6阶段的人那里得到类似的请求,那些螺母和螺栓已经用完了。现在,他在中心点看到了请求(他就像是SEDA中的控制器)和他所拥有的excel表,其中所有条目都保留了订单的请求(就像SEDA中的队列一样),他将它们组合在一起并一起订购它们而不是发送两个订单请求(SEDA中的线程和进度管理)。

现在,如果你的软件架构中有这样的机制,它有多个组件,相互发送各种事件,让控制器消耗它们并采取相应的行动,那么你可能已经有一个非常好的分阶段事件驱动设置了