关于大数据:架构师总说大数据路由分片原来就这

51次阅读

共计 2313 个字符,预计需要花费 6 分钟才能阅读完成。

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 的具体原理和实现讲述请参见后篇。

原创不易,感觉有点用的话,就请你为本文点个在看或者有情转发吧。

你的反对是我写作的能源。

正文完
 0