SEDA架构程序实现
一、SEDA

SEDA全称是:stage event driver architecture,中文直译为“分阶段的事件驱动架构”,它旨在结合事件驱动和多线程模式两者的优点,从而做到易扩展,解耦合,高并发。
各个stage之间的通信由event来传递,event的处理由stage的线程池异步处理。
上图对SEDA做了一点改动,如图所示,每个stage由几个核心部分组成:
1)阶段控制器:StageController
2) 事件队列:eventQueue
3) 事件监听器
4)事件处理线程池(线程池内部维护一个队列)
5)事件处理器(事件处理器图上没显示,作为一个业务线程来实现)
处理流程如下:
1)event推送到stage的eventQueue
2) EventListener监听到了event
3)ThreadPool异步并发处理event
二、UML类图
依据上图的逻辑,下面是UML类图设计
1) StageManager初始化调用boot(),创建Stage并维护Event和Stage之间的映射关系
2)Stage启动监听器,监听事件队列(事件队列可以是本地,也可以是分布式队列,这里采用一个Builder构造器了来实现,你可以在构造器里面实现自己的策略)
3)如果接收到事件,将提交给执行器去执行(这里涉及到事件处理器,包含业务逻辑)

三、PDM
下面设计了两张表:
1)t_stage_event:针对每个Stage的事件进行持久化,防止事件丢失补偿处理
2)t_stage_event_log: 对一个event做链路跟踪的日志表

SEDA架构程序实现的更多相关文章
- C/S架构程序多种类服务器之间实现单点登录(转)
(一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...
- C/S架构程序多种类服务器之间实现单点登录
(一) 在项目开发的过程中,经常会出现这样的情况:我们的产品包括很多,以QQ举例,如登陆.好友下载.群下载.网络硬盘.QQ游戏.QQ音乐等,总不能要求用户每次输入用户名.密码吧,为解决这个问题,高手提 ...
- 高并发服务器架构--SEDA架构分析
纯粹转发,没有深入研究,转自:SEDA架构笔记 百牛信息技术bainiu.ltd整理发布于博客园 一.传统并发模型的缺点 基于线程的并发 特点:每任务一线程直线式的编程使用资源昂高,context切 ...
- IMX6开发板qt creator直接编译ARM架构程序
除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtc ...
- SEDA架构实现
一.SEDA SEDA全称是:stage event driver architecture,中文直译为“分阶段的事件驱动架构”,它旨在结合事件驱动和多线程模式两者的优点,从而做到易扩展,解耦合,高并 ...
- 第十四章、Model/View开发:Model/View架构程序设计模式
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关 ...
- 《Entity Framework 6 Recipes》中文翻译——第九章EntityFramework在N层架构程序中的应用(七)
在WCF服务中的序列化代理 问题 您有一个从查询返回的动态代理对象,你想要把它像POCO对象已经进行序列化.在序列化基于实体对象的POCO(普通旧CLR对象)时,实体框架会自动生成一个动态生成的派生类 ...
- uwsgi+django架构程序内部无法获取全局变量
近期开发了一个djangoi程序,用django自带的python manage.py runserver 0.0.0.0:80 运行方式无任何问题,但用django+nginx+uwsg部署运行有时 ...
- SEDA 架构
参考文档: https://blog.csdn.net/zhihui1017/article/details/50502825
随机推荐
- Webapi上传数据(XML)敏感字符解决方案
方法名加特性 [ValidateInput(false)] 配置文件加 <httpRuntime requestValidationMode="2.0" targetFram ...
- [Dart]语法基础
此页面向您展示如何使用每个主要Dart功能,从变量和运算符到类和库,假设您已经知道如何使用其他语言编程. 要了解有关Dart核心库的更多信息,请参阅 Dart Libraries之旅.无论何时需要有关 ...
- iOS-UIView一些坐标和位置方法封装
新建基于UIView扩展类 UIView+wkjFrame,此类是为了方便获取一些基于UIView类UI控件的坐标和位置的简化,直接引用即可 UIView+wkjFrame.h - (CGPoint) ...
- ajax获取json数据及实现跨域请求
最近想练习一下ajax获取json数据 , 首先上网找一些在线的可用来测试的接口. -----------------------------------------------------这里是接口 ...
- java程序连接hive数据库遇到的问题
今天,打算学习一下用hadoop做后台,搭建一个网站,首先第一步便是在本机的eclipse中连接到虚拟机上的hive中,原本以为很简单,但是过程很是艰难.特意做总结 首先hive的版本问题就是一个很大 ...
- tensorflow初次接触记录,我用python写的tensorflow第一个模型
tensorflow初次接触记录,我用python写的tensorflow第一个模型 刚用python写的tensorflow机器学习代码,训练60000张手写文字图片,多层神经网络学习拟合17000 ...
- hadoop2.x 异常
运行mr,出现如下异常 需要配置yarn-site.xml中配置如下信息 参考地址: https://issues.apache.org/jira/browse/MAPREDUCE-2983 http ...
- 弹幕和回到顶部前端web
弹幕和回到顶部前端web 弹幕 1.效果演示 2.相关代码 <!DOCTYPE html> <html lang="en"> <head> &l ...
- Postman—做各种类型的http接口测试
首先,做接口测试前要有明确的接口文档,假设已经在PC上安装好了Postman. 1. 普通的以key-value传参的get请求 e.g. 获取用户信息 Get请求,写入url拼好参数,发送请求,查看 ...
- Windows里如何正确安装Redis以服务运行(博主推荐)(图文详解)
不多说,直接上干货! 注意 : Redis官方并没有提供Redis的windows安装包,但在github上, 有相关的下载地址. 一.Redis的下载地址 相关的下载地址,如下: ...