最近在看MULE的时候,发现了一个不错的技术--SEDA,不过现在我还不知道如何能独立出来应用到我的系统中呢。下面转载一篇文章,给大家看看。

http://larryzhu.bokee.com/6779982.html

Staged Event Driven Architecture (SEDA) 介绍

关键词SEDA    Staged    Event    Driven    Architecture

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

SEDA,一个不错的技术。相关推荐

  1. 一个不错的技术面试官是怎么样的?

    一个不错的技术面试官是怎么样的? 转载自:http://t.cn/AiWwBM2b 作者 Jartto 作为技术面试官,面试过程很少考虑候选人的感受.上来就是问,不合适就送走.虽然技术环节我很专业,但 ...

  2. CSDN 还是一个不错的技术社区

    坦白说,CSDN 的口碑很烂,主要源于国内用户的不自觉,自我要求低,导致各路文章都是随意的 copy ,而且也没人尊重原来的作者,这就导致你经常搜索到一篇文章,最后你发现,其实这个博主根本就不是这篇文 ...

  3. 如何判断LSTM模型中的过拟合和欠拟合 By 机器之心2017年10月02日 11:09 判断长短期记忆模型在序列预测问题上是否表现良好可能是一件困难的事。也许你会得到一个不错的模型技术得分,但了解

    判断长短期记忆模型在序列预测问题上是否表现良好可能是一件困难的事.也许你会得到一个不错的模型技术得分,但了解模型是较好的拟合,还是欠拟合/过拟合,以及模型在不同的配置条件下能否实现更好的性能是非常重要 ...

  4. 一个不错的安全评估站点vulnerabilityassessment.co.uk

    一个不错的安全评估站点,资料和技术分析都很全面. http://www.vulnerabilityassessment.co.uk

  5. 一个奔四技术人的2020年

    一个奔四技术人的2020年 注:本文照原文略有删减 我985硕士毕业,已经开始奔四.在一个小公司当技术上的总负责人,甚至在公司有一丁点的小股份,只是收入微薄,不值一提. 虽然春节都过了,2020年都过 ...

  6. 泥瓦匠想做一个与众不同的技术匠

    2019独角兽企业重金招聘Python工程师标准>>> 本文阅读大约 3 分钟.谢谢你读到这篇文章 喝了最后一口百事可乐,想到它的 slogan:新一代的选择.新一代的选择,每个人选 ...

  7. 如果成为一个合格的技术管理者

    文章目录 1. 技术管理者和项目管理者 1.1 项目管理 1.1.1 如果成为一名优秀管理者 1.1.2 项目管理流程 1.1.2.1 管理流程 1.1.2.2 管理缩略词 1.1.3 项目管理方法 ...

  8. 联发科heli p90_“如果您是Java开发人员并且正在编写微服务,那么Helidon是一个不错的选择”

    联发科heli p90 " Helidon仅设计用于微服务" 尽管Oracle最近开放了 Helidon(一组Java库)的开源资源 ,但是该项目本身并不新鲜,正如Helidon项 ...

  9. twitter闪退解决办法_那么我们如何解决Twitter? 用户界面改造将是一个不错的起点。...

    twitter闪退解决办法 by Daryll Santos 达里尔·桑托斯(Daryll Santos) 那么我们如何解决Twitter? 用户界面改造将是一个不错的起点. (So how do w ...

最新文章

  1. Lab模式的妙用--人像处理
  2. 一次因NAS存储故障引起的Linux系统恢复案例
  3. 单元测试中使用mock最好不要使用easymock而应该使用powermock
  4. Pandas高级教程之:处理缺失数据
  5. tp 5.0 mysql 事物
  6. CSDN2013年度博客之星评选
  7. java 集合工具类_Java 集合 Collections工具类
  8. python语言通过import_python语言的引入(import)机制简述
  9. Python 用一行代码完成词频统计与分析,词频分析如此简单
  10. 用了三星Dex,我已经快一个月回家没开过电脑了
  11. 圆圈头像制作css,通过CSS3实现圆形头像显示
  12. Ubuntu 桌面美化教程
  13. T3销售成本结转,提示没有生成结转凭证
  14. Recurrent Feature Reasoning for Image Inpainting解读
  15. 漫谈程序员系列:看看你离优秀有多远
  16. 趋势跟踪系统的形成历程
  17. android传感器摇一摇功能
  18. SQL查询语句——子查询
  19. yolov3运行及保存检测视频(包括摄像头)
  20. CSMA/CD与CSMA/CA区别

热门文章

  1. android获得键盘高度,Android 获取键盘高度,显示键盘和隐藏键盘
  2. 数据库系统概论——绪论——1.1 数据库系统概述
  3. 闪电网络如何实现更加去中心化的网络
  4. WebRTC系列-Qos系列之发送NACK
  5. 想要转行成为程序员该怎么做呢?
  6. 浅谈autolayout
  7. 如何用切片工具做html网页,ps中的切片工具怎么用,怎么将html文本添加到切片...
  8. 给一个喝酒青年的公开状
  9. 查看Linux内核版本及发行版本
  10. linux内核与Linux发行版本区别