论文部分内容阅读
在互联网领域,迅猛的互联网技术的发展伴随着海量数据的产生,各种各样基于大数据的应用场景对大数据存储和管理系统的性能方面的要求进一步提升如降低延时、提高吞吐率等。而非关系型数据存储和管理系统(NoSQL)由于其高可扩展性以及对半结构化或非结构化数据的有效处理是大数据处理过程中的重要组件之一。各种各样的NoSQL系统面向不同的上层应用的需求,它们提供了大量的配置参数对系统本身以及系统使用的资源进行管理和设置,设置最适合当前应用场景的配置参数是对系统性能调优的关键手段之一。Redis作为当前的热门NoSQL系统之一,是一种开源的支持持久化功能的高性能键值对内存数据库,如何根据具体应用场景对Redis系统进行调优,帮助用户获得系统的最大性能是值得考虑的问题。同时Redis作为内存NoSQL系统将所有的数据集和中间结果保存在主存系统中,这也使得网络延时、网络带宽以及CPU利用率成为其的主要性能瓶颈。而InfiniBand作为常用的RDMA技术之一,由于它的高带宽、低延时的特点,被频繁地使用在高性能计算领域。如何将其与具体的内存NoSQL系统Redis结合,有效地提高内存NoSQL系统的网络通信的性能,在降低CPU利用率的同时,提高吞吐率并降低网络延时是需要考虑的问题。本文的主要完成工作如下:(1)从Redis系统本身特征出发,基于Redis的性能度量指标对系统进行性能调优。内存NoSQL系统Redis因开源而广受欢迎,它的使用往往依赖于经验丰富的数据库管理员对系统的运行参数的优化配置来得到高效的系统性能。而对于尚未具备Redis系统运维经验的新手而言,往往只能使用Redis系统所提供默认配置,只能满足最基本的功能需求,对于更高级的性能需求没有办法高效的满足。因此,针对内存NoSQL系统Redis,为了帮助更多的使用它的用户得到相对来说更优的性能,分析了影响Redis性能的相关因素,并给出了针对相关性能影响因素的调优方法,然后根据相关分析结果总结出对性能影响明显的调优规则并设计了基于规则的参数管理系统。(2)对InfiniBand提供的两种消息传输语义进行性能测试与评估。在Redis的性能度量指标的分析过程中,将Redis的访问延时分为了排队延时和网络延时,为了降低Redis系统的网络传输延时,提高系统的实时访问性能,利用常用RDMA技术之一的InfiniBand对网络延时进行优化。但由于InfiniBand本身提供了SEND/RECEIVE操作和RDMA操作两种传输语义,并且不同的传输语义提供不同的设置,不同的传输语义在不同的通信模式设置下性能会存在差异,如何选取最优的传输语义和设置是需要考虑的问题。本课题对InfiniBand所提供的消息传输语义进行了性能评估和比较分析,然后在所得到的测试结果的基础之上,提出了传输语义和设置的选择分析。Redis客户端使用处于UC传输类型下的设置为unsignaled模式和inlined模式的RDMA WRITE操作来传输客户端请求到Redis服务器端;而Redis服务器端使用处于UD传输类型下的设置为inlined模式的SEND操作响应客户端的请求。(3)在对InfiniBand的传输语义的性能评估的基础之上,利用RDMA对内存NoSQL系统Redis进行性能优化,有效降低网络通信延时提高系统吞吐率。为了不损坏Redis原有通信模块,提出了一种可替换通信模型框架,使得优化后的Redis系统同时支持基于Socket的通信模块和基于RDMA的通信模块,并且实现了基于RDMA的通信模块,对其进行了延时评估与分析。在基于RDMA的通信模块中提出了一种动态的内存区域分配方法,避免了一次性分配过多的内存所造成的内存浪费,有效地节约了内存空间,也可以避免分配的内存过少;设计了客户端命令请求轮询方法,帮助Redis服务器检查客户端请求的接收情况;完成了大规模数据分片方法。在一般情况下,优化后的Redis使用基于RDMA的通信模块时比使用基于IPoIB协议的传统网络通信模块时快8到10倍;而当工作负载全是SET操作并且key-value的value大小等于3KB时,使用基于RDMA的通信模块的Redis系统比使用基于IPoIB协议的传统网络通信模块的Redis快两倍。