分阶段事件驱动架构--SEDA

核心思想

阶段组成

负载控制

1. 核心思想

将应用系统按照业务逻辑划分为一系列相关阶段,对于消耗不同资源的每个阶段使用不同数量的线程池来处理。每个阶段都是独立的模块,分别完成一个独立的逻辑功能单元。阶段之间用事件队列连接起来,所有阶段组成完整的工作流。


2. 阶段组成
  • 事件和事件队列
  • 线程池
  • 事件处理器
  • 调度控制器
  • 中央调度器(阶段外部,与各阶段调度控制器收集反馈信息)

mark

事件和事件队列

该阶段接收处理的请求,表现为一次事件。
事件队列是事件的集合,有队列大小和当前等待事件个数等属性。

事件处理器

各阶段核心模块,继承自统一接口。并实现业务逻辑处理。

线程池

以多线程的机制 并发 驱动 事件处理器的执行。
池的大小由本阶段的调度控制器设置。
各阶段线程池独立。

调度控制器

负责系统运行过程中,保存本阶段的负载情况(可用线程数 | 等待事件队列大小)。
负载情况由中央调度控制器统一收集。
根据中央调度控制器反馈情况设置本阶段线程池大小和事件队列长度。

中央调度控制器

系统运行过程中,收集各阶段负载情况,集中计算,反馈给各阶段调度控制器。

mark

3. 负载控制–均值方差分析

阶段资源情况


各阶段线程池大小 t:
各阶段可用线程数 s:正数为空闲线程数  负数为等待事件数
各阶段所占系统资源系数 P:约定第一阶段P.1=1,P.2=t.2/t.1,P.3=t.3/t.1

各阶段资源总和 R: R = s.1*P.1+s.2*P.2+....

 R 越大系统资源越充足

各阶段是否均衡

负载均值u   负载方差v

u=R/n

mark

各阶段线程池大小调整

mark

参考资料
基于SEDA企业服务总线负载控制--马存,马跃,廉东本,李文博
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值