1.Overview

  • SEDA
  • Adaptive Overload Control for Busy Internet Servers
  • An Architecture for Highly Concurrent,Well-Conditioned Internet Services

SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步通信模式。

更进一步,在每个Stage中可以动态配置自己的线程数,在超载时降级运行(如输出纯文字页面)或拒绝服务。

在每个Stage的通常有如下组件:

  • Incoming Event Queue ,事件队列。
  • Admission Controller  阀门,拒绝服务。
  • Dynamically sized Thread Pool, 线程池。
  • Event Handler ,实际处理业务的Compinent。
  • Resource Controller ,控制Stage的参数。

2.Web2.0+SOA环境下的SEDA应用

Web2.0对架构师提出了新的挑战 ,  JavaEE 的同步调用机制(除JMS),有限的线程池与连接池(超出范围性能会下降),固定的定义在JNDI的资源对Web2.0/SOA的需求并不吻合。对BEEP,SCTP这些协议,必须依靠JCA另行编写模块来实现长连接模型。

Java EE 迎合 Web 2.0(IBM DW) 提出,从统计学上看在系统总线程数固定的情况下,使用SEDA能获得较高的Throughput,阶段间的资源差异越大就越明显。
    比如处理一个Web 2.0常用Mashup请求,有如下几步:

  1. 接收用户请求(1单位时间)
  2. 数据库查询(4单位时间)
  3. 根据数据库查询结果,准备Web Service调用参数(1单位时间)
  4. 发起Web Service调用((16单位时间))
  5. 将结果渲染返回给用户(2单位时间)

那么SEDA会使用一条线程处理1.接收用户请求、3.准备WebService、5.返回结果,两条线程处理2.数据库查询, 而5条线程处理耗时最多的4.WebService请求。
     结果表明,当远程调用所花时间不变,而本地操作得到优化时,系统通量也能获得明显提高。

3. Mule 中的SEDA 实例

  • Using SEDA to Ensure Service Availability(InfoQ)

Mule是SEDA架构的遵循者。每个Component间,用inbound->outBound的Queue异步相连,每个Component可以设置自己的线程池大小,队列长度。

因此SEDA中的Stag间事件驱动异步链接,Stag内Incoming Event Queue,Thread Pool,Event Handler都有了。

<mule-descriptor name="RadioCarUMO" implementation="radioCar">
<threading-profile maxThreadsActive="5" maxThreadsIdle="10" poolExhaustedAction="WAIT" threadWaitTimeout="-1" id="component" doThreading="true"/>
<queue-profile maxOutstandingMessages="6"/>
<inbound-router>
<endpoint address="RadioCarsQueue"/>
<router className="org.mulefair.routing.BennyTheGatekeeper"/>
</inbound-router>
<outbound-router>
<router className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint address="FairAreaQueue"/>
</router>
</outbound-router>
</mule-descriptor>

而例子中的InboundRouter BennyTheGatekeeper,则实现了administration controller的角色,本来poolExhaustedAction="WAIT",而administration controller可以通过计数器,直接refuse需求,将请求转发到alarm queue。

整个Stag中唯一缺失是动态改变资源参数的Resource Controller,threadpool也不是Dynamically sized Thread Pool,但这似乎不重要了。

再一次觉得Mule充当Service Container比ESB时还要称职。

设计美好的服务器(6)--SEDA架构笔记相关推荐

  1. 服务器设计之SEDA架构

    SEDA(Staged Event-Driven Architecture)的核心思想是把一个请求处理过程分成几个Stag,不同资源消耗的Stag使用不同数量的线程来处理,Stag间使用事件驱动的异步 ...

  2. 亿级流量系统架构之如何设计承载百亿流量的高性能架构【石杉的架构笔记】...

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 本文来源:石杉的架构笔记(ID:shishan100) 一.往期回顾 上篇文章<大型系统架构 ...

  3. 面试官:如果让你设计一个消息中间件,如何将其网络通信性能优化10倍以上?【石杉的架构笔记】...

    目录 1.客户端与服务端的交互 2.频繁网络通信带来的性能低下问题 3.batch机制:多条消息打包成一个batch 4.request机制:多个batch打包成一个request " 这篇 ...

  4. 如何设计大型游戏服务器架构?

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  5. 腾讯QQgame高性能服务器集群架构看分布式架构设计原则

    腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室(房间),玩家可以选择进入属意的房间,并在此房间内找到可以加入的游戏组(牌桌.棋盘等).玩家选择进入某个房 ...

  6. 如何设计大型游戏服务器架构? 1

    一.游戏服务器特征 游戏服务器,是一个会长期运行程序,并且它还要服务于多个不定时,不定点的网络请求.所以这类服务的特点是要特别关注稳定性和性能.这类程序如果需要多个协作来提高承载能力,则还要关注部署和 ...

  7. 多人网络游戏服务器开发基础学习笔记 II: 帧同步 | 游戏客户端预测原理分析 | FPS 游戏状态同步

    这篇是对书本 网络多人游戏架构与编程 的学习第二篇(第一篇:多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | ...

  8. X86虚拟化之三种服务器虚拟化战略架构

    2019独角兽企业重金招聘Python工程师标准>>> 厚朴[HOPE]工作室 新闻中心 厚朴新闻 专题培训 团队锦囊 协同工作 项目管理 组织架构 师资顾问 设备资产 排忧解难 原 ...

  9. 《Linux高性能服务器编程》学习笔记

    <Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...

最新文章

  1. 飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2
  2. Selenium之XPATH轴定位(第三篇)
  3. C++函数指针 学习笔记
  4. Visual Studio 2017 离线安装方式
  5. 用python前端html后端django_浅谈Django前端后端值传递问题
  6. Python多任务——进程
  7. 福布斯中国2020科技女性榜:蓝港互动廖明香、百度李莹等上榜
  8. 均薪连续三年过万,北上深人才需求大 !| 5G 人才报告
  9. 控件readonly之后的取值
  10. 操作系统核心原理-4.线程原理(上):线程基础与线程同步
  11. linux QT 结束当前进程_Linux桌面进化史
  12. 2018第九届蓝桥杯JavaB组省赛真题详解
  13. WHQL之无需HLK结果就可获得微软驱动数字签名+Cannot specify [ClassInstall32] section解决
  14. java操作html和word生成pdf,可生成目录和表格
  15. GIT原理,知其然,知其所以然
  16. 心若无尘,一花一世界,一鸟一天堂
  17. [经验]2020届后台开发方向实习,秋招经验总结
  18. 加密与解密 入侵检测 扫描与抓包
  19. 幸福婚姻和睦家庭秘籍---包容与感恩
  20. Typora+图床详解(小白都能学得会)

热门文章

  1. 必备模块知识——继电器
  2. Python到底是干啥的?
  3. ​数据科学家必须了解的事:中心极限定理
  4. MFC中CFile读取中文乱码
  5. 【狂神说】Spring Cloud
  6. Redis缓存知识-穿透、击穿、雪崩
  7. 重叠社区检测基础算法
  8. POI操作excel基础用法详解
  9. 人脸识别系统_人脸注册
  10. codeforces 711 C. Coloring Trees (dp)