Staged Event Driven Architecture (SEDA) 介绍
作者:朱之光
http://larryzhu.bokee.com
一、前言
二、当前流行的两种并发处理编程模型
三、SEDA架构
四、小结
五、参考文献
一、前言
Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型。其设计目标是:支持大规模并发处理、简化系统开发、支持处理监测、支持系统资源管理。本文会先对两种目前被广泛使用的网络服务器架构模型进行介绍。然后对SEDA进行详细描述。
二、当前流行的两种并发处理编程模型
1、 多线程服务器 (Threaded Server)
工作原理:对于每一个request,dispatcher会为其创建并分配一个线程。该线程负责这个请求的处理。这种方式 又名(Thread-per-request)。
优点:执行粒度是整个完整的处理流程。处理逻辑清晰,容易开发。
缺点:是当随着处理请求不断增加,导致并发执行的线程数量太多。过多的线程数量导致系统在线程调度和资源争用上的开销过大。引起系统性能急剧下降。导致系统处理能力下降。
改进措施:线程池(Bounded Thread Pools)
系统最多只能创建一定数量的线程。当所有线程都饱和运行时,新到达的处理请求只能等待,或者被抛弃。
缺点:
执行粒度仍然是完整的处理流程。难以检测系统性能瓶颈的根源以及进行相应调整。/p>
2、 事件驱动并发处理(Event-Driven Concurrency)
将处理流程分割成多个步骤,每一个步骤都实现为一个有限状态机(FSM)。
工作原理:所有的处理请求会作为Event进入系统。由Scheduler负责传递给相应FSM。FSM的处理结果也以Event形式输出给Scheduler。新的Event会再次被Scheduler进行转发给下一个FSM。直至处理完成。
优点:
1、随着处理量的增加,系统负荷是以线形增长。当达到系统饱和处理能力后。系统的处理能力不会下降。
2、由于将各个处理步骤独立实现,可以很容易的进行系统监测和调整。
缺点:
Scheduler的设计和实现过于复杂。针对于不同的应用和系统的逻辑变更需要不同的实现。
三、SEDA架构
(近似于Event-Driven Concurrency,但是没有其中的Scheduler)
将每一个处理步骤独立为一个Stage。
Stage结构:
1、 一个接受输入的Event Queue;
2、 一个应用开发者编写的Event Handler;
3、 一个Controller用于对执行过程进行控制。包括并发线程数量,批处理数量,…;
4、 一个Thread Pool用于并发处理;
Stage的输入通过Event Queue获得。Stage的输出会以Event形式推送到其他Stage的Event Queue中。Stage之间的这种连接关系由应用开发人员指定。
带来的问题:Event Queue尽管减少了模块间的耦合性,但是会降低响应速度。
四、小结:
SEDA架构将应用的整个处理过程分割为多个步骤即Stage。每个Stage可以独立进行开发。同时Stage之间通过Event Queue来进行通信,可以降低耦合性。可以以很小的成本来适应将来的系统逻辑变化。
同时系统提供了标准的资源控制,使得应用开发人员只需要专注于实现Event Handler的内部逻辑。而无须关注多线程、资源共享、…
同时可以在运行时对于每一个Stage的运行情况进行监测以及调整。
五、参考文献:http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf
Staged Event Driven Architecture (SEDA) 介绍相关推荐
- seda java,对SEDA(Staged Event Driven Architecture)的一个介绍. 不是很详细, 但是仍然能够提供一些信息...
1.Overview SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Sta ...
- 转:解救西西弗斯- 模型驱动架构(MDA,Model Driven Architecture)浅述
原文: 解救西西弗斯- 模型驱动架构(MDA,Model Driven Architecture)浅述 前言 西西弗斯是古希腊神话中的科林斯国王,他被罚将一块巨石推到山上,但无论西西弗斯如何努力,每次 ...
- COMP SCI 3013 7089 - Event Driven Computing Semester java
COMP SCI 3013作业代做.代写Java程序作业.代做 GUI/MapReaderWriter作业.代写Java编程作业 COMP SCI 3013 & 7089 - Event Dr ...
- Event Driven Class OSAL 基于事件驱动的模拟操作系统
EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 ##前言 什么是OSAL OSAL为:Operating System Abs ...
- 蓝牙HCI command/event/acl/sco格式介绍
一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍. 第二篇:Transp ...
- Elastic安全分析新利器 —— Event Query Language (EQL) 介绍
文章目录 简化复杂的查询 设计一种语言 应用EQL IOC 检索 时间窗口搜索 管道处理 事件序列 进程祖系 (PROCESS ANCESTRY) 函数调用 阀值排序 随着网络安全攻防双方的技术不断升 ...
- workerman events.php,workerman安装event扩展的方法介绍
workerman创建的socket服务,在高并发下需要 event 扩展.如果已经安装了宝塔面板,怎么安装 event扩展? 以php7安装event扩展为例:yum install libeven ...
- 模型驱动架构(MDA,Model Driven Architecture)浅述
前言 西西弗斯是古希腊神话中的科林斯国王,他被罚将一块巨石推到山上,但无论西西弗斯如何努力,每次石头到达山顶之前都不可避免地滚下来,周而复始,永无休止. 在<应用 MDA >一书中,作者 ...
- 解救西西弗斯- 模型驱动架构(MDA,Model Driven Architecture)浅述
这是应邀发表在<软件世界>2007年7月刊上的一个MDA介绍文章,入门者可以看看 :) ================================================== ...
最新文章
- 什么是方向图乘积定理_课本上没有,但十分好用的初中数学定理公式
- 【时间序列】最完整的时间序列分析和预测(含实例及代码)
- 数据库 / 事务的 ACID
- mysql导入数据库某张表_MSSQLServer2005 导出导入数据库中某张表的数据
- HEVC 编解码资源
- HDU 4547 CD操作
- countif函数比较两列不同_VLOOKUP函数批量查找,这么长的公式你可以写出来,立马加薪...
- 这个爬虫是你五一假期所需要的!
- BZOJ1185[HNOI2007] 最小矩形覆盖
- java servlet试题_JAVA servlet 面试题
- 姓名国别分类代码:PyTorch深度学习实践 - Lecture_13_RNN Classifier
- ZA7783是一颗将单路MIPI DSI信号转换成单路LVDS/TTL信号的转接芯片
- 硅谷丛林的故事 EDA篇
- 【C语言】求最小公倍数三种方法
- poi实现word文档转pdf格式
- 腾讯云轻量级服务器宝塔快速部署网站
- VCS中VPD的使用简单教程
- 手写oracle分页,oracle分页代码(超简略写法)
- 羊驼 CMS 实现 .html 结尾的 URL 格式
- 【电机学复习笔记】第五章 异步电动机
热门文章
- github invalid authentication data can't create token:scopes - [repo,gist] - note Intellif Plugin_1
- [问题已处理]-alertmanager报错550 Mailbox unavailable or access denied
- windows日志捕获工具-DebugView使用教程
- R 编程中的 LOOCV(留一法交叉验证)
- m.555lu.co/vlist.php_新浪微博V2接口演示程序-Powered by Sina App Engine
- hbase数据库_hbase数据库 修改数据
- Mac环境下安装MongoDB数据库
- Arduino 播放音乐教程
- DICOM 图像传输:使用 LeadTools 实现 C-Store SCP 服务
- Enzo丨Enzo IHC酶抗原回收试剂解决方案