1.1分布式计算机的概念
分布式算是一门计算机科学,主要研究对象是分布式系统。
分布式系统是由若干通过网络互联的计算机组成的软硬件系统[1],且这些计算机互相配合以完成一个共同的目标(往往这个共同的目标称为“项目”);
分布式计算指在分布式系统上执行的计算。分布式计算是将一个大型计算任务分成很多部分分别交给其他的计算机处理,并将所有的计算结果合并为原问题的解决方案。
注意: 这里与并行计算不同的是,并行计算是使用多个处理器并行执行单个计算。并行运算与分布式计算的区别是:分布式计算强调的是任务的分布执行,而并行计算强调的是任务的并发执行
1.1.2分布式计算的优缺点:
优点:超大规模 ,虚拟化,高可靠性 ,通用性 ,高可伸缩性,按需服务,极其廉价,容错性;
弱点:多点故障(一台或多台计算机的故障,或一条或多条网络链路的故障,都会导致分布式系统出现问题);安全性(分布式系统为非授权用户的攻击提供了更多机会);
1.1.3分布式计算的相关计算形式:
(1)单机计算:
单机计算是最简单的计算形式,即利用单台计算机(如PC,英文名PersonalComputer,个人电脑或个人计算机,是电脑的统称,具有能独立运行,完成特定功能的个人计算机)进行计算,此时计算机不与任何网络互联,因而只能使用本计算机系统内可被即时访问的所以资源。在最基本的单用户单机模式中,一台计算机在任何时刻只能被一个用户使用。用户在该系统上执行应用程序,不能访问其他计算机上的任何资源。在PC上使用的诸如文字处理程序或电子表格处理程序等应用就是单机用户单机计算形式。
多用户也可以参与单机计算。在该计算模式中并发用户可通过分时技术共享单机计算机中的资源,我们称这种计算方式为集中式计算。通常将提供集中式资源服务的计算机成为大型机(mainframe computing)。用户可通过终端设备与大型机相连,并在终端会话期间与之交互。
如图所示,与单机计算模式不同,分布式计算包括在通过网络互连的多台计算机上执行的计算,每台计算机都有自己的处理力器及其他资源。用户可以通过工作站完全使用与其互联的计算机上的资源。此外,通过与本地计算机及远程计算机交互,用户可访问远程计算机上的资源。www是该类计算的最佳例子。当通过浏览器访问某个web站点时,一个诸如IE的程序将在本地系统运行并与运行于远程系统中的某个程序(即Web服务器)交互,从而获得驻留于另一个远程系统中的文件。
(2)并行计算:
并行计算(或称并行运算)是相对于串行计算的概念 (如图1-2),最早出现于20世纪六七十年代,指在并行计算机上所作的计算,即采用多个处理器来执行单个指令。通常并行计算是指同时使用多种计算资源解决计算机问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段
并行计算可分为时间上的并行和空间上的并行。时间是的并行指的是流水线技术,空间上的并行指用多个处理器并发的执行计算。与分布式计算的区别是,分布式计算强调任务的分布执行,而并行计算强调任务的并发执行。
(3)网络计算:
网络计算是一个比较宽泛的概念。有时网络计算指分布式计算,有时指云计算或其他新型计算方式。网络计算的核心思想是,把网络连接起来的各种自治资源和系统组合起来,以实现资源共享、协同工作和联合计算,为各种用户提供基于网络的各类综合性服务。
(4)网格计算:
网格计算是指利用互联网把地理上分布的各种资源(计算、储存、带宽、软件、数据、信息、知识等)连成一个逻辑整体,就像一台超级计算机,为用户提供一体化信息和应用服务(计算、储存、访问等)网格计算强调的是资源共享,任何结点都可以请求使用其他结点的资源,任何结点都需要贡献一定的资源给其他结点。
网格计算侧重并行计算的计算集中性需求,并且难以自动扩展。云计算侧重事务性应用、大量的单独请求,可以实现自动或半自动的扩展
(5)云计算:
云计算概念最早由Google公司提出。2006年由Google高级工程师克里斯托夫·比希里亚第一次提出“云计算”的想法,随后Google推出了**“Google101计划”计划的目的是让学生参与云的开发,为之提供Google式无线计算处理能力,如图(1-3)
云计算包括两个层面的含义:一是商业层面,即用云方式提供服务;二是技术层面,即各种客户端的计算都有网络负责完成。
目前来说云计算没有一致的定义,通常是指由网络计算、分布式计算、并行计算、效用计算等传统计算机和网络技术融合而形成的一种商业计算模型。**
云计算的主要形式包括基础设施服务(IaaS),平台服务(PaaS)和软件即服务(SaaS)
1.2分布式系统概述
1.2.1分布式系统的定义:
分布式系统是指通过网络互联,可协作执行某个任务的独立计算机集合。这个定义有两个含义:第一,从硬件角度将,每台计算机都是自主的;第二从软件角度将,用户将整个系统看作一台计算机两者必须缺一不可。
一个分布式系统一般是由多个位于不同位置的网络上计算机组成的系统,这些计算机通过网络传递消息与通信,从而完成一个共同目标。(图1-4)1.2.2经典的分布式系统与项目:
1.WWW(环球信息网WorldWideWeb,有许多互相连接的超文本组成)
2.SETI@home(Search for Extra Terrestial Intellingence at Home,寻找外星人,由互联网上多个计算机组成的处理天文数据的分布式计算系统)
3.BOINC(伯克利开放式网络计算平台,利用互联网计算机资源进行分布式计算的软件平台)
4.其他分布式计算项目,计算未来地球天气的、捕震网、世界社区网格、找出脉星引力波等等。
1.2.3分布式系统的特征:可靠性,可拓展性,可用性,高效性,CAP理论
CAP理论不满足以下三点:一致性,可用性,分区容忍性。图(1-6)
为了更好的理解CAP理论的概念,我们看图(1-7)
假如有俩个应用程序A和B,分别运行在两个不同的服务器N1和N2上。A负责向他的数据仓库写入数据,而B负责从另一个数据库副本读取数据。服务器N1通过发送数据更新消息给服务器N2来实现同步,以达到两个数据库之间的一致性。
** 1.3分布式计算的基础技术**
1.3.1进程间通信:
分布式计算的核心技术是进程间通信,即在互相独立的进程间通信及共同协作以完成某项任务的能力。
1.3.2IPC程序接口原型:
在可提供的IPC所需的最低抽象层的基本API中,需要提供一下4种基本操作:
1.send(发送)
2.receive(接收)
3.connect(连接)
4.dieconnect(断开连接)
HTTP协议的IPC基本操作流程图(1-10)
1.3.3事件同步
IPC中一个难点是进行IPC的各相关进程是独立执行的,各进程不知道对方进程的情况。IPC设施提供事件同步的最简单的方法是使用阻塞(blocking)机制,即挂起某一进程的执行,直到该进程发起某个操作执行结束,另外,IPC操作是可以是异步或非阻塞(nonblocking)操作。进程发起的异步操作不会引起阻塞。因此一旦向IPC设施发出异步操作后,进程可以继续执行。当异步操作完成后,进程才会随后得到IPC设施的通知。
(1)同步send和同步receive
(2)异步send和同步receive
(3)同步send和异步receive
(4) 异步send和异步recevie
1.3.4死锁和超时:
尽管阻塞机制为PIC提供了必要的同步,但是同步操作如果按照错误的顺序执行就可能产生死锁,造成进程被无限期挂起,通常这是不能接受的。
在阻塞式操作没有正确生效时,可能会引起无限期的阻塞或死锁。
对于死锁,有两种避免或解决方法,第一,使用超时机制来设置最大阻塞期限。第二,使用进程或线程提供阻塞操作。
在使用IPC编程接口时,了解该操作是同步还是异步操作是非常重要的。如果阻塞操作仅仅是send和receive,那么编程人员就可以使用子进程或线程来提供阻塞,让程序的主线程或父线程继续执行其他任务,而子进程或子线程将被挂起,直到接收到响应为止,这就是所说的异步处理。
1.3.5事件状态图:
事件状态图可以用来记录和表示某一协议执行期间详细的事件及阻塞序列。
图上是一个包括两个并发进程1和2的请求-响应协议的事件状态图。每个进程随事件变化的执行情况用垂线表示,时间沿垂线向下增加。执行线上的实线段表示进程处于活动状态的事件段,虚线段表示进程被阻塞的事件段。
图20利用事件状态图描述了基本HTTP。 事件状态图是演示事件同步的有用工具,但在用于记录复杂协议时,过于详细了,事件状态图有一种简化形式,通常为顺序状态图,它常与部分UML符号一起用于记录进程间通信。
如图(1-21)所示,在顺序状态图中,协议的每个参与者的执行流用虚线表示,并且不区分阻塞状态和执行状态。双方交换的两天信息用垂直两边虚线的有向实线表示,有向实线上带一个描述性标签。图(1-22)是HTTP的顺序状态图。
1.3.6进程间通信范型的演变:
在最低抽象层,IPC利用底层的串行或并行数据进行传输机制,在网络上传输二进制流。这种IP范型可以用于编写网络驱动软件,属于网络或操作系统编程领域的内容。
下一个范型是众所周知的一种。称为Socket API(Socket应用程序接口)。在Socket范型中,两个进程使用名为Socket的逻辑构造交换数据,每一方都要建立一个Socket。
远程过程调用(Remote Procedure Call,RPC)或远程方法调用(Remote Method Inbocation,RMI)范型通过允许向远程进程发送调用或方法调用,来提供更改层次的抽象。他们一般是基于Socket范型实现的。在这些范型中,数据作为参数和返回值在两个进程之间进行传递。