什么是分布式系统?分布式系统是随着计算机和网络技术的发展而发展起来的,人们希望通过多台计算机组成的网络以协作的方式共同完成单个计算机所无法完成的任务。
什么是分布式系统呢?
目前国内学术界大多采用美国学者Tanenbaum对分布式系统的定义:一个分布式系统是一些独立的计算机的集合,但是对于该系统的用户来说,系统就像一台计算机一样。
这个定义有两个方面的含义:
第一,从硬件角度来看,每台计算机都是自主的;
第二,从软件角度来看,用户将整个系统视为一台计算机。这两者是必须的、缺一不可的。
与集中式系统相比,分布式系统具有哪些特点呢?
分布式系统相对更为复杂,在设计一个分布式系统时在资源的透明性、系统容错性和可伸缩性等方面需要特别关注。
透明性是指如何使得用户以为一些计算机组成的分布式系统只是一台计算机,它包含的内容很多,表1列出了一些主要内容。
表1 分布式系统的透明性
容错性是指分布式系统中部分节点故障后不会影响整个系统的正常运行。一般通过冗余配置的方法来实现容错,例如数据备份。
可伸缩性是指分布式系统能够适应在计算节点数、用户数、存储资源、网络资源等方面系统规模的静态或动态变化。
我经常听到分布式计算、分布式数据库等概念,它们和分布式系统是什么关系呢?
分布式的概念已经在计算机技术领域得到了非常广泛的应用,学术界对这些众多冠以“分布式”头衔的概念与分布式系统之间的关系也不存在一个权威的说法。
如图1所示,大致可以将分布式系统划分为分布式硬件架构、分布式操作系统、分布式数据库、分布式程序设计和分布式应用5个层次。其中分布式操作系统中还包括分布式文件系统,分布式程序设计的产品通常是中间件软件,而分布式计算和云计算则属于分布式应用中的重要内容。
图1 分布式系统的层次
计算机硬件层面有哪些分布式设计架构?
Tanenbaum将硬件的分布式架构划分为基于总线的多处理机、交换型多处理机、基于总线的多计算机和交换型多计算机四种类型,如图2和图3所示。
图2 分布式硬件架构(1)
图3 分布式硬件架构(2)
基于总线的多处理机由多个CPU组成,它们连接到一个公共的总线上,并且共享同一个存储模块。交换型多处理机由多个CPU和多个存储模块组成,通过连接开关控制CPU与存储模块的对应关系。目前计算机上常用的Intel多核处理器可以看作是基于总线的多处理机结构。
基于总线的多计算机由多个计算机组成,每个计算机都具有本地存储器,它们之间通过总线连接,典型的应用实例就是常见的局域网络。交换型多计算机由多个计算机组成,它们采用网格或超立方体等方式连接。
分布式操作系统是什么概念?其中的分布式文件系统又是什么含义?
操作系统的概念大家都非常熟悉了,我们日常使用的计算机都要先安装一个Windows操作系统才可以使用。操作系统管理的对象是单个计算机,而分布式操作系统管理的是多个计算机组成的网络。
如图4所示,分布式操作系统屏蔽了计算机网络的底层细节,像单机操作系统一样,能够为应用程序提供统一的进程调度、文件管理、设备管理等接口。
图4 单机操作系统与分布式操作系统
文件系统是操作系统的一个重要组成部分,例如Windows就提供了文件管理功能。分布式文件系统是分布式操作系统中的重要组成部分,此时文件系统管理的物理存储资源不仅仅直接连接在本地节点上,而且通过网络与远程节点相连。
分布式数据库与传统数据库有什么不同?
分布式数据库通过计算机网络将物理上分散的多个数据单元连接起来组成一个逻辑上统一的数据库,其中有一个统一的数据库管理系统来进行管理,一般称为分布式数据库管理系统。
传统的数据库一般都是集中式数据库,与之相比,分布式数据库最大的特点就是其数据是分布存储的。显然,分布式数据库的管理更为复杂,不过如果设计得当,针对分布式数据管理问题可以取得比集中式数据库更好的效果。例如,采用多节点并行处理可以提高系统性能,采用冗余配置可以提高系统的容错性。
什么是分布式程序设计?中间件又是什么含义?
分布式程序设计是指可以在分布式计算机系统的多台计算机上同时协作运行的程序设计方法。采用分布式程序设计方法设计程序时,一个程序由若干个可独立执行的模块组成,每个模块分布在一台计算机上,它们之间相互通信协作完成任务。例如,常见的客户-服务器模型就是一种典型的分布式设计方法,通常采用消息交互、远程进程调用或远程对象调用等方式来实现客户与服务器之间的通信。
如图5所示,简单地说,中间件就是采用分布式程序设计方法生产出来的一类特殊软件产品,它能够在异构的系统软件和应用软件之间提供连接服务。
图5 中间件
中间件涵盖的范围非常广泛,针对不同的应用需求涌现出多种各具特色的中间件产品。例如IBM公司的MQSeries属于面向消息的中间件,IONA公司的Orbix则属于符合CORBA标准的面向对象请求代理的中间件。
分布式应用包括哪些内容?
分布式系统的应用是非常多的,例如工业控制技术中的集散控制系统、计算机技术中的P2P计算、网格计算、并行计算、分布式计算和云计算都可以纳入分布式应用的范畴。
分布式系统与云计算有什么关系?
有一个很有趣的现象,网格计算的研究是学术界热而企业界不热,云计算的研究则是学术界不热而企业界热,因此很有必要仔细研究一下各企业推出的成功的云计算产品。
细数一下这些产品,包括了Google公司的GFS、Bigtable、MapReduce,Amazon公司的Dynamo,Hadoop开源项目的HDFS、Hbase、MapReduce等。对照图1,就可以发现它们都属于分布式系统的范畴,其中GFS、HDFS算是分布式文件系统,Bigtable、Dynamo和Hbase算是分布式数据库,MapReduce则归于分布式计算。