一、分布式系统概述
1. 什么是分布式系统?
- 分布式系统是若干独立计算机的集合,它们对于用户来说就像一个系统。
- 分布式系统屏蔽系统中种类各异的计算机和网络,常常通过一个软件层(中间件)组织起来。
- 常见的分布式系统有:大学或公司的工作站网络、支持订单自动处理的工作流系统以及万维网。
2. 分布式系统中透明性的种类、定义。
- 分布式系统的透明性
透明性 | 描述 |
---|---|
访问 | 隐藏数据表示形式以及访问方式的不同 |
位置 | 隐藏数据所在位置 |
迁移 | 隐藏资源是否已移动到另一个位置 |
重定位 | 隐藏资源是否在使用中已移动到另一个位置 |
复制 | 隐藏资源是否已被复制 |
并发 | 隐藏资源是否由若干相互竞争的用户共享 |
故障 | 隐藏资源的故障和恢复 |
持久性 | 隐藏资源(软件)位于内存里或在磁盘上 |
3. 分布式系统中的拓展技术有哪些?
分布式系统的拓展技术
- 隐藏通信等待时间
- 异步通信
- 减少通信量
- 分布技术:分割组件、分散到系统中(DNS、WWW)
- 复制技术:多拷贝
- 隐藏通信等待时间
减少通信量的实例:将由服务器检验表单改成由客户端检验表单;
- 分布技术的实例:将DNS名字空间划分为区;
- 复制技术的实例:
- 复制:增加可用性,有助于负载均衡;
- 缓存:在访问资源的客户周围制作资源备份;
- 复制技术带来了一致性问题。
二、体系结构
1. 客户端-服务器模型
如下图所示,在C-S模型中,服务器(Server)指实现某个特定服务的进程;客户端(Client)指向服务器请求服务的进程;客户端-服务器之间的一般交互形式是请求/回复(Request/Reply)。
在局域网内,可以建立无连接的协议,高效,但会受传输故障的影响;在广域网上,可以建立基于连接的协议,性能相对较低,但可靠。
在Client上,应用程序常常被组织为三个层次:用户界面层、处理层和数据层。
- 用户界面层:用户交互所需的一切;
- 处理层:应用程序核心功能;
- 数据层:操作数据或文件系统,保持一致性;
2. 多层体系结构
在常见的C-S模型中(物理两层体系结构),客户端和服务器的界限划分有多种可能:
同时,服务器也可以充当客户端的角色,比如下面这一应用场景(物理三层体系结构):
三、分布式进程管理
1. 进程与线程的比较。
比较项 | 进程 | 线程 |
---|---|---|
地址空间和资源 | 进程间相互独立 | 同一进程下的线程共享 |
通信 | 进程间通信通过IPC进行 | 线程间通信可直接读写进程的数据段,但需要同步和互斥技术保证一致性 |
调度 | 进程上下文切换慢 | 线程上下文切换快 |
- 进程与线程的总结:
- 多线程能提高性能;
- 线程不像进程那样彼此隔离,并受到系统自动提供的保护,因此多线程应用程序开发需要付出更多努力。
2. 多线程服务器的优点。
- 显著简化服务器代码;
- 使得应用并行技术开发高性能服务器变得更加容易;
- 保留顺序处理的思路,使用阻塞性的系统调用以提升性能;
3. 代码迁移的动机有哪些?
- 实现负载均衡:将进程从负载重的系统迁移到负载轻的系统,从而改善整体性能;
- 改善通信性能:交互密集的进程可迁移到同一个节点执行以减少通信开销;当进程要处理的数据量较大时,最好将进程迁移到数据所在的节点;
- 保障可用性:需长期运行的进程可能因为当前运行机器要关闭而需要迁移;
- 使用特殊功能:可以充分利用特定节点上独有的硬件或软件功能。
4. 进程对资源以及资源对机器的绑定
- 进程对资源的绑定类型有三种,由强到弱分别是按标志符、按值和按类型。
- 资源对机器的绑定类型有三种,由强到弱分别是紧固连接、附着连接和未连接。
- 在代码迁移时,对于资源的处理有四种形式:
- MV:移动资源;
- GR:建立全局系统范围内引用;
- CP:复制资源;
- RB:将进程重新绑定到本地同类型资源。
- 相应的,在每一种绑定类型下可以进行的操作如下表所示:
未连接 | 附着连接 | 紧固连接 | |
---|---|---|---|
按标志符 | MV、GR | GR、MV | GR |
按值 | CP、MV、GR | GR、CP | GR |
按类型 | RB、MV、CP | RB、GR、CP | RB、GR |
四、分布式系统通信
1. 远程过程调用
远程过程调用(Remote Procedure Call)是分布式系统通信处理的事实标准,实现消息传输的透明性,其原理如下图所示。
远程过程调用的步骤如下:
- 客户过程以正常的方式调用客户存根;
- 客户存根生成一个消息,然后调用本地操作系统;
- 客户端操作系统将消息发送给远程操作系统;
- 远程操作系统将消息交给服务器存根;
- 服务器存根将参数提取出来,然后调用服务器;
- 服务器执行要求的操作,操作完成后将结果返回给服务器存根;
- 服务器存根将结果打包成一个消息,然后调用本地操作系统;
- 服务器操作系统将含有结果的消息发送回客户端操作系统;
- 客户端操作系统将消息交给客户存根;
- 客户存根将结果从消息中提取出来,返回给调用它的客户过程。
2. 持久通信与暂时通信的区别
- 在持久通信中,通信双方不需要保持运行;在暂时通信中,通信系统只在发送者和接受者运行时存储消息。
3. 同步通信与异步通信的区别
- 在同步通信中,客户端需要自我阻塞等待服务器的回复;在异步通信中,客户端不等待,立即执行其他程序。
4. 消息通信的类型
持久异步通信和持久同步通信:
暂时异步通信和基于接收的暂时同步通信
基于交付的暂时同步通信和基于响应的暂时同步通信