纯粹转发,没有深入研究,转自:SEDA架构笔记
一、传统并发模型的缺点
基于线程的并发
特点:
每任务一线程
直线式的编程
使用资源昂高,
context切换代价高,竞争锁昂贵
太多线程可能导致吞吐量下降,响应时间暴涨。
基于事件的并发模型
特点:
单线程处理事件
每个并发流实现为一个有限状态机
应用直接控制并发
负载增加的时候,吞吐量饱和
响应时间线性增长
二、SEDA架构
特点:
(1)服务通过queue分解成stage:
每个stage代表FSM的一个状态集合
Queue引入了控制边界
(2)使用线程池驱动stage的运行:
将事件处理同线程的创建和调度分离
Stage可以顺序或者并行执行
Stage可能在内部阻塞,给阻塞的stage分配较少的线程
1、Stage-可靠构建的基础
(1)应用逻辑封装到Event Handler
接收到许多事件,处理这些事件,然后派发事件加入其他Stage的queue
对queue和threads没有直接控制
Event queue吸纳过量的负载,有限的线程池维持并发
(2)Stage控制器
负责资源的分配和调度
控制派发给Event Handler的事件的数量和顺序
Event Handler可能在内部丢弃、过滤、重排序事件。
2、应用=Stage网络
(1)有限队列
入队可能失败,如果队列拒绝新项的话
阻塞在满溢的队列上来实现吸纳压力
通过丢弃事件来降低负载
(2) 队列将Stage的执行分解
引入了显式的控制边界
提供了隔离、模块化、独立的负载管理
(3)方便调试和profile
事件的投递可显
时间流可跟踪
通过监测queue的长度发现系统瓶颈
3、动态资源控制器
(1)、线程池管理器
目标: 决定Stage合理的并发程度
操作:
观察queue长度,如果超过阀值就添加线程
移除空闲线程
(2)、批量管理器
目的:低响应时间和高吞吐量的调度
操作:
Batching因子:Stage一次处理的消息数量
小的batching因子:低响应时间
大的batching因子:高吞吐量
尝试找到具有稳定吞吐量的最小的batching因子
观察stage的事件流出率
当吞吐量高的时候降低batching因子,低的时候增加
三、小结
SEDA主要还是为了解决传统并发模型的缺点,通过将服务器的处理划分各个Stage,利用queue连接起来形成一个pipeline的处理链,并且在Stage中利用控制器进行资源的调控。资源的调度依据运行时的状态监视的数据来进行,从而形成一种反应控制的机制,而stage的划分也简化了编程,并且通过queue和每个stage的线程池来分担高并发请求并保持吞吐量和响应时间的平衡。简单来说,我看中的是服务器模型的清晰划分以及反应控制。
相关推荐
**SEDA架构详解** SEDA(Staged Event-Driven Architecture),即分阶段事件驱动架构,是一种面向服务的设计架构,主要用于解决高性能、高并发系统中的设计问题。SEDA将复杂的、实时的系统分解为一系列可管理的阶段...
SEDA架构是一种分阶段的事件驱动架构,其主要目标是提高并发处理的性能和系统的可伸缩性。SEDA的架构设计将服务容器分解为多个阶段,每个阶段处理不同的事件,并通过异步通信机制实现非阻塞I/O操作,这有助于系统...
- **事件处理器(Event Handler)**:这是SEDA架构的基础单元,每个处理器负责执行特定的操作。当事件到达处理器时,它会处理该事件并可能生成新的事件。 - **事件队列(Event Queue)**:作为不同处理阶段之间的...
SEDA架构的基础是事件驱动模型。在这一模型中,系统中的各个组件通过发送和处理事件来协同工作。事件可以被视为系统内部状态改变的抽象表示,当一个事件发生时,相应的处理器或阶段会接收到这个事件并执行相应的...
SEDA架构将处理流程划分为多个独立的阶段,每个阶段专注于一个特定的任务,如数据验证、业务逻辑处理、持久化等。这种分治策略降低了系统的复杂性,使得代码更易于维护和扩展。 3. **线程池与并发控制**: 在SEDA...
在SEDA架构中,每个阶段都有一个“Actor controller”,负责确定该阶段的理想并发度。控制器通过对队列的监控和管理,动态调整服务的并发处理能力,以适应不断变化的工作负载。 在实际应用中,我们可以结合消息系统...
2. **异步事件驱动**:在SEDA架构中,各个阶段之间通过事件通知的方式进行通信,而不是同步等待响应。这可以有效地减少阻塞时间,提高系统的响应速度和吞吐量。 3. **资源管理与负载均衡**:SEDA模型还支持动态资源...
早期的BPM系统通常采用单一的、集成式的架构,例如分布式SEDA架构,这种架构中,流程引擎紧密地嵌入到应用系统内部,通过Java API或HTTP接口与应用逻辑交互。数据库和J2EE服务器支持应用界面与流程引擎的交互,实现...
在SEDA架构中,不同的处理阶段可以通过不同的通道(如TCP、HTTP、MQ通道)进行交互,利用消息框架如Java内存队列或外部持久化队列进行通信。Spring Integration提供了如DirectChannel、PollableChannel、...
- **整合服务执行交付架构**:SEDA 是一种基于消息队列的服务执行交付架构,它能够有效提升系统的响应能力和吞吐量。将 SEDA 与 Spring Boot 结合使用,可以更好地实现微服务间的异步通信。 - **RESTful 接口设计*...
SEDA架构用于动态并发调度,提高了系统性能。同时,平台还提供了在线监控和管理系统,以便对IT资源、平台和集群进行实时管理和配置。 5. **应用场景**: - 平台的应用场景广泛,包括客户分析、运营分析、经营决策...
Aggregate Framework概述 Aggregate Framework是基于DDD和CQRS思想而开发的一个领域驱动框架。其主要目标是方便开发人员运用DDD和CQRS思想来构建复杂的、可扩展的应用系统。该框架提供了最核心的构建块的实现,比如...
阶段事件驱动架构(Staged Event-Driven Architecture, SEDA)是由加州大学伯克利分校提出的一种高性能互联网服务器架构模型。SEDA的目标是支持大规模并发处理、简化系统开发、支持处理监测和支持系统资源管理。SEDA...
SEDA架构的核心思想是将一个复杂的系统分解为多个独立的阶段,每个阶段都有专门的线程处理特定任务,通过事件队列进行通信,以降低系统的耦合度并提高并发处理能力。 Raindrop框架的主要目标是优化并发性能,特别是...
**ehensin-seda: 舞台事件驱动架构** `ehensin-seda` 是一个基于Java平台的舞台事件驱动架构(Stage Event-Driven Architecture)。这种架构模式主要用于构建高性能、高并发的应用程序,尤其在处理大量并发请求时,...
Seda,全称为Staged Event-Driven Architecture(分阶段事件驱动架构),是一种处理高并发事件流的设计模式。在Seda模型中,事件处理被分解为多个阶段,每个阶段都有自己的队列来缓冲输入和输出,这样可以实现并行...