博亚体育我们有两种选择,一是向上扩张博亚体育,即提升单台电脑的硬件水平,比如内存不够我们加内存条,存储不够我们加硬盘,计算速度不行,我们换更高频的CPU大数据,但这治标不治本,总有一个上限,而且成本过于昂贵。还有一种方式就是向外扩张,即一台电脑不够,我们用两台,还不够就继续加。“实力不够,人头来凑!”处理大数据就是采用的第二种方式,即分布式集群。
什么是分布式集群呢?说白了就是利用N台电脑的力量(存储和计算资源),大家一起协作共同完成某个任务。这N台电脑就组成了一个分布式集群博亚体育。
假设有一个很大的文件,大到1台电脑的硬盘装不下,比如硬盘是1T ,而这个文件大小是2T,那么我们可以把它切分成3小块或更多,每小块分别储存在1台电脑上:
这样,我们要读取原来的文件内容时博亚体育,只需要把3台电脑上的3个文件块按红黄绿的顺序组合起来,就能得到原文件内容。这样貌似解决了存储的问题。但是假如某个时刻,其中一台电脑死机了(比如图中电脑2),那么我们就无法得到红黄绿3个块了,原文件部分数据就丢失了,这就导致了数据的不安全。
那么,分布式系统是如何解决上述问题的呢?答案就是做冗余备份:将每个数据块复制备份,然后将同一个块的不同备份分别存储在不同的电脑上,这样当某台电脑死机了,它上面所储存的数据块能在别的电脑上找到相同的备份,也能完整的还原的原始数据。
当然,要想将文件还原,我们还得知道这个文件被分成了哪些块、这些块的先后顺序及这些数据块分别存放在哪些电脑上。分布式集群是一个主从架构,记录上述元数据信息的电脑叫做主节点(master),而真正存储数据块的电脑叫做从节点(slave)。我们对分布式系统的读写都是通过主节点来协调完成的。
考虑这样一个需求,假如有1000个整数,要找出其中最大的那个数,常规方式就是遍历这1000个数的数组,没问题!假设现在有1000亿个整数,要找出其中最大的那个数,那我们还是来遍历这1000亿个数的数组? 1000亿个整数占用内存大概是400GB,要遍历数组,首先得有这么大的内存!其次,考虑时间复杂度为O(n),就算有那么大的内存,遍历完这1000亿个数用的时间也会长的让你怀疑人生!
所以,我们换一种思路,假如我们把这1000亿个数均分成1000份,那么每份大概就是400MB,然后我们同时分别求出这1000份中的最大值,这是可行的。最后,我们只需要在找到这1000个数中的最大值,就找到了这1000亿个数中的最大值!