基于FODA算法mongodb大数据负载均衡策略的改进(8页).docx

上传人:1595****071 文档编号:37051583 上传时间:2022-08-29 格式:DOCX 页数:8 大小:299.21KB
返回 下载 相关 举报
基于FODA算法mongodb大数据负载均衡策略的改进(8页).docx_第1页
第1页 / 共8页
基于FODA算法mongodb大数据负载均衡策略的改进(8页).docx_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《基于FODA算法mongodb大数据负载均衡策略的改进(8页).docx》由会员分享,可在线阅读,更多相关《基于FODA算法mongodb大数据负载均衡策略的改进(8页).docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-基于FODA算法mongodb大数据负载均衡策略的改进-第 8 页基于FODA算法mongodb大数据负载均衡策略的改进摘要:随着 Web2.0技术的发展和云存储技术的成熟,如何有效地存储、处理海量数据成了一个非常严峻的问题。对于数据库的并发性、可扩展性能力的要求也变的越来越高。云计算就在这样的环境下产生。云计算是一种通过Internet以服务的方式提供动态可伸缩性的虚拟化的资源计算模式,由计算机和其它设备提供共享资源,软件和信息作为网络的计量服务。很多大学,供应商和政府组织投资关于云计算的研究,比如:亚马逊推出的简单存储服务和弹性计算云,谷歌提出的可扩展的分布式文件系统(GFS),BigT

2、able和MapReduce,这些技术都已经成功用于生产环境。相对于此,传统的关系型数据库(ORDBMS)在面对并发量极高的Web2.0网站时已经显得捉襟见肘,主要体现在一下几个方面:n 对大并发量的访问需求。当前Web2.0网站的数据库有很高的并发量,每秒上万次读写要求已是常事,对于上万次查询来说,关系型数据库勉强还撑得住,但面对上万次写入访问,硬盘IO就无法承受了。n 对大数据量的存储效率和快速访问的需求。当前大型的SNS网站每天生成的数据数以亿计。以国外的Friendfeed 为例,一个月的用户动态就可以达到 2亿条以上。对于关系数据库来说,在一张如此庞大的表里面进行查询,其效率必然是极

3、其低下的。由于传统的关系型数据库系统无法满足以上需求,因此NoSQL数据库系统在主要互联网公司的应用不断上升,比如Google,Amazon,Twitter和Facebook。在众多NoSQL数据库当中,MongoDB是比较出色的一款。MongoDB是一个类似于关系数据库的非关系数据库,它支持的数据结构跟Json格式类似,称为Bson,因此可以存储比较复杂的数据类型。本文主要讨论MongoDB的工作机制、自动分片原理,最后基于源代码分析MongoDB的负载均衡算法,并提出一定的改进。关键字:大数据,FODA(Frequency Of Data Access),MongoDB,负载均衡1 引言1

4、.1 MongoDB数据库简介MongoDB是一个基于分布式文件存储的数据库。由C+语言编写。它支持的数据结构非常松散,是类似Json的Bson格式,因此可以存储比较复杂的数据类型。MongoDB的特点:n 面向集合存储;n 模式自由;n 支持动态查询;n 支持完全索引;n 支持查询;n 支持复制和故障转移;n 自动处理碎片;n 支持RUBY,PYTHON,JAVA,C+,PHP等多种语言;n 文件存储格式为BSON(一种JSON的扩展);n 可通过网络访问;所谓“面向集合”(Collenction-Orented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每

5、个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各中复杂的文件类型。我们称这种存储形式为BSON(Binary Serialized dOcument Format)。MongoDB服务端可运行在Li

6、nux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。1.2 MongoDB集群系统一个MongoDB的集群系统如图1所致,主要由片(Sharding)、Mongos路由服务器和Config服务器三部分组成。1) 片:片就是主要存储数据的容器。每个片可以是单独的服务器, 也可以是副本集。2) Mongos 路由器:每个分片都包含部分集群数据,那么还需要一个接口连接整个集群,这就是

7、Mongos。Mongos 进程是一个路由器的工作, 它可以将所有的读写请求指引到合适的分片上,从而为客户端提供了一个合理的视图。3) Config 服务器: Config 服务器中持久化了分片集群中的元数据,包括全局集群配置,每个数据库、 集合和特定范围的位置,以及一份变更记录, 保存了数据在分片之间进行迁移的历史信息。图1.集群系统的架构2 MongoDB的自动分片功能什么时候需要分片:a.机器的磁盘不够用了b.单个Mongod已经不能满足些数据的性能需要了c.想将大量数据放在内存中提高性能一般来说,先要从不分片开始,然后在需要的时候将其转换成分片。2.1 MongoDB的数据分割原理分片

8、是MongoDB提供的一种机制,其可以将大型的集合分割保存到不同的服务器上。与其他的分区方案相比,MongoDB几乎能自动为我们完成所有事情。只要我们进行简单的配置,并告诉MongoDB要分配的数据,它就可以自动维护数据在不同服务器之间的平衡。同时根据需要增减服务器,MongoDB也会自动移动平移已有数据。分片机制提供了如下三种优势:n 对集群进行抽象,让集群“不可见”。MongoDB自带了一个叫做mongos的专有路由进程。mongos就是掌握统一路口的路由器,其会将客户端发来的请求准确无误的路由到集群中的一个或者一组服务器上,同时会把接收到的响应拼装起来发回到客户端。n 保证集群总是可读写

9、。MongoDB通过多种途径来确保集群的可用性和可靠性。将MongoDB的分片和复制功能结合使用,在确保数据分片到多台服务器的同时,也确保了每分数据都有相应的备份,这样就可以确保有服务器换掉时,其他的副本可以立即接替坏掉的部分继续工作。n 使集群易于扩展。当系统需要更多的空间和资源的时候,MongoDB使我们可以按需方便的扩充系统容量。为了在分片间均匀地分配数据,MongoDB 会在不同分片间移动被分割了的数据子集,并会根据片键来决定移动哪些数据。例如,我们可能选择按用户名 (username) 字段来划分用户集合。MongoDB 使用基于区间的方式进行划分,即按照给定区间将数据分割成不同块,

10、例如 “a”,“f”。MongoDB 中分片多用a,b来表示区间范围, 该区间表示为 “从a开始且包含a,到b为止但不包含 b”。举例来说,假设users 集合是以 username 为片键进行分片,它分布在两个分片A和B上,并且被分成了如表1所示的多个块,每个块的范围由 key 的起始值和终止值来标识。图2. MongoDB数据分割2.2 MongoDB自动分片的平衡策略MongoDB数据库的自动分片技术就是将原先数据库中集合依据一定的规则切分成若干小块,这些分片小块统一由mongos路由管理,当有请求查询或写入时,路由会依据分片shard key规则找到对应的分片操作。分片解决了写密集操作

11、,用于分散单一写服务器负载。亦或者原先的存储空间不够了,这个时候可能通过分片操作将之后的数据写入其它存储空间上。可以看出,集合的分片和数据库的分表类似,并且每个分片都支持写操作。由于分片的出现,导致数据被分布式的存储到不同的服务器上,当某一服务器出现问题时就可能导致数据丢失,其次路由mongos也会出现问题,另外存储分片的信息的配置服务器也可能会发生问题。当然我们可以利用master salve/Replica sets机制去备份每个分片、Mongos、configs 。如下官网配置图示,即使我们使用服务器交叉备份也需要大量的服务器资源,因此分片是一件极具耗费资源的事情。图3. Mongos的

12、数据均衡MongoDB使用均衡器使数据均衡地分布到集群中的所有服务器上。每个数据块做为一个传输单元,均衡器等待不均衡块计数的阈值发生。一旦达到阈值时,均衡器将重新分配数据块。直到任何二个分片数据块数目差异小于阈值。在数据迁移的过程中,仍然可以进行数据读写,并不会因此而影响可用性。那么 mongodb 是怎么做到的呢?在数据迁移过程中,数据读写操作首先在源数据节点中进行。待迁移完毕后,再将这期间的更新操作同步到新节点中去。最后再更新 config 节点,标记数据已经在新的地方,完成迁移。只有在最后同步迁移期间的操作的时候,需要锁定数据更新。这样就讲锁定时间尽可能缩小,大大降低数据迁移对服务的影响

13、。mongodb 的 sharding 和传统 sharding 的最大区别就在于引入了元数据。看似增加了复杂度,并增加了一些额外的存储,但是由此带来的灵活性却是显而易见的。传统的 sharding 本质上是对数据的静态映射,所有那些数据迁移的困难都是由此而来。而引入元数据以后,就变静态映射为动态映射。数据迁移就不再是难事了。从而从根本上解决了问题。另一方面,用元数据实现 chunk 则降低了实现难度,后端节点仍然可以使用原有的技术。同时,因为不需要对后端数据进行变动,也使部署迁移变得更容易,只需要另外加上 mongos 节点和 config 节点即可。为了减少数据的传输量,每一个分片都包含多

14、个范围。当一个新的分片加入到集群中或者一些分片达到了最大阈值,均衡器会把获取频率最高的数据移到使用频率最低的分片中,通过移动最少的数据量使数据均衡地分布到集群中。均衡器的目的不仅是为了保持数据的均衡分布而且也要减少数据量的传输。这个均衡器的算法没有想象的那么智能,而是基于片中的总体数据移动。它们仅仅转移分片顶端的数据块,并没有考虑到数据访问的频率。这样不能对系统的数据进行有效的均衡。所以非常有必要来改进在MongoDB的自动分片的策略。2.3 FODA算法原理MongoDB sharding主要分为3大部分。shard节点、config节点和config节点。对客户端来说,直接访问的是图中绿色

15、的mongos节点。背后的 config 节点和 shard 节点是客户端不能直接访问的。mongos的主要作用是数据路由。从元数据中定位数据位置,合并查询结果。另外,mongos 节点还负责数据迁移和数据自动平衡,并作为 sharding 集群的管理节点。它对外的接口就和普通的 mongod一样。因此,可以使用标准 mongodb 客户端和驱动进行访问。mongos 节点是无状态的,本身不保存任何数据和元数据,因此可以任意水平扩展,这样任意一个节点发生故障都可以很容易的进行故障转移,不会造成严重影响。为了解决数据在自动分片中数据分布不均的问题,提出了基于数据访问频率的改进算法。在MongoD

16、B中,数据块作为数据传输的单元。在每个分片中有n个数据块,用Pi表示第i个数据块,用Fodi表示第i块数据块的数据访问频率代价。在MongoDB中数据的主要访问是增加、查找、修改和删除。假设每个块的平均数据访问频率为AVG_T_Ci,每个块的增、删、改、查访问次数分别记为Ii,Di,Ui,Si,则Fodi的计算公式为:Fodi = Ii/Ii +Di/Di +Ui /Ui +Si /Si.(1)但是,对于数据块的插入、查询、修改、删除访问,给数据库所带来的负担是不一样的。对于查询功能,由于数据库都启用了缓存机制,因此很多查询其实无需向数据库发请求就可以完成;而对于插入操作来说,每次插入都要与数

17、据库建立连接,因此插入操作给数据库所带来的压力要大于其他的操作,故在此对于插入操作,给其一个小于1的加权系数inc,故公式(1)修改为式(2)。Fodi =inc* Ii/Ii +Di/Di +Ui /Ui +Si /Si.(2)每个分片的fod值是包含fodi数据块值的综合。计算公式如下:S(Fod)=i=1nci(Fodi)需要修改数据结构来记录数据块中的信息,Ii,Di,Ui,Si和Fodi五个变量分别存储增加、查找、修改和更新Fodi的值。2.4 FODA算法在MongoDB中的应用FODA的值代表了每个数据库操作的频率。如果数据库的Fodi的值高代表该数据块使用频率高。数据块重分布的

18、阈值根据分片中数据库数目的不同而不同,但迁移数据库的选择是根据Fodj的值来确定的。它们会在分片的总体规模和数据的访问频率之间进行权衡。数据均衡分为一下三个步骤:1) 据迁移的阈值:计算每个分片中数据库的数量。如果它们的差值大于8,则进行数据均衡直到它们之间的差值小于2。将从数据块最多的分片的数据块移(起始分片)到数据块最少的分片中(目的分片);2) 选择迁移数据块:计算起始分片和目的分片中Fod值。如果(Fod)t(Fd),则选择起始分片中Fodi值最大的数据块。否则,选择起始数据块中Fodi值最小的数据块;3) 迁移数据:迁移在步骤2)中选中的数据到目的数据块,再次分别计算起始分片和目的分

19、片中每个数据块的Fodi的值;流程图如图3所示:此外,还需要确定inc的值。inc作为数据插人操作的权重,所以该权重值应该大于1。inc具体的值应该与服务器性能和系统负载有关,可以根据业务需求来设置和调整该值。在大数据背景下,数十万规模吞吐量的情况下(根据如下图4和图5),大概inc值为5左右。图3. 数据负载均衡流程图图4. MongoDB插入测试图5. MongoDB查询测试3 结束语该论文分析了MongoDB自动分片的原理。由于在集群中数据负载的不均衡,介绍了基于数据访问频率的改进算法(FODA)。提出了基于FODA的数据均衡策略并且在测试环境证明了其有效性,在MongoDB自动分片集群

20、中并发读写性能得到了显著的提高。参考文献:1 姚林,张永库NoSQL的分布式存储与扩展解决方法J计算机工程,2012,38(6):40422李彬,张英伟NoSQL非关系型数据库负载均衡的实现J电脑知识与技术,2012,8(6):120912113多罗夫,迪洛尔夫MongoDB权威指南M程显锋,译北京:人民邮电出版社,20114 Mell P,Grance TThe NIST Definition of Cloud ComputingRS1I:National Institute of Science and Technology,2011研究生课程论文课程名称: 云计算与服务计算论文题目:基于FODA算法mongodb大数据负载均衡策略的改进指导教师: 段鹏飞学 院: 计算机科学与技术学院班 级: 计算机1502姓 名: 王晓东学 号: 1049721501483

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁