- 浏览: 451657 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (371)
- Java (44)
- Flex (25)
- Design Pattern / UML (5)
- JVM (14)
- Software Engineer (4)
- Testing (30)
- Web Backend (60)
- Linux (7)
- Database (11)
- SOA (28)
- English (6)
- FX (5)
- SAP Support (25)
- SAP Development (5)
- SAP Impl & Oprn (8)
- Articles (15)
- Music (4)
- Recipe (14)
- Multi-thread (4)
- Lucene (2)
- CS basic / Algorithm (12)
- Tour (3)
- C C++ (21)
- Others (10)
- Code Repository C++ (1)
- Code Repository Java (1)
- Code Repository Algorithm (1)
- Code Repository SQL (1)
- Web Frontend (4)
最新评论
-
xiangxm:
Java 强引用、 软引用、 弱引用、虚引用 -
nml-lyb:
123
Mule 的第一个例子 -
nml-lyb:
http://www.baidu.com
Mule 的第一个例子 -
white___ant:
...
Java 强引用、 软引用、 弱引用、虚引用 -
joeyon:
...
Java NIO介绍
一、前言
二、当前流行的两种并发处理编程模型
三、 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
http://larryzhu.bokee.com/6779982.html
发表评论
-
Mule 例子:以axis做为inbound,传递复杂类型,MuleClient UMOMessage
2009-09-22 16:29 2955这个例子出自:http://raymondhekk.iteye ... -
Axis 客户端代码
2009-09-22 16:16 1807import org.apache.axis.client.C ... -
Mule, AquaLogic ESB 学习阶段性总结 (2009.9.21)
2009-09-21 14:53 1326下面这段文字为转载:http://dragonetzhou.i ... -
Mule 的 Loan Broker 例子的 PPT (经典的ESB的例子)
2009-09-21 14:26 1692http://wiki.springside.org.cn/d ... -
Aqualogic Service Bus 的第三个例子 (消息流进阶)
2009-09-18 17:34 983P87 的那个例子 1、已经发布的Web Servic ... -
Aqualogic Service Bus 的第二个例子 (消息流基础)
2009-09-17 15:15 1188消息流节点类型: 启动节点、路由节点、分支节点、管道对节点 ... -
Aqualogic Service Bus 的第一个例子 (入门)
2009-09-17 11:17 1540本例子出自 《SOA权威指南》 第三章中的那个入门例子。 亲 ... -
Mule Transformers
2009-09-07 14:58 1676Using Transformers [ Configuri ... -
XMPP协议简介
2009-09-07 14:15 1751XMPP协议简介 XMPP(Ext ... -
REST(Representational State Transfer) 介绍
2009-08-31 23:24 1299REST(Representational State Tra ... -
Camel 入门
2009-08-27 18:25 864前段时间和一些朋友聊 ... -
OSGi 入门
2009-08-27 18:15 667还没开始入... -
Mule 的消息路由
2009-08-27 17:53 1202Mule的消息路由 作者 J ... -
Mule 的第二个例子
2009-08-27 15:17 2924这个例子 主要 演示了 web service 作为 inbo ... -
Geronimo入门
2009-08-25 16:23 915http://www.matrix.org.cn/resour ... -
Apache Mina 入门
2009-08-25 13:31 11542007 年 12 月 24 日 本文将通过一个简单的问 ... -
CXF -- JAXB
2009-08-21 10:38 5423JAXB : Java API for XML Bindin ... -
CXF -- JAX-WS
2009-08-21 10:01 1331JAX-WS Java API for XML Web Se ... -
CXF的第一个例子 -- 深入剖析
2009-08-20 20:43 1686Web Service 的 Client 和 Server 端 ... -
CXF的第一个例子 (附 wsdl详解)
2009-08-20 16:52 29941、在eclipse中 创建一个java project。 ...
相关推荐
Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型
Staged Event Driven Architecture (SEDA) 是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型
we call the staged event-driven architecture (SEDA). SEDA is intended to support massive concurrency demands and simplify the construc- tion of well-conditioned services. In SEDA, applications consist...
采用分级事件驱动架构SEDA(Staged Event Driven Architecture),通过划分阶段Stage的方式解除耦合,在阶段之间采用事件进行异步消息通信,结合非阻塞的I/O机制设计实现了一个事件驱动的网格服务容器,并从吞吐量、...
CMMI Staged Representation <br>There are multiple CMMI models available, as generated from the CMMI Framework See Chapter 3 for an explanation of how "CMMI Framework" is used in the CMMI Product ...
以分阶段投资核心,讨论在道德风险和违约风险下的投资决策,建立数学模型
对暂存的 git 文件运行 linter... lint-staged 的概念是在 git 中暂存的文件上运行配置的 linter 任务(或其他任务)。 lint-staged 将始终将所有暂存文件的列表传递给任务,并且应在任务本身中配置忽略任何文件。
皮棉多级包装实施例回购在于向世人证明使用与多包项目和 。预提交钩husky安装在根package.json如...lint-staged配置从v5.0开始, lint-staged无需任何其他配置即可自动解析git root。 如果项目根目录和git根目录位于同
用法通过在所有包含package.json的文件夹中运行npm i --save-dev monorepo-staged-precommit precommit,将其添加到monorepo中的所有package.json文件中。 (可以一次完成,但只有在与项目一起安装时,才会添加...
微软经典论文:介绍了如何使用CNN网络(DSSM)进行语义分析,从而将文具映射成知识图谱query的过程。欢迎下载学习
run4staged 暂存git文件的简单任务运行器 安装 npm install run4staged --save-dev || yarn add run4staged --dev 用法 在每个暂存的文件上运行run4staged-方便进行lint,重新格式化或进行任何预提交检查 run4...
:prohibited: :pile_of_poo: 皮棉阶段 针对暂存的git文件运行linters,不要让 :pile_of_poo: 进入您的代码库! 为什么 在提交代码之前运行时,linting更有意义。 这样,您可以确保没有错误进入...npx mrm lint-staged
gulp-git-staged 您可以在 git 上获取 git 暂存文件的对象流。 去做 WIP:这个 gulp 插件正在进行中。 为这个插件添加更多测试。 用法 您可以在 git 上获取 git 暂存文件的对象流。 首先,安装gulp-git-staged...
ESLint + Lint-staged + Husky的项目示例葡萄牙语-巴西) 这是一个示例项目,带有ESLint + Lint-staged + Husky库的配置。 创建该存储库是为了实施在提出的解决方案。英语这是一个演示项目,具有以下库的建议设置:...
npm install with-staged 用法 with-staged [PATTERNS] -- Run a command on git staged files. PATTERNS - only run COMMAND for files matching one of the PATTERNS globs. When no PATTERNS are given, run ...
什么是codelint?用各种lint工具对项目的各种文件(ts,js,vue,css,json等)进行格式的校验和风格校验。...husky是用git提交项目时,各个生命周期的回调lint-staged;获取git add区域的所有文件;并可以对这些
一行命令为项目集成eslint,stylelint,commitlint,lint-staged,prettierr支持 用法 yarn add @fantasticit/code-lint -D -W 然后运行: yarn fantasticit-code-lint init 您可以看到在项目中添加了以下文件: ...
阶段过渡 简单的Vue组件,用于执行阶段延迟的过渡。 用法 < script > import VueStagedTransition from ' vue-staged-transition ' e
githook-lint-staged-example Git Hooks + Lint上演时没有额外的依赖关系。支持在安装过程中安装githook: npm @ 7: npm install npm @ 6: npm install 纱: yarn install 此方法使用prepare钩子并将githook目录...