读书笔记-现代操作系统-8多机处理-8.4分布式系统

8.4 分布式系统

分布式系统(distributed system)和多计算机有什么区别

  1. 多计算机的节点通常有CPU、RAM、网卡,可能还有用于分页的硬盘。而分布式系统的中的每个节点都是一台计算机
  2. 一台多计算机的所有节点一般都在一个房间里,而分布式系统可能分布在全球范围内
  3. 一台多计算机的所有节点运行相同的操作系统,而分布式可以运行不同的系统

这里写图片描述

从技术角度多处理机有共享内存
从应用角度,多处理和多计算都是一个型机器,而分布式则是通信多于计算的

典型的Internet应用有:
远程计算机访问(使用telnet、ssh和rlogin)、远程信息访问(www和FTP)、人际通信(email和聊天程序)以及其他应用(电子商务、远程医疗以及远程教育)

中间件(middleware):在操作系统顶部添加一层软件。这层软件成为中间件。这层软件提供了一些特定的数据结构和操作,从而允许散步的机器上的进程和用户用一致的方式互操作。

8.4.1 网络硬件

只考虑两种LAN(局域网,Local Area Networks)和WAN(广域网,Wide Area Network)。
LAN以以太网为范例,WAN以internet为范例。

  1. 以太网(Ethernet)
    要在以太网上发送包,计算机首先要侦听电缆,看看是否有其他计算机正在传输。如果没有这太计算机便开始传送一个包,其中有一个短包头,随后是0到1500字节的有效信息载荷(payload)。如果电缆正在使用,计算机只是等待直到当前的传输结束,接着该计算机开始发送。
    二进制指数补偿算法(binary exponential backoff)如果两台计算机同时开始发送,就会导致冲突发生,两台机器都做检测。两机都用中断传输来相应检测到的碰撞,然后在等待一个从0到T微妙的随机时间段后,再重新开始,如果再一次冲突,所有碰撞的计算机进入到0到2T微妙的随机等待。以此类推。
    以太网有其最大电缆长度限制,以及可连接的最多的计算机台数限制。要想超过其中一个的限制就要在局域网中连接多个以太网,然后使用桥接器(bridge)把以太网连接起来。
    为了避免碰撞问题,现代以太网使用交换机(switch),每个交换机有若干个端口,一个端口用于连接一台计算机、一个以太网或另一个交换机。

  2. 因特网
    因特网上包括两类计算机,主机和路由器。
    主机(host):有PC机等。
    路由器(router):是专用的交换计算机,它在许多进线中的一条线上接受进来的包,并在多个出口线中的一条线上按照其路径发送包。电话公司和ISP为客户提供大型的网络路由服务,每个主机都有多条路径到达另一个主机。
    因特网上的所有通信都以包(packet)的形式传送。每个包在其内部携带者目的地的地址。而这个地址是供路由器使用。当一个包来到某个路由器时,由路由器转发。

8.4.2 网络服务和协议

  1. 网络协议
    面向连接的的服务是对电话服务的模仿。先建立连接,然后传输数据。
    无连接服务则是对邮政系统的模仿。
    每种服务都以服务质量(quality of service)来表征。
    可靠的服务通常要求有一个特殊的确认包(acknowledgement packet),确认每个收到的消息,这样的发送者就确信消息达到了。不过确认的过程引入了过载和延迟的问题,检查包的丢失是必要的,但是这样确实减缓了传送的速度。

可靠的、面向连接的服务有两种轻微的变种(minor variant)消息序列和字节流。消息队列保留着消息的边界,而字节流没有保留边界。
这里写图片描述

  1. 网络协议
    协议(protocol):所有网络都有高度专门化的规则,用以说明什么消息可以发送以及如何响应这些消息。用于特定计算机通信的这些规则的集合。
    所有的现代网络都使用所谓的协议栈(protocol stack)把不同的协议一层一层叠加起来。每一层解决不同的问题。
    两种主要的Internet协议:IP和TCP。
    IP(Internet Protocol):一种数据报协议,发送者可以向网络上发出长达64kb的数据报,并期望它能够到达。它并不提供任何保证。当数据报在网络上传送时,它可能被切割成更小的包。这些包独立进行传输,并可能通过不同的路由。当所有的部分都到达目的地时,再把它们按照正确的顺序装配起来并提交上去。
    TCP(Transmission Control Protocol,传输控制协议):TCP使用IP来提供面向连接的数据流。为了使用TCP,进程需要首先与一个远程进程建立连接。被请求的进程需要通过机器的IP地址和机器的端口号来指定。而对进入的连接感兴趣的进程监听该端口。这些工作完成之后,只需把字节流放入连接,那么就能保证他们会从另一端按照正确的顺序完好无损地出来。TCP的实现是通过序列号、校验和、出错重传来提供这种保证的。这对发送者和接受者来说都是透明的,他们看到的只是可靠的进程间通信。

DNS(Domain Name System,域名系统):它作为一个数据库把主机和ASCII名称映射为对应的IP地址。

8.4.3 基于文档的中间件

典型的例子是web
Web背后的原始泛型是非常简单的:每个计算机可以持有一个或多个文档,称为Web页面(web page)。在每个页面中有内容以及超链接(hyperlink)。Web是一个由文档构成的巨大有向图,其中文档可以指向其他文档。
每个Web页面都有一个唯一的地址,称为URL(统一资源定位符,Uniform Resource Locator),其形式为Protocol://DNS-name/filename。
Web根本上是一个客户机服务器系统,用户是客户端,而Web站点则是服务器。当用户给浏览器提供一个URL时。浏览器则按照一定的步骤调取所请求的一个URL时。

8.4.4 基于文件系统的中间件

分布式系统采用一个文件系统模型意味着只存在一个全局文件系统,全世界的用户都能够读写他们各自具有授权的文件。通过一个进程将数据写入文件而另一个进程把数据读出的办法可以实现通信。

  1. 传输模式
    上传/下载模式(upload/dowload model)远程访问模式
    这里写图片描述
    上传下载模式的优点:
    一次性传送整个文件的方法必用小块传送文件的方法更效率
    缺点:
    需要把整个文件传输。即使只用一小部分。
    也会存在一致性问题

  2. 目录层次
    是否存在一个所有的机器都承认的全局目录。获得全局根目录的一个方法是,让每个服务器的根目录只包含一个目录项。

  3. 命名透明性
    位置透明性(location transparency):其含义是路径名没有隐含文件所在位置的信息。文件可以在这个服务器的任意位置移动。
    如果在一个系统中文件移动时文件节点名称不会随之改变,则称为具有位置独立性(location independence)将机器或服务器的名字嵌在路径名中的分布式系统显然不具有位置独立性。一个基于远程安装(挂载)的系统当然也不具有位置独立性。位置独立性不容易使用,但是它是分布式系统期望的一个属性。
    处理文件和目录的命名方式有三种:

    • 机器+路径名
    • 将远程文件安装在本地文件层次中
    • 在所有机器上看来都相同的单一名字空间
  4. 文件共享的语义:
    顺序一致性(sequential consistency):系统强制所有的系统调用有序,并且所有的处理器都看到同样的顺序。

如何保持顺序一致性?
通常来说解决方案是放宽文件共享的语义。一般的语义要求一个读操作要看到之前写操作的所有写操作的效果。放宽的语义为“在一个打开文件上所进行的修改,最初仅对进行这些修改的进程是可见的。只有在文件关闭之后,这些修改才对其他进程可见。”即所谓的会话语义(session semantic)

新问题是如果两个或者更多的客户机同时缓存并修改同一个文件?

  1. 当每个文件依次关闭时,其值会被送回给服务器,所以最后的结果取决于哪个文件最后关闭,简单起见也可以是随机选择一个关闭。
  2. 使用上传/下载模式,但是对自动对已经下载的文件加锁。其他进程会被挂起。

8.4.5 基于对象的中间件

典型的是CORBA(公共对象请求代理体系结构,Common Object Request Broker Architecture)
CORBA是一个客户机-服务器系统,其中在客户机上的客户进程可以调用位于(可能是远程)服务器上的对象操作。
ORB(对象请求代理,Object RequestBroker)插入到客户机和服务器之间,从而使它们相互匹配。
每个CORBA对象是叫做IDL(接口定义语言,Interface Definition Language)的语言中的接口定义所定义,说明该方法提供什么方法,以及每个方法期待试用什么类型的参数。
当创建一个CORBA对象时,一个对它的引用也创建处理并返回给创建它的进程。

一个典型的例子是,对于Internet上的通信,协议称为IIOP(Internet InterOrb Protocol)
为了能够在CORBA系统中使用那些不是为CORBA编写的对象,可以为每个对象装备一个对象适配器(object adpter)

缺点:每个CORBA对象只存在一个服务器上,这意味着那些在世界各地客户机上被大量使用的对象,会用很差的性能。

8.4.6 基于协作的中间件

基于协作的中间件(coordination-based middleware)

1. Linda
在Linda系统中,互相独立的进程之间通过一个抽象的元组空间(tuple space)进行通信。对于整个系统而言,元祖空间时全局性的,在任何机器上 的进程都可以把元组插入或者移出元组空间,而不用考虑他们是如何存放的以及存放在何处。元组空间想一个巨大的全局共享储存器。

元组上存在四种操作

  • out:将一个元组放入元组空间
  • in:从元组空间中取出元组,该原语通过内容而不是名称或者地址寻找元组。匹配和移出操作是原子性的。采用的是模板的方式。如果没有匹配的元组则阻塞直到也有匹配的元组插入。如果三个条件都满足就产生出一个匹配:
    • 模板和元组有相同数量的域
    • 对应域的类型一样
    • 模板中的每个常数或者变量均与该元组域相匹配
  • eval:它的作用是同时对元组的参数进行计算,计算后的元组会被放进元组空间中
  • read:和in类似,但是不会把元组移出空间。

2. 发布/订阅(Publish/Subscribe)
当一个信心产生者有了一条新的信息后,它就把该信息作为一个元组在网络上广播。这种行为成为发布(publishing)。
对特定信息感兴趣的进程可以订阅(subscribe)特定的专题,这包括在主题行中使用通配符。在同一台机器上,只要通知一个元组守护进程就可以完成订阅工作,该守护进程检测已出版的元组并查找所需要的专题。
当一个进程需要发布一个元组时,对局域网或者广域网进行广播,感兴的进程会收到信息也进行广播。经过多次广播传播到每个感兴趣的进程。
发布/订阅模型完全把生产者和消费者分隔开来。只询问元组谁对x的内容感兴趣。元组返回响应。

3. Jini
每一个设备都为其他的设备提供了一种或多种服务。可以把jini设备插入到网络中,并且立即开始提供服务。
当一个jini设备想加入到jini联邦时,它在本地局域网上广播一个包,或者在本地无线蜂窝网上询问是否存在查询服务(loopup service)。用于寻找查询服务的协议是发现协议(discovery protocol)以及若干Jini硬件协议中的某一个。
当查询服务看到有一个新的设备想注册的时候,用一段可以用来完成注册的代码作为回答。发送的是JVM形式的。注册一定时间的间隔的做法,称为租约(lease),如果Jini设备可以通过关机的方式离开系统。
Jini使用JavaSpace进行通信和同步,原理类似于Linda。区别是每个Javaspace由一些强类型的记录项组成。不过是强类型的,而Linda是无类型的。每个记录都有一些域,每个域都是java类型的
JavaSpace定义了四种方法:

  1. Write:把一个记录项放入JavaSpace
  2. Read:将一个与模板匹配的记录项复制出JavaSpace
  3. Take:复制并移走一个与模板匹配的记录项
  4. Notify:当一个匹配的记录项写入时通知调用者。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值