阶段性事件驱动(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将一个请求的处理过程分解为一系列的阶段,阶段之间经过事件队列联系,开发人员只负责每一个阶段的服务逻辑以及阶段间的链接逻辑,而由各个阶段自身负责资源管理以及负载适应功能。使用这种解耦拆分可使系统达到高并发性、对负载变化的良好适应性以及高度的可缩放性。优化