分布式系统(1)-简介
Aug 29th, 2019
0
定义与特性
分布式系统是若干独立自主计算机的集合,这些计算机对于用户来说像单个耦合系统。
物理分布,逻辑集中;个体独立,整体统一
特性:
- 自主性:计算节点硬件或软件进程是独立的
- 耦合性:用户或者应用程序感觉系统是一个系统——节点之间需要相互协作
- 构成组件并被所有用户共享
- 系统资源可能不允许访问
- 软件运行在不同处理器上的多个并发进程上
- 允许多点控制
- 允许多点失效
自主节点集合
- 节点独立行为
- 每个节点都是独立的,有自己的本地时间
- 没有全局锁
- 存在基本的同步和协同的问题
- 节点集合行为
- 如何管理集合中的节点之间的关系?开放集合、封闭集合
- 如何知道确实是在跟一个授权(非授权的)成员通信?信任、安全机制
一致(coherent)系统
- 本质:节点无论在什么地方,用户无论何时访问,节点集合对于用户来讲都是一个整体
- 例子
- 终端用户不知道计算发生在什么地方
- 用户也不知道与应用相关的数据存储在什么地方
- 数据拷贝完全是隐藏的(核心是分布式透明性)
- 挑战
- 部分失效:不可避免地,分布式系统的某一部分会失效,部分失效以及恢复很难做到对用户的透明性
分布式系统中的8个谬误
- 网络是可靠的
- 延迟为0
- 带宽无限
- 网络安全
- 网络拓扑结构不会变
- 唯一管理员
- 传输代价为0
- 网络是同构的(对等实体?)
分布式系统、并行系统、集中系统
- 分布式系统与并行系统交叉:MPI/MapReduce
- 并行系统与集中系统交叉:OpenMP/TBB
相对于分布式系统,集中式系统的特性如下:
- 仅由单一组件构成
- 单个组件被用户一直占用
- 所有资源都是可访问的
- 软件运行在单个进程中
- 单点控制
- 单点失效
分布式系统与并行系统的区别:主要在于软件
- 并行系统各结点工作都是一样的(平行结构),软件也相同
- 但分布式系统是一个复杂的拓扑结构(树型结构),每个节点软件不必相同,可以异构
分布式系统的目标
对外是一个整体,从而要使分布式系统具有一定的特性!
- 使资源可访问:让用户方便访问资源
- 透明性:隐藏资源在网络上的分布
- 访问、位置、迁移、重定位、复制、并发、故障、持久化
- 开放性:访问接口的标准化,封闭无法跨越不同组织
- 良好定义的接口、互操作性、可移植性、易实现可扩展性
- 可扩展性:系统在规模、地域、管理上的可扩展性
透明性
完全透明性是不可取的也是难以实现的,主要因为
- 可能隐含通信的性能问题
- 完全隐藏网络和节点的失效是不可能的
- 不能区分失效和性能变慢的节点
- 不能确定系统失效之前的操作是什么
- 完全的透明性可能牺牲性能,暴露系统分布特征
- 保证复制节点与主节点的一致性需要时间(一致性问题)
- 为了容错需要立即将内存修改的内容同步到磁盘上
暴露系统的分布特征有一定使用场景
- 利用基于位置的服务(如:找到附近的朋友)
- 当与不同时区的用户交互时
- 当让用户理解系统发生了什么时,如当一台服务器不响应时,报告失效
结论是分布式透明性是一个较好的属性,但是需要区别对待。
开放性
系统根据一系列准则来提供服务,这些准则描述了所提供服务的语法和语义(标准化)
- 系统应该具有良好定义的接口
- 系统应该容易实现互操作性
- 系统应该支持可移植性
- 系统应该容易实现可扩展性
重点:策略与机制分离 e.g.配置文件
- 实现开放性:策略(具体的实施或实现,能够设置具体是多少)
- 需要为客户端的缓冲数据设置什么级别的一致性?
- 我们允许下载的程序执行什么操作?
- 当出现网络带宽波动的时候如何调整QoS需求?
- 通信的安全水平设置多高?
- 实现开放性:机制(有/没有)
- 允许动态设定缓冲策略
- 支持为移动代码设置不同的信任级别
- 为每个数据流提供可调整的QoS参数
- 提供不同的加密算法
- 策略和机制之间的平衡
- 策略和机制之间分离的越严格,越需要设计合适的机制,这样会导致出现很多配置参数和复杂的管理
- 硬编码某些策略可以简化管理,减少复杂性,但是会导致灵活性降低
可扩展性
- 规模可扩展性:用户数量和进程数量增加
- 计算容量受到CPU性能的限制
- 存储容量局限,包括CPU与磁盘之间的传输速率,存在单点的瓶颈/单点失效
- 网络局限:用户与集中服务之间的网络带宽
- 地理可扩展性:节点之间的最大物理位置
- 不能简单从LAN扩展到WAN:很多分布式系统假设客户端-服务器之间的交互是同步的,即客户端发送请求等待结果。广域环境中的延迟问题限制扩展性
- 管理可扩展性:管理域的数量(访问控制系统、调度规则)
- 计算网格、共享设备
- 文件共享系统(BitTorrent)、P2P电话(Skype)、基于P2P的音频流数据(Spotify)
形式化分析
排队论:M/M/1
- M:到达符合Markov(泊松/指数),到达率\(\lambda\)
- M:处理符合Markov,服务率\(\mu\)
- 1:进程数目
最终会达到一个稳态(进出一样),系统中包含\(k\)个请求的概率
\(\mu p_1=\lambda p_2, p_2\lambda+p_3\mu=\lambda p_3+\mu p_2, \ldots\)
可推得
\(p_k=(1-\frac{\lambda}{\mu})(\frac{\lambda}{\mu})^k\)
最终平均吞吐为\(\lambda\)
扩展技术
隐藏通信延迟:尽量避免等待原程服务对请求的响应->解决地理可扩展性
- 异步通信
- 设计分离的响应消息处理器(分布)
- 但不是所有应用都满足这种模式
- 某些交互式应用的用户发出请求后,处于等待的状态
分布:在多个机器上划分数据和计算
复制和缓存:在多个不同的机器上创建多个数据副本
- 复制文件服务器和数据库
- Web站点进行镜像
- Web缓存:在浏览器或者代理位置
- 文件缓存
复制存在的问题:一致性问题,如果可以容忍不一致,那么可以减少全局同步,但这由应用程序决定
不同的分布式系统
三种类型分布式系统:多核、多处理器、多计算机
分布式共享内存现在已经很少用了
- 集群计算系统:同构(相同OS,近乎相同的硬件),单个管理节点
- 网格计算系统:异构,包含多个组织,容易扩展到广域网环境;为了允许合作,网格通常利用虚拟组织
- 云计算
事务系统(EAI) + 事务处理监控器(TPM)
- 中间件为系统集成提供通信设施
- RPC:请求通过本地调用发出,结果以函数返回值方式接收
- 面向消息的中间件(MOM):Pub, Sub
分布式系统面临的挑战
- 系统设计:正确的接口设计和抽象,如何划分功能和可扩展性
- 一致性:如何一致地共享数据
- 容错:如何保障系统在出现失效情况下正常运行
- 不同的部署场景:集群、广域分布、传感网络
- 实现:如何最大化并行,性能瓶颈是什么,如何平衡负载