正如大家所了解的分布式存储解决的就是大量数据存储的问题。那这个量一般是多少呢?这个量一般是TB、PB级别,即:
敲黑板,划重点
1PB=1024TB
1TB=1024GB
1GB=1024M
01、数据分块
分布式存储的第一个特点:数据分块,分布式的存储在多态机器上。
如果一个文件的数据量比较小,那么一台机器就很容易完成存储,但当这个文件的数据量越来越大的时候,这台机器就可能存储不下,毕竟一台机器的容量是有限的,那这个时候怎么办呢?此时就需要分布式的存储。
例如,我们现在有一个大文件,它的数据量是5PB。这个时候一台机器肯定是存储不下的。那我们可以将这5PB的数据文件划分成若干个小块,假设每一个块的大小是256M,那么5PB的数据文件就被划分成20971520个数据块,我们可以将这些数据块分布式的存储在1000台机器上(假设每台机器的磁盘容量是10TB),大约每一台机器存储2万多一点的数据块。
02、数据块冗余存储可以提高可用性
分布式存储的第二个特点:数据块冗余存储在多台机器以提高数据块的高可用性。
假设上文的1000台机器中有一台机器挂掉了,那么存在于这台机器上的数据块都不能对外提供服务了,这样的话5PB的文件的数据就不完整了。那么为了解决这个问题,我们可以将每一个数据块再备份一次,然后两个相同的数据块分别存储在不同的机器上,如此的话一个数据块所在的机器挂了,那么另一个机器上的相同的数据块还可以对外提供服务。这样做就提高了数据块的高可用性。

现在问题又来了,这么多的机器节点以及存储在机器节点上的这么多数据块该怎么管理呢?我们可以在另外的一台服务器上启动一个JVM进程,这个JVM进程就是负责管理所有存储数据的机器节点以及存储在这些机器节点上的所有数据块,如下图:

上图中的Storage master就是负责管理所有的存储数据的机器以及所有的数据块,所以在Storage master中会存在:机器节点的信息(Node Info)以及数据块信息(Block Info)。
03、遵从主/从结构的分布式存储集群
上图中的Storage slaves就是负责数据块的存储,当Storage slaves中的每一个机器启动了后都会将自己所含有的磁盘容量等信息告诉Storage master机器,当每一个数据块存储在某个Storage slave上时都会把自己的信息告诉Storage master机器。
所以分布式存储的第三个特点就是:遵从主/从(master/slave)结构的分布式存储集群,这里需要清楚的三点是:
1.在Storage master和Storage slave上都是会启动一个JVM进程,在Storage master机器上,这个JVM进程负责机器节点和数据块的管理;在Storage slave上的JVM进程负责数据块的存储服务;
2.Storage master上的JVM进程和Storage slave上的JVM进程之间的通讯是通过RPC完成的。当然两个不同Storage slave机器上的JVM进程也是有可能通过RPC进行通讯的(需要将一个数据块备份,然后将这个备份的数据块通过RPC传输到另一个slave机器中);
04、总结分布式存储的特点
1.数据分块,分布式的存储在多台机器上;
2.数据块冗余存储在多台机器以提高数据块的高可用性;
3.遵从主/从(master/slave)结构的分布式存储集群。
05、分布式存储中的文件
在遵从主/从(master/slave)结构的分布式存储集群中,其实存在两种类型的文件:
1.真实存放数据的文件,这类文件都是存储在slave上的文件,我们称之为物理文件;
2.相对于存储在slave上的文件,那么在master上其实也有一个文件的概念,这个文件不是存储数据的文件,它是一个逻辑文件,就是用一个文件全路径名表示,这个文件全路径名对应着数据块的存储信息(数据块的存储位置等信息)。
参考资料:
https://www.cnblogs.com/tesla-turing/p/11488049.html
https://www.cnblogs.com/jichui/
https://www.cnblogs.com/jichui/p/10444394.html
