1.1 分布式计算、并行计算、云计算概述

1.什么是分布式计算

1.1 分布式计算、并行计算、云计算概述 - 图1

图1-1 科学中的分布式计算

经科学研究发现:目前存在很多万亿次计算实例,其中涉及的问题都需要非常巨大的计算能力才能解决。这类问题很多还是跨学科的、极富挑战性的、人类亟待解决的科研课题,如图1-1所示。

除此之外还有很多研究项目需要巨大的计算能力,例如:

1)解决较为复杂的数学问题,例如:GIMPS(寻找最大的梅森素数)。

梅森素数(Mersenne Prime)是指形如2^p-1的正整数,其中指数p是素数,常记为Mp。若Mp是素数,则称为梅森素数。p=2,3,5,7时,Mp都是素数,但M11=2047=23×89不是素数,是否有无穷多个梅森素数是数论中未解决的难题之一。截至2012年7月已累计发现47个梅森素数,最大的是p=43,112,609,此时Mp是一个12,978,189位数。

值得一提的是,中国的一位数学家算出了梅森素数的分布规律图,并用简练的数学公式描述了出来。如果借助计算机的并行计算,也许会对寻找该数字分布规律有所帮助。

2)研究寻找最为安全的密码系统,例如:RC-72(密码破解)。

3)生物病理研究,例如:Folding@home(研究蛋白质折叠、误解、聚合,以及由此引起的相关疾病)。

4)各种各样疾病的药物研究,例如:United Devices(对抗癌症的有效药物)。

5)信号处理,例如:SETI@Home(寻找地球外文明)。

由上不难看出,这些项目都很庞大,都需要惊人的计算量,仅由单个电脑或个人在一个能让人接受的时间内计算完成是决不可能的。在以前,这些问题都应该由超级计算机来解决。但是,超级计算机的造价和维护非常昂贵,这不是一个普通的科研组织能承受的。随着科学的发展,一种廉价的、高效的、维护方便的计算方法应运而生——分布式计算!

所谓分布式计算其实就是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

最近的一个分布式计算项目已经使用世界各地成千上万位志愿者的计算机来进行操作,利用这些闲置计算能力,通过因特网,你可以分析来自外太空的电信号,并探索可能存在的外星智慧生命;你可以寻找超过1000万位数字的梅森素数;你也可以寻找并发现对抗艾滋病病毒的更为有效的药物。

1.1 分布式计算、并行计算、云计算概述 - 图2讨论

我们能否利用访问淘宝网的几千万个用户的电脑做一次分布式计算?

这里仅仅点拨一下,回答该问题其实涉及侵犯用户隐私。用户用电脑上网,安装了很多客户端软件,有的软件是拥有本地所有权限的,它们是否在偷偷用用户的电脑干其他私活,用户也不知道。这曾经引发过国内两大客户端巨头的官司。但是由此可以看出,千千万万用户的电脑是可以利用起来做计算的,当然计算必须围绕一个消息中枢模式进行,因为用户电脑间的网络结构千差万别,无法直接连接。

2.什么是并行计算

并行计算其实早就有了,所有大型编程语言都支持多线程,多线程就是一种简单的并行计算方式,多个程序线程并行地争抢CPU时间。

并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程。并行计算的主要目的是快速解决大型且复杂的计算问题。此外还包括:利用非本地资源节约成本,即使用多个“廉价”计算资源取代大型计算机,同时克服单个计算机上存在的存储器限制问题。

传统上,串行计算是指在单个计算机(具有单个中央处理单元)上执行软件写操作。CPU逐个使用一系列指令解决问题,但在每一个时刻只能执行一种指令。并行计算是在串行计算的基础上演变而来的,它努力仿真自然世界中的事务状态:一个序列中众多同时发生的、复杂且相关的事件。

为利用并行计算,通常计算问题表现为以下特征:

❏ 将工作分解成离散部分,有助于同时解决;

❏ 随时并及时地执行多个程序指令;

❏ 多计算资源下解决问题的耗时要少于单个计算资源下的耗时。

并行计算是相对于串行计算来说的,所谓并行计算分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发地执行计算。

3.并行计算与串行计算的关系

并行计算与串行计算的关系如图1-2所示。

1.1 分布式计算、并行计算、云计算概述 - 图3

图1-2 串行(上图),并行(下图)

结合图1-2,对串行计算和并行计算分析如下:

❏ 传统的串行计算,分为“指令”和“数据”两个部分,并在程序执行时“独立地申请和占有”内存空间,且所有计算均局限于该内存空间。

❏ 并行计算将进程相对独立的分配于不同的节点上,由各自独立的操作系统调度,享有独立的CPU和内存资源(内存可以共享);进程间相互信息交换是通过消息传递进行的。

4.什么是云计算

云计算是一种理念,是旧瓶子装新酒,它实际上是分布式技术+服务化技术+资源隔离和管理技术(虚拟化),如图1-3所示。商业公司对云计算都有自己的定义,例如:

❏ 一种计算模式:把IT资源、数据、应用作为服务通过网络提供给用户(如IBM公司)。

❏ 一种基础架构管理方法论:把大量的高度虚拟化的资源管理起来,组成一个大的资源池,用来统一提供服务(如IBM公司)。

❏ 以公开的标准和服务为基础,以互联网为中心,提供安全、快速、便捷的数据存储和网络计算服务(如Google公司)。

1.1 分布式计算、并行计算、云计算概述 - 图4

图1-3 云计算示意图

通俗意义上的云计算往往是上面这个架构图包含的内容,开发者利用云API开发应用,然后上传到云上托管,并提供给用户使用,而不关心云背后的运维和管理,以及机器资源分配等问题。

虚拟化和服务化是云计算的表现形式(参见图1-4):

1.1 分布式计算、并行计算、云计算概述 - 图5

图1-4 云计算表现形式

❏ 虚拟化技术包括:资源虚拟化、统一分配监测资源、向资源池中添加资源。虚拟化的技术非常多,有的是完全模拟硬件的方式去运行整个操作系统,比如我们熟悉的VMWare,可以看做重量级虚拟化产品。也有通过软件实现的,共享一个操作系统的轻量级虚拟化,比如Solaris的Container、Linux的lxc(关于cgroup的方式我们在7.2节也会谈到)。虚拟化的管理、运维多数是通过工具完成的,比如Linux的VirtManager、VMWare的vSphere、VMWare的vCloud等等。

❏ 服务思想包括:

○ 软件即服务(Software-as-a-Service,SAAS)。是目前最为成熟的云计算服务模式。在这种模式下,应用软件安装在厂商或者服务供应商那里,用户可以通过某个网络来使用这些软件。这种模式具有高度的灵活性、可靠性和可扩展性,因此能够降低客户的维护成本和投入,而且运营成本也得以降低。最著名的例子就是Salesforce.com。

○ 平台即服务(Platform-as-a-Service,PAAS)。提供了开发平台和相关组件,软件开发者可以在这个开发平台之上开发新的应用,或者使用已有的各种组件,因此可以不必购买开发、质量控制或生产服务器。Salesforce.com的Force.com、Google的App Engine和微软的Azure(微软云计算平台)都采用了PAAS的模式。

○ 基础设施作为服务(Infrastructure as a Service,IAAS)。通过互联网提供了数据中心、硬件和软件基础设施资源。IAAS可以提供服务器、操作系统、磁盘存储、数据库和/或信息资源。用户可以像购买水电煤气一样购买这些基础设施资源使用。