您的位置:首页 > 其它

并发框架SEDA

2016-04-22 10:15 183 查看
应用程序开发中经常采用多线程模型(如下图),工作原理一般是对于每一个request,dispatcher会为其创建并分配一个线程,该线程负责这个请求的处理。这种模式优点是处理逻辑清晰,容易开发,执行粒度也是整个完整的处理流程。



但是也存在缺点,随着处理请求不断增加,导致并发执行的线程数量太多,过多的线程数量导致系统在线程调度和资源争用上的开销过大,引起系统性能急剧下降,经常是难以检测系统性能瓶颈的根源,以下是线程数和吞吐量的一个测试数据,可以较直观说明问题。



为解决上述问题,出现了以下事件驱动优化模型,工作原理是将处理流程分割成多个步骤,每一个步骤都实现为一个有限状态机(FSM),所有的处理请求会作为Event进入系统。由Scheduler负责传递给相应FSM。FSM的处理结果也以Event形式输出给Scheduler。新的Event会再次被Scheduler进行转发给下一个FSM,直至处理完成(如下图所示,感觉很熟悉哦)。



这种模型的优点是单线程处理事件,负载增加的时候,吞吐量相对平稳。缺点是Scheduler的设计和实现过于复杂,针对于不同的应用和系统的逻辑变更需要不同的实现,以下是吞吐量测试的一个数据:



学院派关注到这个问题,加州大学伯克利分校研究出一套优秀的高性能互联网服务器架构模型,设计目标是支持大规模并发处理、简化系统开发、支持处理监测、支持系统资源管理等: Staged Event Driven Architecture (SEDA)。



SEDA实现上,将业务的处理划分各个Stage,利用queue连接起来形成一个pipeline的处理链,并且在Stage中利用控制器进行资源的调控。资源的调度依据运行时的状态监视的数据来进行,从而形成一种反应控制的机制。



Stage的划分也简化了编程,并且通过queue和每个stage的线程池来分担高并发,请求并保持吞吐量和响应时间的平衡,具体的Stage模型如下,一个接受输入的EventQueue,一个应用开发者编写的Event
Handler,一个Controller用于对执行过程进行控制。包括并发线程数量,一个Thread Pool用于并发处理。

Spring 出品了Spring Integration框架实现了上述模型,通过Message,Channel,Route模型实现了基本功能,支持请求订阅,请求响应(点对点)等多种交互模型。





详细:[伯克利大学]SEDA An Architecture for Well-Conditioned,Scalable Internet Services.pdf
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: