SEDA:用于良好可扩展的互联网服务的架构
"SEDA为的缩写阶段式服务器模型,并分解一个复杂的,事件驱动的应用程序为一组的阶段由连接队列 ".
我知道这是一个架构,并且SEDA有很多实现(参见维基百科文章).什么是"舞台"?有人可以提供有关分阶段事件驱动架构的全面高级摘要,以及它与传统(未分级?)事件驱动架构的区别吗?
舞台类似于"事件".为了简化这个想法,将SEDA视为在它们之间发送消息的一系列事件.
我认为,使用这种架构的一个原因是,您可以对逻辑进行分段并将其连接并解耦每个事件,主要用于具有低延迟要求的高性能服务.
如果使用Java TPE,则可以监视每个阶段的运行状况,吞吐量,错误,延迟,并快速找到性能瓶颈的位置.并且作为一个很好的副作用,使用较小的代码片段,您可以轻松地测试它们并增加代码覆盖率(这是我的情况).
为了记录,这是Cassandra(NoSQL)和Mule ESB(AFAIK)的内部架构.
我建议阅读原始论文(抱歉,重复链接):
https://github.com/mdwelsh/mdwelsh.github.io/blob/master/papers/seda-sosp01.pdf
这是我为SEDA for Java EE建模的框架:http: //code.google.com/p/seide/
线程架构与现实生活中的分阶段事件驱动架构:
想象一下,你有一家餐馆.现在,它将如何运作?
"线程架构":
客户到达
服务员(a)去找他/她
服务员(a)将他/她带到一张可用的桌子
服务员(a)接受订单
服务员(a)做饭
服务员(a)接受订购
服务员(a)等到客户完成他/她的餐费
服务员(a)走出客户端
在这种情况下,服务员在整个过程中与客户一起.如果服务器有10个线程,可以同时处理10个连接.
与SEDA:
客户到达
服务员(a)去找他/她
服务员(a)将他/她带到一张可用的桌子(然后回来给另一位客户来)
服务员(b)接受订单(大量I/O,需要时间)
库克做饭
服务员(c)接受订购
服务员(d)等到客户完成他/她的用餐付款
服务员(e)走出客户
在这种情况下,有不同类型的参与者在做这些活动.这有助于在活动中重复使用参与者,花费更少的时间并且结果更有效.事实上,这就是餐馆的工作方式(可能更多的服务员是同一个人,但厨师绝对不是).
这是一个极端的例子,当然对于线程服务器,可以完成一些异步任务.这只是一个理论上的例子.