`
webcode
  • 浏览: 6095586 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

设计美好的服务器(6)--SEDA架构笔记

阅读更多

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. 接收用户请求(1单位时间)
  2. 数据库查询(4单位时间)
  3. 根据数据库查询结果,准备Web Service调用参数(1单位时间)
  4. 发起Web Service调用((16单位时间))
  5. 将结果渲染返回给用户(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架构

    SEDA架构适合于需要处理大量并发请求的高可用系统,如Web服务器、大数据处理平台、实时分析系统等。 通过理解和应用SEDA架构,开发者可以构建出更加健壮、可扩展的系统,应对现代计算环境中的复杂挑战。在实际开发...

    2017-11-07 Seda 安装配置笔记1

    【标题】:“2017-11-07 Seda 安装配置笔记1”描述了一次在Ubuntu 14.04环境下对Seda软件的安装与配置过程,涉及了VMware虚拟机、依赖软件的安装、LLVM与Clang的编译以及Seda的编译和配置。 【描述】:首先,安装...

    基于SEDA架构的网格服务容器设计与实现.pdf

    SEDA的架构设计将服务容器分解为多个阶段,每个阶段处理不同的事件,并通过异步通信机制实现非阻塞I/O操作,这有助于系统性能的提升和可伸缩性的增加。 网格服务容器是服务网格中的一个基础组件,负责屏蔽资源异构...

    seda eclipse工程可运行版

    总结起来,`seda eclipse工程可运行版` 提供了一个基于SEDA架构的实际应用示例,可以帮助开发者更好地理解和实践这种高性能的服务器架构模型。通过使用Eclipse IDE,开发者可以便捷地调试和优化代码,适应各种复杂的...

    SEDA-兼谈服务器体系结构设计.doc

    SEDA(Staged Event-Driven Architecture)是一种针对高性能服务器设计的体系结构,它借鉴了流水线的概念,将处理...这种设计方法在现代服务器架构中具有重要的意义,为构建大规模、高性能的服务提供了有力的理论基础。

    SEDA的企业服务总线的设计与实现

    阶段事件驱动架构(Staged Event-Driven Architecture, SEDA)是由加州大学伯克利分校提出的一种高性能互联网服务器架构模型。SEDA的目标是支持大规模并发处理、简化系统开发、支持处理监测和支持系统资源管理。SEDA...

    seda-release

    提到的`seda-release-20020712`可能是SEDA架构的一个早期版本的发布包,可能包含了源代码、文档、示例以及相关的构建工具。通过这个包,开发者可以了解SEDA的早期实现,研究其设计原理,并基于此开发自己的高性能...

    SEDA - An Architecture for Well-Conditioned, Scalable Internet Services - Deck (seda-sosp01-talk)-计算机科学

    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的异步框架设计与实现

    SEDA(Staged Event-Driven Architecture)是一种软件架构模式,常用于高性能、高并发的应用程序设计。它将系统分解为多个独立的阶段,每个阶段处理特定类型的事件,并通过队列进行异步通信。这种方式允许各个组件...

    ehensin-seda:舞台事件驱动架构

    **ehensin-seda: 舞台事件驱动架构** `ehensin-seda` 是一个基于Java平台的舞台事件驱动架构(Stage Event-Driven Architecture)。这种架构模式主要用于构建高性能、高并发的应用程序,尤其在处理大量并发请求时,...

    基于SEDA的企业服务总线的设计与实现

    ### 基于SEDA的企业服务总线的设计与实现 #### 概述 本文主要探讨了如何通过采用阶段事件驱动架构(SEDA)来优化企业服务总线(ESB)的性能,特别是在高并发请求场景下。随着面向服务架构(SOA)在企业级软件开发...

    camel-request-reply

    前端是 CXF Rest 服务,后端是异步服务器(用文件端点模拟)。 camel-requestreply-with-jms -&gt; 使用 JMS 在骆驼队列中实现请求/回复模式。 在路线中使用榛子广播缓存。 camel-requestreply-without-jms -&gt; 使用 ...

    如何利用SEDA提高系统的性能和稳定性 开发可掌控高并发服经验分享:非阻塞+异步化+队列 共19页.pptx

    SEDA(Staged Event Driven Architecture,分阶段事件驱动架构)是一种有效的方法,它通过非阻塞、异步化和队列的策略来提高系统的性能和稳定性。本篇将深入探讨SEDA的原理和应用,以及如何结合实际经验来优化服务端...

    基于微服务的企业应用架构设计

    微服务架构是一种分布式系统的设计方法,它的核心思想是将大型应用拆分为一组小型的、独立的服务。每个服务负责一部分特定的业务功能,运行在独立的进程中,并通过网络通信来实现服务间的交互。微服务架构提高了应用...

    一种基于Netty框架的网络应用服务器设计方法

    ### 一种基于Netty框架的网络应用服务器设计方法 #### 1. Netty框架概述与特点 Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于快速开发可维护的高性能协议服务器与客户端。该框架利用Java NIO来实现...

    企业级BPM之微服务架构演进.pdf

    6. **三段式架构**:分为接入、核心处理和应用调用三层,以降低系统复杂性并提升处理效率。 ### 结论 企业级BPM的微服务架构演进是技术进步与业务需求共同作用的结果。这种演进不仅解决了传统架构的局限,还为企业...

Global site tag (gtag.js) - Google Analytics