大数据基础理论—数据分片与路由

0. 前言

随着数据规模的不断扩展,单机已经不能存储和处理如此大的数据量,只能依靠大规模的集群进行存储和处理。扩展的方式分为两种,一种是scale up类型,即通过升级改造单机的处理能力来扩展,例如装配更多的CPU和内存;另外一种是scale out类型,即通过增加机器的方式进行,这种方式是目前主流的方式。

对于海量数据的存储和处理,需要通过数据分片来将数据进行切分分配到各个机器中去,数据分片之后还需要按照一定的规则找到数据,这就称为路由。通常数据分片和复制是紧密相关的两个概念。数据分片实现系统的水平扩展,而数据复制主要保证数据的高可靠性,因为在大型集群中,某些机器节点会因为一些不可知的原因出现问题,这个时候如果没有数据备份就会导致部分数据丢失,这对于系统和用户来说都是不可接受的。下面将介绍分片和路由的一些常用算法。

1. 抽象模型

分片和路由的抽象模型主要包含两步:

  • 数据key通过一定的映射策略将其映射到一个分片;
  • 一个分片再按照一定的映射策略映射到具体的机器;
  • 这里面的映射策略包括哈希分片和范围分片,哈希分片主要通过一个哈希函数进行分片,而范围分片不仅支持点查询还支持范围查询。
  • 举个简单的例子,例如现在有海量的数据需要存储,我们第一步可以根据某个哈希函数将这些数据切割成100个文件,然后再将这100个文件映射到具体的机器上。
  • 在进行数据路由时,首先由key得到其所在的分片,然后根据分片找到其对应的机器,然后去机器上寻找所需要找的数。

2. 哈希分片

哈希分片的核心思想是通过哈希函数来进行数据分片,主要包含三种方式,round robin、虚拟桶的方式和一致性哈希方式。

  • round robin:成为哈希取模法。这种方式非常简单,根据hash函数求出key的哈希值,然后mod机器数量就可以把对应的数字存放在这个机器上。优点:实现简单,容易理解,对于小规模的数据可以使用;缺点:灵活性很差,其将数据和机器捆绑在一起,如果机器的数量发生变化,那么几乎所有的数据都需要重新再哈希分配到机器上,这样的开销是很大的。
  • 虚拟桶的方式。虚拟桶与抽象模型中说方式一致,是一个两级映射关系。数据首先映射到数据分片,数据分片再映射到具体的机器。优点:当机器的数量变化时,不需要改变数据和分片之间的映射关系,只需要更改数据分片和机器之间的映射关系即可,会减少一些重哈希的开销;缺点:即便是两次映射的方式,当集群中机器的数量发生变化时,分片和机器之间的映射还需要改变,大部分数据还会受到影响,需要进行传输。
  • 一致性哈希,一致性哈希的出现主要是为了解决因集群机器发生动态改变时尽可能的减少受影响的数据范围。
    • 背景:1.当缓存服务器数量发生变化时,会引起缓存的雪崩,可能会引起整个系统压力过大而崩溃(大量存储统一时间失效)2.当缓存服务器数量发生变化时,几乎所有缓存的位置都会发生改边,怎么才能尽量减少受影响的缓存?
    • 基本原理:一致性hash算法。不是传统的对服务器的数量进行取模,而是对2^32 取模(2^64次方也有可能)。通过hash(服务器的IP地址) % 2^32 次方来映射服务器地址,然后对于需要缓存的内容,hash(缓存内容)%2^32确定hash环的位置,顺时针第一个服务器就是存储所在的服务器。
    • 优化:这样如果需要增加机器时,只需要将这个机器加入到环中即可,这样受影响的数据很少。如果某个机器退出,只需要将其负责的数据交由其前面的机器处理即可,这样可以保证尽可能少的数据受到影响。但是存在一个问题,可能会存在负载不均衡的问题,所以引入虚拟节点,每个物理机对应多个虚拟节点(路由表),可以实现负载均衡和负载管理,机器性能好就多管理一些节点。这些虚拟节点在环上是均匀分布的,不同的机器分管不同的虚拟节点,这样就可以保证负载均衡。
  • 范围分片:首先根据key进行排序,然后再排序好的数据空间中进行分片,每个分片中存储有序的主键空间。然后维护一个数据分片的映射表,记录每一个数据分片的最小主键和物理机地址。数据分片再物理机上的管理方式往往采用LSM树的方式进行。

你可能感兴趣的:(大数据基础理论)