论文部分内容阅读
近年来,服务器内存容量的迅速扩大使得应用程序逐步将更多数据存入内存中,这也引发一个新的计算模型——内存计算。内存键值存储系统因其语义通用、使用方便而备受关注,如Memcached、Redis等内存键值存储被广泛应用在Facebook、Twitter、Linked In等网络社交平台上。内存键值系统的特点是将数据以键值对的模式存储在内存中,并提供高速的键值索引。利用内存键值系统,应用程序可以不用管理存储数据的结构,甚至能将数据存储在其它节点上。内存键值存储系统按服务提供方式可以分为两类:以网络服务端的方式为应用程序提供分布式服务(如Memcached)和以第三方库(Library)的方式为应用程序提供高速的本地服务(如Kyoto Cabinet)。对于以服务端方式实现的内存键值系统,为了避免服务端单节点宕机时应用程序受影响,应该具有高可用性;而对于以第三方库方式实现的内存键值系统,为了成为避免应用程序在多核平台上运行的性能瓶颈,应该具有高可扩展性。除此以外,内存键值系统应该能为上层提供事务(Transaction)服务,支持ACID特性的数据操作方式。然而当前的Memcached与Kyoto Cabinet等尚不具有上述功能。Memcached在单机宕机后失去服务的能力,并丢失数据,不具有高可用性,且不能提供事务服务;而Kyoto Cabinet存在严重的性能可扩展性问题。为此,本文针对这上述系统的问题进行了研究与分析,并设计与实现了高可用与高可扩展的内存键值存储系统。论文的主要贡献分为以下三个部分:1.针对Memcached的高可用实现,本文所述工作对Cocached进行了优化。Cocached是在Memcached上实现的高可用性内存键值系统,它利用纠删码解决了主从复制冗余数据过多的问题,其缺点是系统恢复期间为保证数据一致性阻塞了对应用程序的数据修改服务。为此,论文设计了一种一致性非阻塞方法,并在Cocached上增加了在线恢复模块,允许系统在恢复期间为应用程序提供数据修改服务,同时保证数据恢复的正确性。测试表明,在添加了在线恢复系统模块后,Cocached恢复期间的吞吐量大量提高,并在读操作较多的场景下与用主从复制实现的系统性能接近。2.在Cocached上搭建事务层,使其能提供事务服务。事务层包含多个事务协调节点,在这些节点的帮助下,客户端成功提交的事务具有ACID特性。事务层也支持高可用性,在事务协调节点宕机后,备份的事务协调节点能恢复未完成的事务并继续提供服务。3.分析Kyoto Cabinet性能可扩展性瓶颈,设计并实现出更加适用的高可扩展同步机制,使用新的同步机制优化了Kyoto Cabinet的可扩展性。测试表明,使用新同步机制的Kyoto Cabinet能提供更加高效键值操作。