欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

大数据基础-重新聊聊路由分片

程序员文章站 2022-04-15 20:53:48
01 前言时隔两年再次写作,心态上有了很多变化。在大数据领域探索了几年,确实也到了静下心来,沉淀一下的时候了。接下来的一系列文章也算是将现有理解和学习所得相结合的一些产物,绝对原创。本人文笔拙略,知识点尽量深入浅出,如有不当之处还请各位海涵并指出,同时欢迎技术交流和沟通,期待和大家共同成长。本文为先导文,分片路由实现、一致性等文章,请关注后续。02 什么是分片和路由大数据的相关背景不过多赘述,用两句话简单总结:数据规模爆炸式增长,单机的存储和计算性能受到极大的挑战。在如此的背......

 

01 前言

时隔两年再次写作,心态上有了很多变化。在大数据领域探索了几年,确实也到了静下心来,沉淀一下的时候了。接下来的一系列文章也算是将现有理解和学习所得相结合的一些产物,绝对原创。本人文笔拙略,知识点尽量深入浅出,如有不当之处还请各位海涵并指出,同时欢迎技术交流和沟通,期待和大家共同成长。

本文为先导文,分片路由实现、一致性等文章,请关注后续。

 

02 什么是分片和路由

大数据的相关背景不过多赘述,用两句话简单总结:数据规模爆炸式增长,单机的存储和计算性能受到极大的挑战。

在如此的背景下传统数据库,以Oracle、MySQL等为代表的数据库为了不断前行,在纵向不断深挖,也推出了很多小机、一体机等专用机型,但硬件上推陈出新的速度相比数据增长的速度来说,永远是滞后的,虽然各自也推出以RAC、主从等架构一定程度上进行了横向扩展缓解了单点的压力,但面对庞大的数据依旧显得较为“单薄”。目前主流的Hadoop系存储计算系统基本采用的是横向扩展,即通过增加机器数量来增加水平扩展的能力。

对于存储系统来说,面对海量数据,需要对数据进行分片处理,将数据按照一定的规则分配到各个机器中进行存储,这就叫做数据分片,当数据存储完成后,需要通过一定的手段获得数据的存储位置,这一部分叫做数据路由。

 

03 Hadoop最具代表的分片、路由模型

在Hadoop系中HDFS作为最基础的存储系统,极具代表性。通过不断增加机器数量来获得容量的水平扩展,并且通过将数据复制成多份、异地存储方式,来冗余各种各样单机故障对数据的影响,保证数据的高可用性。通过机架感知的拓扑将数据进行分布,客户端可以从多副本中就近读取,增加了读取的效率。

在NameNode节点的内存中记录了数据 (block)和机器的映射关系,以此来索引数据所在的存储位置,达到寻址的效果。

接下来我们将上面提到分片、路由模型进行初步程度的抽象,得到下图。其中客户端通过“路由层”访问系统进行数据读写,对于大数据生态的系统架构来说,“路由层”可以是分布式系统中的Master、Slave,亦或是外部服务如Zookeeer、 MemoryDataBase等。路由层中存储着数据拓扑的元数据,客户端通过访路由层最终寻址到数据分片所在。

大数据基础-重新聊聊路由分片

 

04 通用的路由分片模型

上面提到客户端通过“路由层”访问系统进行数据读写,路由层中存储着数据拓扑的元数据,客户端通过访路由层最终寻址到数据分片所在。我们以此为出发点,将初步抽象的模型再次高度抽象,可以得到如下图所示的通用模型。

大数据基础-重新聊聊路由分片

在上述模型中,数据按照key-Partition的映射关系进行存储在不同分片中,我们可以看到原本的路由层拆分为Key-Partition的路由和Partition-Machine的路由。当查询一个Key的值时,首先通过Key和分片的映射关系,定位到Key处于哪个分片中,然后通过Partition-Machine的映射关系,定位到分片处于哪个物理节点中。此时我们不难发现Host:Partition是多对一的关系,Partition对Key来说也是多对一的关系。

此时我们反过来思考,哪些系统符合上述通用的路由模型呢?

a.在狭义的定义下,是不是像极了Hbase中RegionServer-Region-Key的关系,Client 通过ZooKeeper 的meta-region-server找到了Meta表,访问Meta表获取了RowKey和Region信息,最后去RegionServer的rpc操作数据。

b.此时我们再稍微广义的横向对标下其他服务,貌似我们不必纠结于是否该系统是否为KV系统,同样的对于Kafka来说,存在Broker:Topic Partition:Message,Producer首先找到Topic的Partition信息,然后通过PartitionLeader位置连接Broker的ip:port来生产数据。HDFS也是类似的存在着DataNode-block-file/dir的映射关系。

所以虽然服务类型定位不同,具体实现方式不同,但都有着类似的路由、分片方法。这就是大数据技术的殊途同归,咳咳,这里有些扯远了,我们下一节再回归正题。

 

05 路由分片哪家强?

那究竟怎样的路由才算最优呢?

这个答案也确实不是唯一的,系统的定位决定系统路由的选型,也并不必纠结于一定要做到中心化或者去中心,就我目前理解,优秀的路由层一定要至少满足两点:

a.具有一定的扩展能力,当规模不断增长后,通过对路由层进行扩展,降低路由压力。

b.低耦合和低复杂度、路由的“高大上”并不意味着一定优秀,多层路由虽然可能效率上有一定提升,随之而来的系统复杂度线性增加,同时路由层尽量不要有过多的依赖,毕竟依赖越多,风险隐患越多。

数据分片的道理也是类似,并不是分片越多效率越高、副本越多数据安全性就越高,分片和副本增加会给元数据维护、数据一致性带来巨大的挑战,当然,随之而来的也会带来存储成本的增长。

 

06 常见的分片路由方法

在常见的路由、分片方法中分为两类:哈希分片和范围分片

  • 哈希分片,顾名思义通过将每个Key进行hash操作,通过hash函数将Key-Value 分配在不同分片中。因为需要对每一组KV进行映射维护,所以对点查询(即单Key查询)非常有优势。

  • 范围分片,将一段范围内的Key-Value进行规整切分为一个分片,这样就形成若干个内部有序的分片。同样的这种分片手段优势也十分的明显,非常适合范围查询(即多Key查询)。

Key hash和Key range的详细原理和实现讲述请参见后篇。

 

原创不易,觉得有点用的话,请持续关注。你的支持是我写作的动力。

大数据基础-重新聊聊路由分片

 

关注公众号,加我好友

大数据之路,携手前行

 

 

本文地址:https://blog.csdn.net/weixin_47158466/article/details/107375770