论文部分内容阅读
随着互联网+时代的到来,传统行业和互联网相互结合,以及Web2.0社交网络和商务金融产生了大量的动态数据,这对传统的RDBS(Relational Database Server)带来的重大的挑战。分布式key-value系统作为一种非关系型数据缓存/存储系统被广泛的应用于互联网+的系统中,相比于RDBS,其拥有高性能、高可扩展性和最终一致性。然而面对大量的动态数据和集群数目的不断扩展,网络的性能开销成为了分布式key-value系统的性能瓶颈,因为系统从网卡到内核再到应用系统要经过很多层次。针对以上难题,本文结合被广泛应用于高性能计算的InfiniBand,主要的工作和创新如下:首先,在Memcached和Redis上保留原有的BSD Socket套接字的通信模块的同时,结合InfiniBand设计了IB Verbs混合元语网络模块,客户端使用IB WRITE发送命令和数据,这样服务器可以使用较少的CPU参与,客户端不用暴露自己的内存地址空间给服务器端,获得较低的时延和较高的吞吐量。设计实现了InfiniBand RDMA注册的内存池和线程池,达到RDMA注册的内存池的重复利用和线程池的重复利用以及减少每次注册RDMA区域带来的开销。其次,随着网络时延的减小,反而应用本身的开销就凸显出现,我们发现传统的BSD Socket应用内部在接收到网络的数据以后会拷贝到数据存储的内存中,这并不适用于InfiniBand。所以我们将以前的通信内存和数据存储的内存进行融合,实现了部分融合的系统InnerCache和完全融合的NewCached系统。InnerCache借鉴了操作系统cache的机制,实现了cache-in-cache,既cache中的cache。NewCached将通信区域与存储区域的完全融合,并且在融合以后的区域分为两部分;一分部是RDMA既可以读也可以写的稀疏区域,另一部分是RDMA只读的密集区域。最后,在整个集群结构上,Memcached采用了代理节点或者mcrouter节点,其运行一致性哈希算法,提供了非常良好的可扩展性,但是随着大量的客户端的访问,客户端首先会访问代理节点获取对应的Memcached节点,这样代理节点面对高并发是很可能成为系统的瓶颈。我们设计了一种更加适合InfiniBand的Sharding分布式key-value系统集群结构,它是一种无中心的结构,客户端可以任意连接到任何一个节点,节点与节点之间共享它们的RDMA区域,并且可以根据服务器负载动态调节客户端连接到别的服务器节点。