论文部分内容阅读
大数据逐渐成为现代社会中不可或缺的一部分,它使得电子商务、人工智能、在线教育等领域都发生了翻天覆地的变化,并且在现代企业中逐渐占据主导地位。然而,大数据的出现对企业的基础设施提出了巨大的挑战。这一挑战反映到存储领域尤为明显。大数据的存储是大数据的处理与应用的基础。传统的存储设施包括底层的单一磁盘、存储阵列,以及高层的单机文件系统,再至关系型数据库管理系统,这些存储设施在传统领域中发挥良好,然而,在大数据领域,它们就显得力不从心了。大数据对数据吞吐以及存储容量有着非常高的要求,这是传统存储设施所无法应对的。为了应对大数据对存储设施的要求,一系列分布式存储设施被发明出来,例如:GFS、BigTable、MongoDB,等等。这些不同的分布式存储设施提供了不同的存储模型与性能权衡。MongoDB是一个具有代表性的分布式存储系统,它提供了高可伸缩性与高可用性,并且其存储模型对用户相对友好,更加贴近应用层。因此,MongoDB在世界范围内得到了广泛的部署与应用。然而,作为一个分布式存储系统,MongoDB缺少了分布式系统的一些关键特性,即:自动伸缩与热点数据自动负载均衡。自动伸缩为分布式系统提供了自动化的扩容与缩容的能力,它使得分布式系统在遇到流量增大或者存储存量不足时,可以自动请求新的计算或者存储资源,来扩容系统;相反,当分布式系统的负载较低或者存储容量过剩时,它可以自动缩容,并释放多余的计算或者存储资源,从而节约资源。热点数据自动负载均衡为一个分布式系统提供了自适应地处理不同访问模式的能力。分布式存储系统中的数据会均匀地存储在所有数据节点中,然而,这些数据的热度是不同的,也就造成了访问频率的不同。分布式系统可以通过自动负载均衡来重新切分与分布数据,从而可以避免热点的产生,提高整个集群的综合资源利用率与有效吞吐。本文针对MongoDB所存在的问题,设计并实现了一个非侵入式MongoDB框架,用于扩展MongoDB,为MongoDB提供自动伸缩与自动负载均衡的能力。为了解决自动伸缩问题,本文所提出的框架分离了资源管理与存储管理。原生MongoDB需要人工干预来分配新的计算与存储资源,以及安装与配置MongoDB实例,再手动将其加入到MongoDB集群,这个过程复杂且易错。本文中框架将使用独立的资源管理层来处理资源管理的问题。所有的计算与存储资源都将由资源管理层负责管理。MongoDB集群本身只负责提供存储抽象。框架提供了一个实时监控与预测模块,来监控运行于框架之上的所有MongoDB集群。当检测到集群存储空间不足时,框架会发起扩容流程,来向底层的资源管理层申请新的资源,即一个提供了一定CPU、内存、磁盘的容器。框架会在容器内配置好新的MongoDB实例,最终将其加入到已有的MongoDB集群中。缩容过程与扩容过程类似。为了解决自动热点数据负载均衡问题,本文所提出的框架采用了切分、迁移、合并等多种策略。当框架监控模块检测到热点数据节点时,负载均衡模块会对热点数据节点上的数据分布进行扫描与分析,并根据适当的策略,对其上的数据进行重新切分与迁移,以使得迁移之后,热点数据节点的热度可以降低,被迁入数据的数据节点可以获得更多的流量,从而均衡整个集群的资源使用率,提高整体吞吐能力。为了应对持续切分后的元数据爆炸,框架还会定期执行压缩操作,将已经冷却的数据块重新聚集、合并,从而减少整个集群中的数据块数量,以提高路由操作、范围操作的效率。本文在Mesos提供的资源管理层上对整个系统进行了实现与验证。实验结果表明,通过使用独立的资源管理层来分离资源管理功能,在资源管理层上构建存储服务是有效的。在资源管理层的基础上,通过使用非侵入式的监控与伸缩模块,MongoDB集群可以实现自由的伸缩。本文框架所使用的基于切分与迁移的负责均衡方案,可以有效地处理热点数据节点的情况。在经过负载均衡后,热点数据节点的负载恢复正常,整个集群的总体吞吐得到了提升。框架在负载均衡的基础上,还实现了数据合并,它可以有效地消除因数据切分而造成的元数据膨胀问题,将元数据维持在一个正常的水平,从而提高路由效率与范围操作的性能。