NoSQL非关系型数据库负载均衡的实现

时间:2022-06-20 10:07:33

NoSQL非关系型数据库负载均衡的实现

摘要:NoSQL数据库以其支持数据高并发读写,海量数据高效率存储和访问,以及高扩展性和高可用行的特点在分布式存储系统中得到了广泛的应用。通过对分布式存储系统负载均衡的研究,提出了使用一致性哈希函数来实现系统负载均衡,并通过添加为集群节点添加虚拟节点的方式来增加缓存的命中率。

关键词:NoSQL;负载均衡;一致性哈希函数

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)06-1209-03

The Realization of Load Balancing in NoSQL

LI Bin, ZHANG Ying-wei

(College of Information Science and Technology, Chengdu University of Technology, Chengdu 610059, China)

Abstract: NoSQL database with its supporting data concurrent read and write, the high efficiency of mass data storage and access, as well as high scalability and high availability line features in a distributed storage system in a wide range of applications. Through the study of load balancing for distributed storage systems, the consistency of the hash function to the system load balancing, and by adding a way to add a vir? tual node for the cluster nodes to increase the cache hit rate.

Key words: NoSQL; Load Balancing; Consistent Hash

伴随着互联网web2.0运动的蓬勃发展,许多影响人们生活的网络公司的纷纷出现,如:社交网站Facebook,人人网,微博客服务网站:Twitter,新浪微博,腾讯微博,新闻挖掘类网站:Digg等等,这种交互式新型互联网站的出现,使得传统的关系型数据库在应付超大规模和高并发的查询,读写服务方面显得力不从心。因此NoSQL非关系型数据库以其支持数据高并发读写,海量数据高效率存储和访问,以及高扩展性和高可用行的特点迅速地发展起来[1]。

1 NoSQL非关系型数据库

1.1 NoSQL的存储类型

NoSQL是非关系型数据存储的广义定义,它的数据存储不需要固定的表结构,通常也不存在连接操作,因此在需要高并发处理和大数据存取上具备关系型数据库无法比拟的性能优势。

NoSQL数据库根据数据的存储模型和特点可以分为很多种类。

Key-Value存储:高性能键-值数据库拥有极高的并发读写性能,对于值的类型一般没有使用限制。代表的产品有Tokyo Cabi? net / Tyrant,Berkeley DB,MemcacheDB,Redis等。这些产品不仅拥有极其出色的读写性能,有些还有十分独特的设计。如Tokyo Cabinet对于存储节点的负载均匀的实现便有自己独特的设计[2]。

文档存储类型:文档存储一般用类似jiso的格式存储,采用文档的方式存储内容。这样可以对特定的字段建立索引,实现关系数据库快速查询的功能。代表的产品有:MongoDB,CouchDB等。

列存储类型:按列存储数据,最大的特点是方便存储结构化和半结构化数据,对针对某一列或者某几列的查询有非常大的IO优势。代表的产品有:Hbase,Cassandra,Hypertable等。

除了以上三种比较常见的NoSQL数据存储类型,还有使用图存储,对象存储,XML数据库存储类型的NoSQL数据库也在一定的场合得到使用。

1.2 NoSQL数据库特点

与传统的关系型数据库相比,NoSQL数据库有着自己独特的优点。

1)高横向扩展性:NoSQL数据库中的数据之间无直接关系,为系统架构师在在架构的层面上带来了十分方便的可扩展的能力。NoSQL数据库的架构类似于经典P2P模型,可以在不停止节点服务的情形下增加更多的节点硬件服务器,对一个节点的“写”操作的数据会同步复制到其它节点上。

2)高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下。最新版本的Redis的读写性能可以达到每秒数十万次

的操作。

3)简单灵活的数据模型:NoSQL可以随时自定义需要存储数据的数据格式,并不需要事先为数据建立特定的字段。而在关系数据库里,对字段的增删工作十分繁如果是拥有超大规模数据的表,增加字段将是一个浩瀚的工程。

2分布式数据存储系统设计

2.1 CAP定理

CAP定理是由Eric Brewer在ACM研讨会上关于分布式计算的原则做的开题演讲中提出的,这一理论对后来的分布式存储系统的设计产生了深刻的影响。

CAP定理指的是在设计分布式系统时,一致性(Consistent)、可用性(Availability)、分区容忍性(Partition Tolerance)三个属性不可能同时满足,只能通过牺牲某一个属性来保证系统运行在最佳状态。对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数web应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是目前多数分布式数据库产品的方向。NoSQL数据库就是通过舍弃了强一致性,以最小的代价使用最终一致性来实现数据的一致性要求,来保证分布式数据存储系统的高效、稳定的运行。

图1 CAP理论示意

C:Consistency一致性;A:Availability可用性;P:Tolerance of network Partition分区容忍性。

2.2数据的最终一致性

对于大型的数据交互网站来言,可用性与分区容忍性优先级要高于数据一致性,数据结构师一般会优先考虑A、P,然后通过其他技术手段保证数据终于能一致性的需求。通过CAP理论,架构设计师们明白不需要费心费力设计完美的完美分布式系统,而是应该知道如何对这三者进行取舍。不同数据对于一致性的要求是不尽相同的。举例来讲,电子商务系统中用户对于其他用户评论对不一致是不是时刻敏感的,可以容忍相对较长时间的不一致,这种不一致并不会影响用户的交易和体验。而产品价格数据则是非常敏感的,通常不能容忍超过长时间的不一致。在这样的系统中,只需要保持数据的最终一致性便可以满足架构师对分布式存储系统性能的要求。

数据的最终一致性的特点是:过程松,结果紧,最终结果必须保持一致性。最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。

3分布式数据存储负载均衡的实现

3.1一致性哈希函数

在大型的web数据交换应用中,NoSQL数据库得到了广泛的使用,通常数据是如何被记录在集群的节点中?一般采用哈希取模的方式将数据存储在数据节点中。比如集群中可用节点数为N,那么key值为K的数据请求可以用使用简单的哈希函数:hash(K) mod N来找到对应的机器。这种机制简单又使用。但是随着大型的数据交互式的web系统的快速发展,,系统访问压力的增长,缓存系统不得不通过增加机器节点的方式提高集群的相应速度和数据承载量,这样的解决方案便有些不堪重负了。在动态的增加机器节点的时,大量的缓存数据命不中节点,缓存数据需要重新建立,甚至是进行整体的缓存数据迁移,瞬间会给数据库带来极高的系统负荷,从而导致数据库服务器宕机。

为了解决缓存命中效率低下的问题,一致性哈希函数便应运而生。一致性哈希算法在1997年由麻省理工学院提出,最初的设计目的是为了了解决因特网中的热点(Hot pot)问题。但如今已经广泛运用于分布式数据存储系统中,并有效的解决了数据存储负载均衡的问题。

一致性哈希提出了在动态变化的分布式存储系统环境中,哈希算法应该满足的4个适应条件:存储分布平衡性,内容分配单调性,数据节点分散性,负载均衡性。

3.2一致性哈希函数算法

1)机器节点的分布

首先求出机器节点的哈希值,然后将其分布到0~232的一个圆环上(顺时针分布)。集群中有机器:A,B,C,D,E五台机器,通过一定的哈希算法我们将其分布到如图2所示。

图2一致性哈希函数节点分布图

2)数据的访问方式

然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。接下来从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台机器上。

3)对新增节点的处理

在原有集群的基础上欲增加一台机器F,增加过程如下:

计算机器节点的哈希值,将机器映射到环中的一个节点,如图3所示。

图3一致性哈希函数节点分布图

增加机器节点F之后,访问策略不改变,依然按照2)中的方式访问,此时缓存命不中的情况依然不可避免,不能命中的数据是在增加节点以前落在B~F之间的数据。尽管依然存在节点增加带来的命中率问题,但是与比较传统的哈希取模的方式相比,采用一致性哈希已经将缓存不命中的数据的问题有效的改善。

3.3缓存命中的改进

一致性哈希最大限度地抑制了哈希键的重新分布。另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能均匀的分布在圆环上。因为使用一般的哈希方法,服务器的映射地点的分布非常不均匀。采用增加虚拟节点的思想,为每个物理节点(数据节点,集群节点数量较小的时候),分配100~200个虚拟节点,就可以有效地来抑制数据节点分布不均匀的问题,最大限度地减小服务器增减时的缓存重新分布。提高缓存的命中率,通过将用户真实的数据映射在虚拟节点上,就表示用户数据真正存储位置是在该虚拟节点代表的实际物理服务器上。

实验数据得知,当虚拟节点为实际机器的10~20倍的时候(集群节点数量较少时),缓存的命中率最高。如图4所示。

图4虚拟节点命中图

x轴表示的是需要为每台物理服务器扩展的虚拟节点倍数(scale),y轴是实际物理服务器数,可以看出,当物理服务器的数量很小时,需要更大的虚拟节点,反之则需要更少的节点。

4结束语

本文介绍NoSQL数据库的发展现状,技术特点以及应用方向。介绍了一致性哈希函数算法在分布式数据库负载均衡的运用方式,并对如何提高存储系统缓存的命中率提出了解决方法。

随着大型web数据交互系统的使用,NoSQL数据库的必将大放光彩。在数据存储领域发挥重要作用。

参考文献:

[1]范凯.NoSQL数据库综述[J].程序员,2010(6).

[2]卢冬海,何先波.浅析NoSQL数据库[J].中国西部科技,2011(2).

[3]刘欣.Cassandra数据库安全性分析与改进[J].电脑知识与技术,2010(35).

[4]黄贤立.NoSQL非关系型数据库的发展及应用初探[J].福建电脑,2010(7).

[5]张华强.关系型数据库与NoSQL数据库[J].电脑知识与技术,2011(20).

上一篇:中职学校提高《数字电路》课程教学质量的探讨 下一篇:定制数据库版权保护系统研究与设计