分布式理论(2)·存储分布式化

前言

笔者在上一篇文章对分布式系统的概念和来由做了通俗简单的阐述,并挑出了分布式系统致力解决的两个主要问题:

  1. 单台机器运算能力不足
  2. 单台机器存储能力有限
这是系列文章的第二篇,阐述分布式系统如何将存储分布式化。为什么要先讨论单台机器存储能力有限的问题呢?举个可能不是特别恰当但能说明问题的例子:我们多个人一起吃饭的时候,是每个人都将饭盛到各自的碗里再吃,而不是大家一起直接拿着筷子从锅里夹着吃。机器要运算也一样,数据得先拿到本机上才能进行运算。

为什么会存不下

在讨论怎么将数据分散开存储,达成存储分布式化之前,我们可以先来思考一个问题:为什么单机会存不下数据?

“这是什么问题?那肯定是因为数据量大,一台机器装不下了呀。”

没错,但是即使如此,我们还是可以分情况来讨论数据量大的原因。

  1. 单个文件过大,比如一个视频文件可以占到几GB的容量。我们现在使用的服务器在容量方面绝不会吝啬,起码都要几十GB打底,所以单个或少数个大文件就把服务器塞满的情况很少。
  2. 文件数量过多。这个才是导致单机存不下的主要原因,单个文件即使再小,只要数量够多,总会塞满服务器的。

存储分布式化

以文件为单位分散存储法

所以,实现存储分布式化的思路之一就是以文件为单位,将所有待存储文件分布到各个机器上存储。比如规定每一万个文件存到一台机器:

任务完成了吗?看似OK,但还有问题,会不会出现数据倾斜问题呢?数据的分配依赖于分配策略,如果按照以文件为单位(每一万个文件存一份)的分配策略,就有可能出现数据倾斜问题——分配不均匀。

以文件为单位分散存储法优化

那怎么办呢?有办法,如果分配到的机器容量不足以存储,那就换一台机器存吧,或者说,在存储之前,先判断目标机器是否有足够的容量。

这个问题又被我们解决了,这种方法有什么不好的地方吗?有,服务器空间的分配变得不灵活了。

取我们上面的例子来说,有两台机器,容量分别还剩68G10G。接下来第一次需要存储一批8G的数据,先去找容量还有68G的机器,可以存储,机器容量从68G降到60G,另一台机器不变;第二次需要存储一批61G的数据,发现已经没有(单台)机器可以存储那么多数据了,但实际上,我们的所有机器剩余容量还有70G,理应是可以容纳下后来的61G的。

这时我们会想:要是第一次将8G的数据存到10G的机器上,就可以供第二次61G的数据存到68G的机器上了。

分治思想

以文件为单位,也就是将每一万个文件看作一份数据来分散存到机器上行不通,是因为即使每一份数据都包含一万个文件,但容量是可大可小不一致的,那么从这个角度来说,就可以有另一个思路:将每个文件拆分为若干个单元分散存储,每个单元都是同样大小(具体要拆分为多大需要看实际场景)的。也就是说,之前的“以文件为单位分散存储”变成了将文件拆分为若干个大小一致的单元的“以单元为单位分散存储”。

如此一来,只要机器总容量充足,文件的存储问题解决起来就容易多了。

存储OK了,那如果将文件拆分开存储,要取出使用时怎么办呢?答案是原路返回:先从各个服务器中取出目标文件拆分后的所有单元,再合并成一个文件。

这就是分治思想了。

当然,这是最简单且正常的情况,我们的实际生产中往往是问题百出,复杂的情况需要结合具体的场景来分析,另外,如何将文件拆分?拆分后如何确定各单元存到哪台机器?如何找到一个文件拆分后的各个单元?如何组装合并?诸如此类问题在本篇不是重点,故不做赘述。

总结

使用分治思想来实现存储分布式化

引出问题

分布式存储基于分治思想解决了单机存储能力有限的问题,那么分布式运算又如何解决单台机器运算能力不足的问题?下一篇文章再来聊一聊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值