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时还要称职。
分享到:
相关推荐
SEDA架构适合于需要处理大量并发请求的高可用系统,如Web服务器、大数据处理平台、实时分析系统等。 通过理解和应用SEDA架构,开发者可以构建出更加健壮、可扩展的系统,应对现代计算环境中的复杂挑战。在实际开发...
【标题】:“2017-11-07 Seda 安装配置笔记1”描述了一次在Ubuntu 14.04环境下对Seda软件的安装与配置过程,涉及了VMware虚拟机、依赖软件的安装、LLVM与Clang的编译以及Seda的编译和配置。 【描述】:首先,安装...
SEDA的架构设计将服务容器分解为多个阶段,每个阶段处理不同的事件,并通过异步通信机制实现非阻塞I/O操作,这有助于系统性能的提升和可伸缩性的增加。 网格服务容器是服务网格中的一个基础组件,负责屏蔽资源异构...
总结起来,`seda eclipse工程可运行版` 提供了一个基于SEDA架构的实际应用示例,可以帮助开发者更好地理解和实践这种高性能的服务器架构模型。通过使用Eclipse IDE,开发者可以便捷地调试和优化代码,适应各种复杂的...
SEDA(Staged Event-Driven Architecture)是一种针对高性能服务器设计的体系结构,它借鉴了流水线的概念,将处理...这种设计方法在现代服务器架构中具有重要的意义,为构建大规模、高性能的服务提供了有力的理论基础。
阶段事件驱动架构(Staged Event-Driven Architecture, SEDA)是由加州大学伯克利分校提出的一种高性能互联网服务器架构模型。SEDA的目标是支持大规模并发处理、简化系统开发、支持处理监测和支持系统资源管理。SEDA...
提到的`seda-release-20020712`可能是SEDA架构的一个早期版本的发布包,可能包含了源代码、文档、示例以及相关的构建工具。通过这个包,开发者可以了解SEDA的早期实现,研究其设计原理,并基于此开发自己的高性能...
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)是一种软件架构模式,常用于高性能、高并发的应用程序设计。它将系统分解为多个独立的阶段,每个阶段处理特定类型的事件,并通过队列进行异步通信。这种方式允许各个组件...
**ehensin-seda: 舞台事件驱动架构** `ehensin-seda` 是一个基于Java平台的舞台事件驱动架构(Stage Event-Driven Architecture)。这种架构模式主要用于构建高性能、高并发的应用程序,尤其在处理大量并发请求时,...
### 基于SEDA的企业服务总线的设计与实现 #### 概述 本文主要探讨了如何通过采用阶段事件驱动架构(SEDA)来优化企业服务总线(ESB)的性能,特别是在高并发请求场景下。随着面向服务架构(SOA)在企业级软件开发...
前端是 CXF Rest 服务,后端是异步服务器(用文件端点模拟)。 camel-requestreply-with-jms -> 使用 JMS 在骆驼队列中实现请求/回复模式。 在路线中使用榛子广播缓存。 camel-requestreply-without-jms -> 使用 ...
SEDA(Staged Event Driven Architecture,分阶段事件驱动架构)是一种有效的方法,它通过非阻塞、异步化和队列的策略来提高系统的性能和稳定性。本篇将深入探讨SEDA的原理和应用,以及如何结合实际经验来优化服务端...
微服务架构是一种分布式系统的设计方法,它的核心思想是将大型应用拆分为一组小型的、独立的服务。每个服务负责一部分特定的业务功能,运行在独立的进程中,并通过网络通信来实现服务间的交互。微服务架构提高了应用...
### 一种基于Netty框架的网络应用服务器设计方法 #### 1. Netty框架概述与特点 Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于快速开发可维护的高性能协议服务器与客户端。该框架利用Java NIO来实现...
6. **三段式架构**:分为接入、核心处理和应用调用三层,以降低系统复杂性并提升处理效率。 ### 结论 企业级BPM的微服务架构演进是技术进步与业务需求共同作用的结果。这种演进不仅解决了传统架构的局限,还为企业...