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

大数据

数据处理

系统架构设计


浏览:899 次

分布式计算

分布式计算是将一个大型计算任务分解为多个小型任务,然后分配给多台计算机进行单独计算,上传计算结果,然后统一组合得出数据结论。本章详细介绍了分布式计算。

分布式计算概述

在过去20年中,互联网生成了大量数据,如爬虫文档、Web请求日志等,并计算了各种类型的派生数据,如反向索引、Web文档的图形结构的各种表示、每台主机的页面数量摘要以及每天请求数最多的集合。这些数据需要每天通过大量计算生成。显然,在一台机器上做这件事是不可能的。必须使用分布式计算。

分布式计算在概念上非常容易理解。例如,工人在工厂生产一批货物需要10天。那么,当工人的工作效率相等时,将同一工作分配给多个工人可以明显缩短整个施工周期。分布式计算也是如此。当输入数据量很大时,这些计算必须分配给多台机器,以便在可接受的时间内完成。机器越多,所需的总时间就越短。这就是分布式计算的优势——通过扩展机器数量,可以实现计算能力的横向扩展。

因此,所谓的分布式计算就是将大量计算出来的项目数据分成小块,由多台计算机分别计算,上传计算结果,然后统一组合得出数据结论。

设计分布式计算平台需要面临许多挑战。例如,分布式平台如何实现并行计算?数据是如何分布的?如何处理错误?等待这些问题结合在一起,这使得处理原本简单的计算变得困难,因为需要大量复杂的代码来处理这些问题。

目前,市场上有许多分布式计算产品。本文将逐一介绍这些产品。

分布式计算应用场景

是否使用分布式计算取决于您的项目业务。尽管分布式计算可以使整体计算能力实现横向扩展,但并非所有计算任务都需要由分布式计算平台解决。例如,在Oracle数据库中,有100万工人的工资数据,我们需要计算这些工人的工资总额。在这种情况下,在PL/SQL中直接执行SUM函数显然比将它们导入分布式计算平台更快。然而,如果数据量在TB级,最好使用分布式计算。毕竟,关系数据库(如Oracle)不擅长计算大型数据。

同时,分布式计算的使用需要一定的学习成本,一般企业不太可能拥有大量用于分布式计算的机器。此时,使用当前的分布式计算云服务可能是享受分布式计算的最经济的方式。例如,阿里云、腾讯云和华为云都为分布式计算提供类似的云服务。

分布式计算的常用技术

作为世界领先的科技公司,谷歌已经在内部实施了数百个专门为处理大数据而编写的计算程序。MapReduce是其著名的计算框架之一,与GFS和Bigtable一起被称为谷歌技术的“三宝”。在开源世界中,还有许多基于MapReduce的分布式计算产品,如Apache Hadoop、Apache Spark和Apache Mesos。

本文接下来将详细介绍这些技术。

MapReduce

1.MapReduce简介

MapReduce是一种编程模型,用于大规模数据集(TB级)的并行计算。关于MapReduce的论文可以追溯到2004年由谷歌的Jeffrey Dean和Sanjay Ghemawat在OSDI(USENIX操作系统设计与实现研讨会)上发表的MapReduce:大型集群上的简化数据处理。本文详细描述了谷歌如何拆分、处理和集成其难以置信的大型数据集。后来,受这篇论文的启发,开源软件的先驱Doug Cutting和其他人开始尝试实现MapReduce计算框架,并将其与NDFS(Nutch分布式文件系统)相结合,以支持Nutch的主要算法