基于SEDA的异步框架设计与实现

233人阅读 评论(0) 收藏 举报
分类:

基于SEDA的异步框架设计与实现


       目前,面对并发环境,主流互联网服务器编程模型有两种:多线程模型以及事件驱动模型。但是这两个模型都不足以解决这个问题。我们来首先看一下这两种编程模型。

 

1、多线程并发模型   

       多线程并发模型是目前最普遍的服务器编程模型,该模型的架构如下图所示:

        该模型针对每一个请求,会为其创建并分配一个线程。该线程负责这个请求的处理。该模型的优点:执行粒度是整个完整的处理流程。处理逻辑清晰,容易开发。但与此同时缺点也很明显:如果处理过程中某一步骤出现长时间调用(例如网络通信、I/O磁盘读写等),则会阻塞后续的请求,造成资源的浪费。并且,当随着处理请求不断增加,导致并发执行的线程数量太多。过多的线程数量导致系统在线程调度和资源争用上的开销过大。引起系统性能急剧下降。导致系统处理能力下降。

 

2、事件驱动模型   

       同时,我们也能看到,很多系统也倾向于使用事件驱动模型,该模型的模型图如下图所示:

        该模型的思想为:将处理流程分割成多个步骤,每一个步骤都实现为一个有限状态机(FSM),所有的处理请求会作为事件进入系统,由调度器负责传递给相应的状态机,状态机的处理结果也以事件的形式传给调度器,新的事件将再次被调度器转发给下一个状态机进行处理,直至处理完成。该模型的优点在于,由于将各个处理步骤独立实现,可以很容易的进行系统监测和调整。但是其缺点也不容忽视,即:由于Scheduler的设计和实现过于复杂,针对于不同的应用和系统的逻辑变更需要不同的实现,导致采用这一模型构建出的系统将十分庞大和难以控制。
       综上所述,主流的多线程编程模型以及事件驱动编程模型虽然都各有其优势,但同时也都有其不可避免的缺陷,并不适合在高并发的环境下进行成熟系统的开发。所以这就是为什么我们要选择其他的模式来进行系统开发。以下介绍SEDA架构思想。

3、阶段性事件驱动(SEDA)模型   

       针对上述现有主流并发架构之缺陷,若能够实现一种良好支持高并发,并且能够对性能需求自适应的架构,则将在很大程度上优化和提升服务器性能,既能够提高运行速度,又可以减少服务器压力,实现了公司利益与用户体验的双赢。因此,为汲取多线程与事件驱动模型之优点,最大程度规避这两者之缺点,以实现较好的高并发服务器架构,SEDA便应运而生。
       SEDA(Staged Event Driven Architecture)是一种阶段性事件驱动的服务器应用程序架构。它是Matt Welsh博士于加州大学伯克利分校提出的一个高性能应用服务器模型。SEDA架构整合了多线程的服务器模型和事件驱动的服务器模型的优势,它可以高效地管理和控制服务器资源,良好地适应高并发环境,SEDA被设计成一个可伸缩的高可用服务器架构。 
应用服务器之请求处理步骤通常是复杂的、基于事件驱动处理的有穷状态机(FSM),所以实现服务器程序过程就类似用程序实现有穷状态机过程。下图所示的即是一基于SEDA模型http服务器有穷机状态图:


        SEDA架构能对有穷状态机进行分析,尔后将相关状态聚集在同一Stage中,Stage间采用队列的方式来进行通信。每一个Stage皆完全独立,均拥有自己的线程池,以及为了专门处理到达这一步骤所必须进行的工作。所有的Stage均通过自身事件队列连接在一起,构成完整的请求处理网络。性能控制器和动态线程池依请求的繁忙程度动态来调整线程池的大小,以达到系统资源的最有分配。每一个Stage由下述四部分组成:
       (1)    事件队列:用以维持Stage间之通信。
       (2)    事件处理器:用以执行请求到这一个Stage中所应执行的工作。
       (3)    线程池:用以提供事件处理器且可以并发执行事件处理之环境。
       (4)    性能控制器:用以对该Stage资源(线程数、队列长度等等)进行调整。
       通过这四部分的协作配合,每一个Stage都可以很好地运行,并且可以控制资源的使用。已经过Stage处理完,若没有后续工作,即可以回收线程池中的线程,来供给其他Stage使用。Stage结构如下图所示。
       在SEDA架构中,基本的处理单元称为阶段(Stage),一个阶段由事件队列、动态线程池、事件处理器和一个性能控制器四个组件构成。SEDA将一个请求的处理过程分解为一系列的阶段,阶段之间通过事件队列联系,开发人员只负责每个阶段的服务逻辑以及阶段间的连接逻辑,而由各个阶段自身负责资源管理以及负载适应功能。使用这种解耦拆分可以使系统达到高并发性、对负载变化的良好适应性以及高度的可缩放性。


 

参考资料:

[1]    Michael Eckert and Fran¸cois Bry.Complex Event Processing (CEP) [R].德国:Institut f¨ur Informatik, Ludwig-Maximilians-Universit at Munchen,2009.
[2]    Matt Welsh.The Staged Event-Driven Architecture for Highly-Concurrent Server Applications [R].美国:University of California, Berkeley,2005.
[3]    Rob Von Behren,Jeremy Condit,George C. Necula etc. Scalable Threads for Internet Services[R].美国:University of California, Berkeley,2004



查看评论

让你的窗口透明起来

#define WS_EX_LAYERED           0x00080000#define LWA_COLORKEY            0x00000001#define LWA_ALPH...
  • uaiia
  • uaiia
  • 2001-01-18 15:22:00
  • 939

SEDA多阶段事务驱动模型介绍

SEDA(Staged Event-Driven Architecture)并不是很新的技术,但它总会在我阅读的资料里出现些许影子,所以就拿出一些时间看了一下与它相关的论文资料。SEDA的目标很远大,...
  • lizhitao
  • lizhitao
  • 2015-03-13 00:57:43
  • 1403

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

  • 2010年12月20日 23:54
  • 711KB
  • 下载

SEDA简介与源码解读(一)

简介:-------------------------------------------------------------------------------------------------...
  • yanghua_kobe
  • yanghua_kobe
  • 2012-04-03 18:27:32
  • 7666

互联网的SEDA高并发架构

 适于互联网的SEDA高并发架构 一、前言     最近看了一篇博士毕业论文(Matthew David Welsh--An Architectur...
  • hui12345685
  • hui12345685
  • 2015-01-09 15:33:47
  • 775

闲聊SEDA分段式事件驱动架构

SEDA是10年前提出的一个理论 目的是实现高性能的网络服务器 由7篇论文和一个参考实现的库组成 都在这里 http://www.eecs.harvard.edu/~mdw/proj/s...
  • KimmKing
  • KimmKing
  • 2012-12-27 12:49:09
  • 2517

简说SEDA - 分阶段的事件驱动架构

SEDA(Staged Event-Driven Architecture),分阶段的事件驱动架构。 要说SEDA,首先要说一下服务端常用的两种处理模型,多线程处理模型和事件驱动处理模型。 1. 多线...
  • frivol
  • frivol
  • 2014-01-08 23:49:40
  • 773

分阶段事件驱动架构【SEDA】

SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stage,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异...
  • xqj198404
  • xqj198404
  • 2014-01-08 10:40:11
  • 922

基于.Net(C#开发)平台的三层框架架构软件的设计与实现

1 软件框架 随着软件复用技术和软件构件化思想的深入研究,现代软件系统的设计也不在是以前的程序=数据结构+算法,而更多的是对开发平台,软件框架的综合研究与设计。信息系统软件框架 是信息系统软...
  • aTian2009
  • aTian2009
  • 2011-11-21 23:17:07
  • 2928

并发框架SEDA

应用程序开发中经常采用多线程模型(如下图),工作原理一般是对于每一个request,dispatcher会为其创建并分配一个线程,该线程负责这个请求的处理。这种模式优点是处理逻辑清晰,容易开发,执行粒...
  • codewar
  • codewar
  • 2016-04-22 10:15:42
  • 423
    个人资料
    持之以恒
    等级:
    访问量: 148万+
    积分: 2万+
    排名: 333
    个人简介
    2007.9~2011.7 本科 计算机科学与技术 2011.9~2014.3 硕士 计算机系统结构。目前毕业后一直任职于阿里巴巴云计算事业部。联系QQ:786071807
    最新评论