论文部分内容阅读
随着互联网的发展,传统关系型数据库在海量数据存储、高可扩展性、高可用性等新需求下显现出自身局限性。NoSQL数据库因其模式自由、支持分布式、支持最终一致性等特性可以很好的应对这些互联网新需求。依据CAP理论,NoSQL数据库因无法避免网络分区,所以需要在保证分区容忍性的前提下尽可能提高一致性和可用性。NoSQL中的Redis数据库因开源、内存存储等特性获得学术界和产业界广泛关注。研究Redis数据库一致性是推动Redis发展必不可少的工作。本文不仅对Redis一致性进行详细分析,还对分析中发现的一致性问题提出改进措施并实现。一致性表现形式多样,本文重点研究Redis主节点和从节点的数据一致性。明确研究对象后,本文先从Redis架构、Redis数据复制实现、Redis数据一致性维护三个方面展开Redis一致性分析。然后,本文总结一致性维护中存在的一致性问题并设计测试用例重现之。最后本文对发现的一致性问题提出改进措施并实现:1.复制缓冲区写满问题:原生Redis使用的复制缓冲区逻辑上是一个静态环形队列。复制缓冲区备写满后,队尾数据会覆盖队头数据。一旦复制缓冲区中存储的待同步数据被覆盖,主节点和从节点只能执行一次完全同步。本文设计并实现一个新复制缓冲区替换原有复制缓冲区。新复制缓冲区实现同步数据零丢失,保证同步效率。新复制缓冲区使用缓冲区、文件索引等技术进一步优化数据读写效率。2.故障转移后数据同步低效问题:原生Redis在完成故障转移后,从节点会与新主节点进行一次完全同步,以保证与主节点数据一致性。如果故障发生前,新主节点(作为一个从节点)和其现有从节点隶属于同一个主节点,那么新主节点和这类从节点存储的数据大部分都相同。这种情况下主节点和从节点没有必要进行一次完全同步。优化的故障转移后数据同步策略,实现在上述情景执行部分同步。最后本文对改进后Redis进行测试。测试结果表明:改进后Redis不会对数据库读性能产生影响;改进Redis会少量降低数据库写性能;改进后Redis实现将某些场景下的完全同步过渡到部分同步,降低该场景下同步代价,加快主节点和从节点数据一致性收敛速度。