本论文是一篇数据相关本科毕业论文范文,关于分布式系统数据分布相关研究生毕业论文开题报告范文。免费优秀的关于数据及节点及数据结构方面论文范文资料,适合数据论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
【摘 要】分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点.分布式系统区别于传统单机系统在于能够将数据分布到多个节点,并在多个节点之间实现负载均衡.数据分布的方式主要有两种,一种是哈希分布,如一致性哈希,代表系统为Amazon的Dynamo系统,另外一种方法是顺序分布,即每张表格上的数据按照主键整体有序.
【关 键 词】分布式系统,数据分布,哈希分布,顺序分布,负载均衡
1.数据分布
将数据分散到多台机器后,需要尽量保证多台机器之间的负载是比较均衡的.衡量机器负载涉及的因素很多,如机器Load值,CPU,内存,磁盘以及网络等资源使用情况,读写请求数及请求量,等等,分布式存储系统需要能够自动识别负载高的节点,当某台机器的负载较高时,将它服务的部分数据迁移到其他机器,实现自动负载均衡.分布式存储系统的一个基本要求就是透明性,包括数据分布透明性,数据迁移透明性,数据复制透明性,故障处理透明性.
2.哈希分布
哈希取模的方法很常见,其方法是根据数据的某一种特征计算哈希值,并将哈希值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同的服务器上.所谓数据特征可以是key-value系统中的主键(key),也可以是其他与业务逻辑相关的值.例如,将集群中的服务器按0到N-1编号(N为服务器的数量),根据数据的主键(hash(key)%N)或者数据所属的用户id(hash(user_id)%N)计算哈希值,来决定将数据映射到哪一台服务器.
如果哈希函数的散列特性很好,哈希方式可以将数据比较均匀地分布到集群中去.而且,哈希方式需要记录的元信息也非常简单,每个节点只需要知道哈希函数的计算方式以及模的服务器的个数就可以计算出处理的数据应该属于哪台机器.
然而,找出一个散列特性很好的哈希函数是很难的.这是因为,如果按照主键散列,那么同一个用户id下的数据可能被分散到多台服务器,这会使得一次操作同一个用户id下的多条记录变得困难,如果按照用户id散列,容易出现“数据倾斜”(dataskew)问题,即某些大用户的数据量很大,无论集群的规模有多大,这些用户始终由一台服务器处理.
处理大用户问题一般有两种方式,一种方式是手动拆分,即线下标记系统中的大用户(例如运行一次MapReduce作业),并根据这些大用户的数据量将其拆分到多台服务器上.这就相当于在哈希分布的基础上针对这些大用户特殊处理,另一种方式是自动拆分,即数据分布算法能够动态调整,自动将大用户的数据拆分到多台服务器上.
传统的哈希分布算法还有一个问题:当服务器上线或者下线时,N值发生变化,数据映射完全被打乱,几乎所有的数据都需要重新分布,这将带来大量的数据迁移.一种思路是不再简单地将哈希值和服务器个数做除法取模映射,而是将哈希值与服务器的对应关系作为元数据,交给专门的元数据服务器来管理.访问数据时,首先计算哈希值,再查询元数据服务器,获得该哈希值对应的服务器.这样,集群扩容时,可以将部分哈希值分配给新加