定义及描述
分布式计算(Distributed Computing)也可译为分散式运算,它主要研究如何应用分布式系统(Distributed System)进行计算。分布式系统中的组件位于不同的计算机上,它们之间通过消息传递进行交流、协作,最终实现一个共同的目标。组件之间的并发行、没有全局时钟、组件的独立故障是分布式系统中的三个主要特性。从基于SOA的系统到大型多人在线游戏,再到P2P都是分布式系统的应用。
在分布式系统中运行的计算机程序被称为分布式程序(distributed program)。在分布式系统中,实现消息传递的机制有很多,比如HTTP、类RPC连接器、MOM(Message-oriented middleware)等。
分布式计算也可应用于解决计算问题中。在分布式计算中,一个问题被分解为很多不同的子问题/任务,每一个任务再由一台或多台计算机解决。
简介
分布式编程或分布式算法最早是指,将计算机网络中的一个或多个计算机分散地放置于一定的地理范围之内。但到了如今,“分布式”的概念得到了扩展,不再单指物理上的“分散”。一些在同一台物理机上运行、通过消息传递进行交流的进程也可被称为分布式。
虽然分布式系统没有一个明确的定义,但下面的两条属性常被应用于判定:
- 包含多个自主计算实体(计算机或节点),每个实体有独立的本地内存(local memory);
- 不同的实体之间通过消息传递(message passing)进行沟通。
分布式系统中往往还会有一个共同的目标,比如解决一个计算量很大的计算问题。其他一些分布式系统常见的属性如下:
- 系统需要对单独的计算机有故障容许度(fault tolerance);
- 系统的结构在执行分布式程序时可能会发生变化;
- 系统中的每个计算节点获取的信息是有限的,只能得到一部分输入。
并行与分布式计算
分布式系统是指一组有着共同目标的网络化计算机。“并行计算”、“并发计算”、“分布式计算”这几个词在概念上有很多重叠的部分。一个系统可以既是“并行”的,又是“分布式的”;分布式系统中的进程可以是并行运行的。并行计算可以看作是紧密耦合形式的分布式计算,而分布式计算可被看作是松散耦合的并行计算。我们可以用以下条件大致将并发系统归类为“并行”或“分布式”:
- 在并行计算中,所有进程可以通过访问一个共用的内存交换信息。
- 在分布式计算中,每个进程有私人的内存(分布式内存,distributed memory),信息交换依赖的是进程间的消息传递。
上图展示了分布式系统和并行系统的区别。(a)是一个传统分布式系统的原理图,图中的每一个节点代表了一个计算机,每条连接节点的线代表了通信线路。(b)详细表示了同一个分布式系统:每个计算机有本地内存,信息可以使用消息传递的方法,通过通信线路由一个节点传到其他节点。(c)表示了一个并行系统,其中的进程可以直接访问共用的内存。
架构
分布式计算中应用了很多不同的硬件和软件架构。分布式编程通常采用以下几种基本的框架:
- 客户服务器模式(Client-server model):把客户端 (Client) 与服务器 (Server) 区分开来。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求;
- 三层架构(Three-tier):将客户端移到中间层,无状态客户端可被使用。这种架构使应用时的部署变得简单,大部分的网页应用程序都是基于这种架构的;
- 多层架构(n-tier):多层架构是开发人员在开发过程当中面对复杂且易变的需求采取的一种以隔离控制为主的应对策略。每一层都可以单独部署。将整个项目自下而上的分为:数据持久(数据访问)层,逻辑(业务)层,UI(展现)层;
- 对等网络(P2P):是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。
典型分布式计算技术
- 中间件(Middleware)技术:属于可复用软件的范畴,处于操作系统软件与用户应用软件中间。中间件在操作系统、网络和数据库之上、应用软件之下,其作用是为处于上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
- 移动Agent技术:移动Agent是一个能在异构网络中自主地从一台主机迁移到另一台主机、并可与其他agent或资源交互的程序。移动Agent具有自治性、移动性、智能性。
- 网格(Grid):网格技术区别于传统的集中式大规模资源共享、分布式计算以及高性能计算等技术。它在动态的一组个体、机构和资源的虚拟组织中实行灵活、可靠、可调整的资源共享环境。在此环境中,网格所需解决的问题包括:唯一性认证、资源访问、资源发现的方式等。网格供应商向用户提供高性能计算环境,而信息系统无需购买昂贵的计算设备,只需从网格中获取所需的计算能力。
- Web Service技术:是对象/组件技术在 Interne中t 的延伸,是一种部署在 Web 上 的对象/组件。Web Service结合了以组件为基础的开发模式以 及 Web 的出色性能,一方面,Web Service和组件一样,具有黑 匣子的功能,可以在不关心功能如何实现的情况下重用;同时, 与传统的组件技术不同,Web Service可以把不同平台开发的 不同类型的功能块集成在一起,提供相互之间的互操作。
- P2P技术:P2P 系统由若干互联协作的计算机构成,是Internet上实 施分布式计算的新模式。它把C/S与B/S系统中的角色一体化, 引导网络计算模式从集中式向分布式偏移,也就是说网络应 用的核心从中央服务器向网络边缘的终端设备扩散,通过服 务器与服务器、服务器与PC机、PC机与PC机、PC机与WAP 手机等两者之间的直接交换而达成计算机资源与信息共享。
几种技术的比较
Web Service 技术的体系结构与基于中间件分布式系统 的体系结构相比,发现它们是非常相似的,可以把体系结构中 的 Web 程序看作中间件。从结构上来看,Web 服务只是从侧 面对中间件平台技术进行革新,虽然所有服务之间的通信都 以 XML 格式的消息为基础,但调用服务的基本途径主要还是RPC,而且具体实现并没有提供一种全新的编程模式。
网格技术与基于中间件的分布式计算技术相比较,它依 然以“中间件”为技术核心,在实现形式上并没有太大的改变。 然而经过一系列的技术革新,网格系统中的技术内涵已经发 生了深刻的变化。其一,基于中间件的分布式计算技术的资源 主要是指数据和软件,而网格计算的资源已经延伸到所有用 于共享的实体,包括硬件、软件,甚至分布式文件系统、缓冲池等;其二,在Internet上,网格中间件层提供了与Web服务一样优 秀的扩展功能,打破了传统分布式技术C/S模式的局限。
网格计算、Web Service等技术在异构平台上构筑了一层 通用的、与平台无关的信息和服务交换设施,从而屏蔽了 Internet中千差万别的差异,使信息和服务畅通无阻地在计算 机之间流动。网格计算与Web Service技术的共同载体是 Internet。但两者的不同之处在于,网格系统连接物理上分散的 硬件资源,形成虚拟计算组织,从而使计算资源得到充分共享。 而Web服务则是以商务应用为背景,是基于网格系统之上的。 网格系统为Web服务提供一个与硬件无关的虚拟计算机;而 Web服务是架构在虚拟计算机平台上,与环境、语言无关的应 用集成平台。
尽管各种分布式计算技术在理念、规范和实现等方面有 较大的差异,但它们之间并不矛盾,而是一种承上启下的关系, 有时甚至是融合的。因此,各种分布式计算技术可以共同存在, 它们的相互结合也是非常有意义和现实的。
[描述及图片来源:Wikipedia,肖征,郭风雷:对典型分布式计算技术的分析和比较]
发展历史
描述
通过消息传递进行交流的并发进程起源于60年代的操作系统架构研究。第一个被广泛使用的分布式系统是局域网(local-area networks),如70年代问世的Ethernet。
因特网的前身:高等研究计划署网络(Advanced Research Projects Agency Network,ARPAnet)是于60年代末期问世的,ARPAnet电子邮件发明于70年代早期。电子邮件是ARPAnet最早的成功应用,也是最早的大规模分布式应用。除了ARPAnet和互联网,其他早期遍布世界的计算机网络还包括80年代的Usenet和FidoNet。这两个网络后来都被应用于分布式系统之中。
分布式计算在70年代末至80年代初逐渐演变为一个单独的学科。该领域的第一个会议Symposium on Principles of Distributed Computing (PODC)可以追述到1982年,它在欧洲的会议International Symposium on Distributed Computing (DISC)于1985年首次举办。
主要事件
年份 | 事件 | 相关论文/Reference |
1990年左右 | 第一代分布式计算技术诞生,开放式软件基金OSF(Open Software Foundation)定义了一个独立于操作系统和体系结构,用于开发分布式应用程序的环境OSF/DEC。 | |
1995年左右 | 第二代分布式计算技术大约诞生,发展迅速并逐渐成熟。面向对象思想和分布式计算技术的有机结合形成了分布式对象计算模型。OMG针对面向过程分布式计算技术的缺点,提出了OMA(Object Management Architecture参考模型),采用了分布式对象技术,其核心技术为ORB(Object Request Broker)。ORB如同一条总线把分布式对象系统中的各类对象和应用连接成相互作用的整体。 | |
2004 | MapReduce是一种分布式计算模型,是Google提出的,主要用于搜索领域,解决海量数据的计算问题。 | "Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages." -"MapReduce: Simplified Data Processing on Large Clusters", by Jeffrey Dean and Sanjay Ghemawat; from Google Research |
2014 | Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 | X. Meng, J. Bradley, B. Yuvaz, E. Sparks, S. Venkataraman, D. Liu, J. Freeman, D. Tsai, M. Amde, S. Owen, D. Xin, R. Xin, M. Franklin, R. Zadeh, M. Zaharia, and A. Talwalkar. MLlib: Machine Learning in Apache Spark, JMLR, 17(34):1–7, 2016. |
2015 | TensorFlow最初由谷歌大脑团队开发,用于Google的研究和生产,于2015年11月9日在Apache 2.0开源许可证下发布。TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。 | Dean, Jeff; Monga, Rajat; et al. (November 9, 2015). "TensorFlow: Large-scale machine learning on heterogeneous systems" (PDF). TensorFlow.org. Google Research. Retrieved November 10, 2015. |
2016 | MXNet由dmlc(Distributed (Deep) Machine Learning Community)打造,其大部分成员是中国人,以陈天奇,李沐,解浚源等为代表,创建了这个世界上目前排名第四的深度学习框架:MXNet。 | Chen, T., Li, M., Li, Y., Lin, M., Wang, N., Wang, M., Xiao, T., Xu, B., Zhang, C., & Zhang, Z. (2015). MXNet: A Flexible and Efficient Machine Learning Library for Heterogeneous Distributed Systems. CoRR, abs/1512.01274. |
2016 | PyTorch是使用GPU和CPU优化的深度学习张量库。于2016年首次发布。 | "An Introduction to PyTorch – A Simple yet Powerful Deep Learning Library". analyticsvidhya.com. Retrieved 2018-06-11. |
发展分析
瓶颈
分布式计算技术是计算机网络的产物,也是计算机网络应用未来的发展方向,虽然已经产生了大量的技术产品,但同时也出现了一些问题:
- 标准问题:目前几乎所有的分布式计算技术都没有完整的统一标准,标准的缺乏使得资源的共享和社会化程度低下。分布式计算之间缺乏有效的交互、协作与协同,从而在很大程度上制约了其发展。
- 技术问题:分布式计算技术是分布式计算能够转化为工业化生产能力的前提,也是分布式计算的质量、功能的保证。可是到目前为止,所有的分布式计算技术都或多或少地存在没有解决的问题,没有哪一种技术能实现完全意义上的分布式计算,满足所有分布式计算的需求。
- 异构问题:现在的网络是一个异构的环境,分布式计算技术首先需要解决异构环境下的互操作问题。首要任务是如何解决互相识别。目前,不可能实现对所有的资源采用同一种描述方式,也无法智能地识别这些资源,这就导致分布式技术技术只能在一定的范围内使用。
- 安全性问题:分布式计算系统存在如下的安全问题:身份认证、数据传输安全、主机资源保护问题、恶意主机问题。为了保证分布式计算的安全,传统的安全机制不是特别有效,表现在分布式计算中事物交互的任一方都无法判断对方是否真正的可信,如:请求是否是病毒和木马所发起;远程计算机的环境是否存在信息泄漏或者恶意欺骗等。
[描述来源:葛澎:分布式计算技术概述]
未来发展方向
要创建可信的、松散的、健壮的分布式系统,使分布式计算得到真实的应用和普及,必须加快标准的研制,从底层信号的传输到复杂业务的流程等各种不同的层次都要形成统一的标准。此外,应该尽可能对分布式计算技术进行有效的组合,集中各种技术的优势,满足分布式计算的需求,这应该是分布式计算技术研究的方向。
以下列举几个分布式计算重点发展的方向:
可靠性,分布式系统由大量分布式组件构成。这些组件的数量和异构性,大大增加了分布式计算系统出错的可能。如何使得系统在部分组件出错的情况下仍然维持正常工作,是分布式计算一直以来的热点议题。
低延时,如今大量的计算任务需要在极短的时间内完成,因为用户的体验往往取决于计算服务的响应速度。分布式计算机系统本身的架构意味着组件间通信需要很大的时间开销。如何规避这些时间开销,获得低延时的计算响应速度对于当前以及外来分布式系统的应用意义重大。
一致性,分布式计算的组件各自独立运算,如何保证组件间的数据具有一致性,同时不引入大量的通信开销,也是未来的研究方向之一。
Contributor: Xiaoxue Zhang