分布式系统开发实战:分布式计算,分布式计算常用技术

分布式计算

分布式计算就是将一个大的计算任务分解成多个小任务,然后分配给多台计算机分别计算,再上传运算结果后统一合并得出数据结论。本章详细介绍分布式计算。

分布式计算概述

在过去的20年里,互联网产生了大量的数据,比如,爬虫文档、Web请求日志等,也包括了计算各种类型的派生数据,比如,倒排索引、Web文档的图结构的各种表示、每台主机页面数量的概要、每天被请求数量最多的集合,等等。这些数据每天需要通过大量的计算产生,显然在单机上是无法做到的,必须使用分布式计算。

分布式计算在概念上非常容易理解。举例来说,工厂里面要生产一批货物,一个工人来干,则需要10天才能完成。那么,在工人的工作效率相当的情况下,把相同的活派给多个工人来干,显然能够缩短整个工期。分布式计算也是如此,当输入的数据量很大时,这些计算必须被分摊到多台机器上才有可能在可以接受的时间内完成。机器越多,所需要的总时间将会越短。这就是分布式计算所带来的优势——通过扩展机器数,就能实现计算能力的水平扩展。

所以,所谓分布式计算,就是将大量计算的项目数据分割成小块,由多台计算机分别计算,再上传运算结果后统一合并得出数据结论。

设计分布式计算平台需要面临非常多的挑战,比如,分布式平台是怎样来实现并行计算?是如何分发数据的?又是如何进行错误处理?等等。这些问题综合在一起,使得原本很简洁的计算,因为要大量的复杂代码来处理这些问题,而变得让人难以处理。

目前市面上已经有很多分布式计算产品可供选择,本文会对这些产品做一一介绍。

分布式计算应用场景

是否需要使用分布式计算,需要根据自己项目业务情况而定。虽然分布式计算可以使整体的计算能力实现水平扩展,但也并非所有的计算任务都需要分布式计算平台来解决。比如,在Oracle数据库中,有100万条工人的薪资单数据,我们要统计这些工人的薪资的总和。像这种情况,直接在PL/SQL执行SUM函数,显然要比导入分布式计算平台要快。但如果数据量是在TB级别,那么最好就采用分布式计算了,毕竟Oracle等关系型数据库并不擅长大数据的计算。

同时,使用分布式计算需要一定的学习成本,而一般的企业也不大可能具备拥有用于分布式计算的大规模的机器数。这个时候,使用现在的分布式计算云服务,则可能是最为经济的享受分布式计算的方式。比如阿里云、腾讯云、华为云等,都提供了类似的用于分布式计算的云服务。

分布式计算常用技术

作为世界领先的科技公司,Google公司为了应对大数据的处理,内部已经实现了数以百计的为专门目的而写的计算程序,其中MapReduce就是其著名的计算框架之一,与GFS、Bigtable一起被称为Google技术的“三宝”。而在开源界,基于MapReduce思想的分布式计算产品也大有所在,比较有名的有Apache Hadoop、Apache Spark、Apache Mesos等。

本文接下来将会对这些技术做详细的介绍。

MapReduce

1.MapReduce简介

MapReduce是一个编程模型,用于大规模数据集(TB级)的并行运算。有关MapReduce的论文介绍,最早可以追溯到由Google的JeffreyDean和Sanjay Ghemawat发表在2004年OSDI(USENIX Symposium onOperating Systems Design and Implementation)的MapReduce:SimplifiedData Processing on Large Clusters。这篇文章详细描述了Google如何分割、处理、整合它们令人难以置信的大数据集。随后,开源软件先驱Doug Cutting等人受到该论文的启发,开始尝试实现MapReduce计算框架,并将它与NDFS(Nutch Distributed File System)结合,以支持Nutch引擎的主要算法。由于NDFS和MapReduce在Nutch引擎中有着良好的应用,所以它们于2006年2月被分离出来,成为一套完整而独立的软件,并命名为Hadoop(有关Hadoop的内容会在后面章节介绍)。

到了2008年年初,Hadoop已成为Apache的顶级项目,包含众多子项目。它被应用到包括Yahoo!在内的很多互联网公司。现在的Hadoop版本已经发展成包含HDFS、MapReduce子项目,与Pig、ZooKeeper、Hive、HBase等项目相

你可能感兴趣的:(程序员,Java,编程,数据库,java,职场和发展,面试,微服务)