欢迎来到天天文库
浏览记录
ID:43922501
大小:120.50 KB
页数:20页
时间:2019-10-16
《SEDA思想实现燕星20路由Emergint》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SEDA思想实现燕星2.0路由——EmergintByLiXinSEDA:新的软件体系架构SEDA=stagedeventdrivenarchitecturebyMattD.Welsh,CS,UCBerkeleyStaged:将系统分为若干的阶段,每一阶段是一个模块,有明显的功能独立性Event:模块间进行通讯的手段,包罗万象,任何模块间需要传递的内容都可以用Event来表示SEDA的先进性——传统架构传统的软件架构:多线程,通常是为某一个任务(如TCP连接)单独分配一个连接当线程数达到一定的数量
2、的时候由于在线程之间不断切换,系统的额外开销增大,效率明显下降作为一个responsive,robust,andalwaysavailable的系统,这样远远达不到要求SEDA的先进性——传统架构的改进一些系统的解决方案Apache&IIS——限制连接的数目,以达到限制系统内的线程数量的目的效果:系统高throughput,保持高效率,但是忽略了公平性SEDA的先进性—ThreadServerThroughputDegradationSEDA的先进性我们的目标:系统的吞吐量在未达到饱和时随着并发度
3、的增加而增大,一旦达到饱和,吞吐量将几乎维持恒定。而在达到饱和后所有用户的反应时间应是公平的随着用户的增多线性增长。SEDA的先进性—Event-drivenServerThroughputDegradationSEDA的先进性SEDA采用非阻塞IO,将系统划分成几个stage,stage间以Event来通讯,通过对Event队列的控制来达到调整系统性能的目的SEDA将系统依据功能分为几个不同的阶段,每个阶段由自己独立的运行参数,系统瓶颈很容易被定位SEDA的结构系统=stage+stage+…+
4、stageStage通过Event互相通讯Event是装在EventQueue中的,每个stage都可以向其他的某些stageenqueueevent。Stage采取某种策略从EventQueue中取出Event进行处理SEDA的结构——一个stageSEDA的结构——一个httpsever燕星2.0的路由——Emergint燕星系统内每个存储的对象都有一个8个十六进制位的OID,每个节点都有一个6个十六进制位的NID。对象由与其前缀相同的节点进行存储系统内的对象的定位与路由都通过Emergint
5、来实现Emergint的大致思想某节点定位一个对象,就是要找到具有与该对象OID前六位相同的NID的节点每转发匹配一位,每个节点都有length(NID)级邻居,节点根据消息已转发的步数寻找邻居节点再转发燕星2.0的路由规划ObjectOperationMainStageListenStageWriteStageReadStage燕星2.0的路由规划MainStage是整个路由系统的灵魂,相对复杂,虽然是一个stage,内部可能会有相当多的私有方法大部分行为逻辑要对路由表进行操作,而sandsto
6、rm的全局变量(即所有阶段都可见的变量)支持得不好,所以不必要更细致划分本实现版本的数据结构Node:节点类,包括该节点的NID,ip地址和端口,路由表是一个三维的Node类数组MessageElement:可以作为事件在阶段见传递,是符合系统内部消息格式的消息。该类提供其与字节流的相互转换OID与NID:把ID的每个十六进制位放进一个byte中,并提供比较和转换等方法目前的成果有一个可演示路由过程的版本可以看到节点加入系统,退出系统和对对象进行定位的过程为实现方便,OID设置为8位,NID为4位
7、,但向实际系统转换很容易由于运行环境稀少(该系统运行在Linux下,且需要安装SEDA的一个实现版本——sandstorm),因此还没有拿到大机群测试的结果SEDA使用的感受与体会由于采用非阻塞I/O原语,确实能提高通讯效率采用java语言实现非常恰当,Event的回收不需要自己关心Stage的作用相当于将系统划分为几个模块。软件的分析与设计更接近于结构化方法,数据流图一定要画。Stage内部可以使用面向对象的分析设计方法。以一种面向对象的语言实现结构化的设计,从软工的角度值得商榷SEDA使用的感
8、受与体会SEDA的最大缺点在于:stage间的通讯过于错综复杂。Event类型繁多,包罗万象,使得系统非常强大,同时也造成混乱Event类别是Stage采取动作的依据,关键代码中程序很少有直接的subroutinecall,有点类似FSM传统方法每线程负责一个连接,利用一个思维上比较连续的逻辑,从连接读写数据。但是以SEDA实现需要在stage间跳来跳去,思维不联贯Thankyou!!!
此文档下载收益归作者所有