论文部分内容阅读
发布/订阅(Publish/Subscribe)通信泛型由于具有时空松耦合的特点,适用于大规模分布式计算环境,近年来得到了广泛的关注。时空松耦合包含时间和空间的松耦合。其中,空间的松耦合是指数据的发布者无需关心被何种订阅者订阅,订阅者只接收感兴趣的数据,而不需要知道接收的消息来源于何种发布者;时间的松耦合是指发布者/订阅者不需要同时参与交互过程,订阅者没有在线时,发布者也可以发布数据,在数据的发布者离线时,订阅者仍然可以获取到数据。发布/订阅系统是支持分布式系统中各个参与者以发布/订阅的方式进行交互的中间件系统。为了支持时间的松耦合,发布/订阅系统需要具备历史数据的存储功能,保证订阅者可在线获取系统生命周期中所有发布的数据。目前发布/订阅系统中历史数据存储的研究主要采用将部分历史数据暂存在系统中的方式,永久存储所有历史数据的相关工作中,大多采用静态的存储策略,存储节点容易成为热点,负载均衡性较差。针对静态存储策略所存在的问题,本文设计了一种新的历史数据存储方案。该方案将系统中主题的元数据和数据分离存储。主题的元数据服务器采用分布式架构,客户端通过Chord环算法定位元数据服务器。为了避免单一代理存储容量的限制,同一主题的数据采取分块存储方式,数据块分布存放在多个节点中。本文还提出了动态的数据块划分算法,在主题发布数据速率不同的情况下依然能够保持合适的分块大小。针对发布/订阅系统中数据交互的特性,主题数据的存储节点通过建立订阅获取数据,本文进一步提出了基于节点存储适应值的存储节点选择算法,降低数据存储对系统网络资源的使用。为了提高文件块内数据定位速率,在数据块存储的过程中每隔一段长度生成“关键帧”并存储在文件头的索引中,读取操作根据索引快速定位数据。此外,本文采用副本策略应对节点失效,其中主题元数据采用链式副本,主题副本存储位置由元数据代理指定。为了降低节点暂时失效对系统的影响,系统实际存储的副本数多于指定副本数,当系统副本数低于指定副本数时再进行恢复。本文在所提出的历史数据存储方案的基础之上,设计和实现了历史数据存储服务原型系统。通过原型系统实验以及仿真实验与静态存储策略进行对比评估。实验结果表明:相比静态策略,本文的历史数据存储服务具有良好的访问效率以及负载均衡特性。