1.Overview
SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步通信模式。
更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。
在每个Stage的通常有如下组件:
- Incoming Event Queue ,事件队列。
- Admission Controller 阀门,拒绝服务。
- Dynamically sized Thread Pool, 线程池。
- Event Handler ,实际处理业务的Compinent。
- Resource Controller ,控制Stage的参数。
2.Web2.0+SOA环境下的SEDA应用
Web2.0对架构师提出了新的挑战 , JavaEE 的同步调用机制(除JMS),有限的线程池与连接池(超出范围性能会下降),固定的定义在JNDI的资源对Web2.0/SOA的需求并不吻合。对BEEP,SCTP这些协议,必须依靠JCA另行编写模块来实现长连接模型。
Java EE 迎合 Web 2.0(IBM DW) 提出,从统计学上看在系统总线程数固定的情况下,使用SEDA能获得较高的Throughput,阶段间的资源差异越大就越明显。
比如处理一个Web 2.0常用Mashup请求,有如下几步:
- 接收用户请求(1单位时间)
- 数据库查询(4单位时间)
- 根据数据库查询结果,准备Web Service调用参数(1单位时间)
- 发起Web Service调用((16单位时间))
- 将结果渲染返回给用户(2单位时间)
那么SEDA会使用一条线程处理1.接收用户请求、3.准备WebService、5.返回结果,两条线程处理2.数据库查询,而5条线程处理耗时最多的4.WebService请求。
结果表明,当远程调用所花时间不变,而本地操作得到优化时,系统通量也能获得明显提高。
3. Mule 中的SEDA 实例
Mule是SEDA架构的遵循者。每个Component间,用inbound->outBound的Queue异步相连,每个Component可以设置自己的线程池大小,队列长度。
因此SEDA中的Stag间事件驱动异步链接,Stag内Incoming Event Queue,Thread Pool,Event Handler都有了。
<mule-descriptor name="RadioCarUMO" implementation="radioCar">
<threading-profile maxThreadsActive="5" maxThreadsIdle="10" poolExhaustedAction="WAIT" threadWaitTimeout="-1" id="component" doThreading="true"/>
<queue-profile maxOutstandingMessages="6"/>
<inbound-router>
<endpoint address="RadioCarsQueue"/>
<router className="org.mulefair.routing.BennyTheGatekeeper"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="FairAreaQueue"/>
</router>
</outbound-router>
</mule-descriptor>
而例子中的InboundRouter BennyTheGatekeeper,则实现了administration controller的角色,本来poolExhaustedAction="WAIT",而administration controller可以通过计数器,直接refuse需求,将请求转发到alarm queue。
整个Stag中唯一缺失是动态改变资源参数的Resource Controller,threadpool也不是Dynamically sized Thread Pool,但这似乎不重要了。
再一次觉得Mule充当Service Container比ESB时还要称职。
分享到:
相关推荐
1、安装环境 2、安装依赖软件 3、安装配置Seda 4、测试seda能否正常工作
we call the staged event-driven architecture (SEDA). SEDA is intended to support massive concurrency demands and simplify the construc- tion of well-conditioned services. In SEDA, applications consist...
NULL 博文链接:https://xylong.iteye.com/blog/1441956
基于SEDA架构的网格服务容器设计与实现.pdf
SEDA(StagedEvent-DrivenArchitectrue)--兼谈服务器体系结构设计一.引言
SEDA: An Architecture for Scalable,Well-Conditioned Internet ServicesMatt Welsh, David Culler, and Eric BrewerUC Berkeley Computer Science Division mdw@cs.berkeley.eduhttp://www.cs.berkeley.edu/~mdw/...
采用分级事件驱动架构SEDA(Staged Event Driven Architecture),通过划分阶段Stage的方式解除耦合,在阶段之间采用事件进行异步消息通信,结合非阻塞的I/O机制设计实现了一个事件驱动的网格服务容器,并从吞吐量、...
基于SEDA的企业服务总线的设计与设计,清晰地讲解了SEDA的结构与设计原理,为高并发网络响应提供了一种实现思路
Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型
阶段事件驱动架构设计论文,详细介绍了seda的架构体系。
前端是 CXF Rest 服务,后端是异步服务器(用文件端点模拟)。 camel-requestreply-with-jms -> 使用 JMS 在骆驼队列中实现请求/回复模式。 在路线中使用榛子广播缓存。 camel-requestreply-without-jms -> 使用 ...
有关 ehensin-seda 的最新信息,请访问我们的网站:
Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型
基于SEDA的企业服务总线的设计与实现,基于SEDA的企业服务总线的设计与实现
NULL 博文链接:https://ailikes.iteye.com/blog/2233024
【大纲】 服务端软件=排队服务 回顾常见的并发模型 介绍SEDA 分享我们的经验
seda过载保护
SEDA-分阶段的事件驱动架构 AEDA-基于演员的事件驱动架构 假设ASEDA-基于参与者的阶段性事件驱动架构 DASEDA-基于分布式参与者的分段事件驱动架构 该系统被设计和构建为React流系统,提供具有无阻塞背压的异步流处理...
mule &amp; seda 学习二.docx
An Architecture for Highly Concurrent, Well-Conditioned Internet ServicesbyMatthew David WelshB.S. (Cornell University) 1996 M.S. (University of California, Berkeley) 1999A dissertation submitted in ...