定义:html
分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像是单个相关系统。程序员
目标:web
使资源可访问
透明性
开放性
可扩展性算法
经济性 | 微处理器能提供比大型机更好的性价比 |
---|---|
速度 | 分布式系统能提供比大型机更强的计算能力 |
固有的分布性 | 有一些应用包含空间上分离的机器 |
可靠性 | 当某台机器崩溃时,整个系统仍能正常工做 |
可扩展性 | 计算能力逐步增长 |
透明性
定义:编程
将分布式系统中的进程和资源实际上在多台计算机上分布这样一个事实隐藏起来,若是一个分布式系统可以在用户和应用程序面前呈现为单个计算机系统,这样的分布式系统就称为是透明的。小程序
类型:缓存
透明性 | 说明 |
---|---|
访问 | 隐藏数据表示形式的不一样以及资源访问访问的不一样 |
位置 | 隐藏资源所在位置 |
迁移 | 隐藏资源是否移动到另外一个位置 |
重定位 | 隐藏资源是否在使用过程当中移动到另外一个位置 |
复制 | 隐藏是否对资源进行复制 |
并发 | 隐藏资源是否由相互竞争用户共享 |
故障 | 隐藏资源的故障和恢复 |
透明度安全
咱们不可能在全部状况下把全部分布状况都对用户屏蔽地严严实实的。这样不少时候会影响系统的性能,所以咱们须要在高度的透明性和系统性能之间权衡获得折中的方案服务器
开放性网络
一个开放的分布式系统,它根据一系列准则来提供服务,这些准则描述了所提供服务的语法和语义。在分布式系统中,服务一般是经过接口指定的,而接口通常是经过接口定义语言(IDL)来描述的。
有能力和其余系统进行服务上的交互,无论底层环境:
至少使分布式系统独立于底层环境的异构性
分布式操做系统
配置在分布式系统上的操做系统,可以直接对分布式系统中的各类资源进行动态分配,并能有效地控制和协调分布式系统中各任务的并行执行,同时还向用户提供了一个方便的、透明的使用整个分布式系统的界面。
网络操做系统
是在网络环境下实现对网络资源的管理和控制的操做系统,是用户与网络资源之间的接口。网络操做系统是创建在独立的操做系统之上,为网络用户提供使用网络系统资源的桥梁。在多个用户争用系统资源时,网络操做系统进行资源调剂管理,它依靠各个独立的计算机操做系统对所属资源进行管理,协调和管理网络用户进程或程序与联机操做系统进行交互。
基于中间件的系统
系统名称 | 系统描述 | 主要目标 |
---|---|---|
DOS | 紧耦合,管理多处理器系统和同构式多计算机系统 | 隐藏和管理硬件资源 |
NOS | 松耦合,管理异构式多计算机系统 | 向远程客户提供本地服务 |
MIddleware | 位于NOS通用服务实现层之上的附加层,屏蔽了底层的异构性和具体的通讯协议细节,为应用程序员提供方便的编程模型。 | 提供分布透明性 |
咱们须要将策略与机制相分离,理想上,分布式系统仅提供机制。
集中式体系结构
请求-响应 模型
非集中式体系结构
结构化 P2P 结构:节点组织分布遵循特定分布式数据结构
非结构化 P2P 结构:节点随机选择邻节点
混合 P2P 结构:一些节点是有序组织的,另外一些是随机选取的
混合体系结构
服务器-客户端和 P2P 结合
边缘服务器架构
客户-服务器模式
对等模型:
选择特定节点来执行特定工做
在许多状况下,分布式系统/应用程序是根据特定的体系结构样式开发的。在全部状况下,所选择的样
式可能不是最优的→须要(动态地)调整中间件的行为。中间件的一个重要目的是提供必定程度的透明
性,也就是必定程度上向应用程序隐藏数据处理和控制的分布性。
进程:进程是正在运行的程序的实例,是系统进行资源分配和调度的一个独立单位。
线程:线程是CPU调度和分派的基本单位。
强迁移 vs 弱迁移
客户端没法定位服务器
举例:服务器关闭;当客户机使用旧版本的客户机存根编译时,服务器会进化(安装新版本的接口并生成新存根)
解决方案:使用特殊代码做为过程的返回值以指示失败;使错误引起异常或信号
客户端到服务端的请求消息丢失
解决方案:内核在发送消息时启动计时器:
若是计时器在应答或ACK返回以前过时:内核从新传输
若是消息真的丢失:服务器不会区分原始传输和从新传输 “一切正常”
若是许多请求丢失:Kernel放弃并错误地得出服务器已关闭的结论 咱们返回到“找不
到服务器”
服务器端到客户端的响应消息丢失
解决方案:内核在发送消息时启动计时器:
若是计时器在回复前过时:从新传输请求(不能肯定为何没有回复,是回复或者请求丢失了仍是服务器太慢了?)
若是服务器仅仅是慢:那么进程会被执行不少次(若是请求不是幂等的,例如汇款)
解决方法:客户端的内核为请求分配序列号,以容许服务器的内核区分重传和原始的重传
服务器在接受一个请求后崩溃
等待服务器从新启动,而后重试该操做。保证RPC至少执行了一次(至少一次语义)
当即放弃并报告失败。保证RPC最多执行一次(最多执行一次语义)
客户得不到帮助。不保证任何内容(RPC可能在从0到大量的范围内执行)。易于实施
客户端在发送一个请求后崩溃
解决方案:
消灭:检查日志,杀死孤儿;
轮回:客户端重启时,广播新epoch到来时,终止远程计算;
温柔轮回:找不到远程计算的全部者的计算被终止;
过时:
客户端定位服务器的方式有两种:
优点:
缺点:
见上
见上
数据流是支持等时数据传输的面向链接的通讯设施。
逻辑时钟与物理时钟
时钟同步算法:
集中互斥:
该方法仿照单处理器系统,选举一个进程做为协做者,不管什么时候一个进程要访问共享资源,它都要向协
做者发送一个请求消息,说明它想要访问哪一个资源并请求准许,若是当前没有其余进程访问资源,协做
者就发送准许的应答消息。
优点:
缺点:
分布式算法:
当进程想要进入临界区去访问一个资源的时候:
当一个进程从其余进程接收到一个请求消息后:
问题:
令牌环算法:
在逻辑环中组织进程,并让令牌在它们之间传递。持有令牌的人能够进入关键区域(若是它想的话)。
若是令牌丢失了,则它必须从新生成令牌,但检测令牌丢失时很困难的,一小时没有发现令牌并不意味
着它就丢失了,也许某个进程还在使用它。假若有某个进程崩溃,咱们要求每一个进程在收到令牌后发出
确认信息,那么当一个进程的将令牌传递到它临近进程但没有获得回复,就会检测到该进程奔溃,此
时,就能够将崩溃进程从组中删除,将令牌传递给崩溃进程的下一个。
算法要求某些进程充当协做者。问题是如何动态地选择这个协做者的过程。
1. 欺负式算法:
每一个进程都有一个相关的优先级(权重)。应始终选举最优先的进程为协做者。咱们如何找到最权重最大的进程?
2. 环算法:
过程优先级是经过将过程组织成(逻辑)环来得到的。应选举具备最高优先权的进程为协做者。
优点:
不足:
一致性模型:
一致性模型实质上是进程和数据存储之间的一个约定,即,若是进程赞成遵照某些规则,那么数据存储将正常运行。
以数据为中心的一致性模型:
严格一致性
线性一致性
执行的结果应当知足下面的原则:
然而,这种方式须要根据时间戳进行同步,代价不菲,且仅用于程序的正式验证。
顺序一致性:
因果一致性:
FIFO 一致性:
弱一致性:
释放一致性:
不使用同步操做的一致性模型
一致性 | 描述 |
---|---|
Strict | 全部共享访问的绝对时间顺序很重要 |
Linearizability | 全部进程必须以相同的顺序查看全部共享访问。此外,根据(非惟一的)全局时间戳对访问进行排序 |
Sequential | 全部进程都以相同的顺序查看全部共享访问。访问未及时排序 |
Causal | 全部进程都以相同的顺序查看因果关系相关的共享访问。 |
FIFO | 全部进程都按使用顺序查看彼此的写入。来自不一样进程的写入可能并不老是按此顺序显示 |
使用同步操做的一致性模型
一致性 | 描述 |
---|---|
Weak | 只有在同步完成后,共享数据才能被认为是一致的 |
Release | 当关键区域退出时,共享数据被保持一致。 |
Entry | 当输入关键区域时,与关键区域相关的共享数据保持一致。 |
以客户为中心的一致性:
以客户机为中心的一致性:保证单个客户机访问数据存储的一致性
要求客户在读写一个复制的数据项以前向多个服务器提出请求,并得到它们的许可,以肯定数据的最新版本。(联系的服务器数量至少是半数加1)也叫基于多数表决的协议。
将系统从当前的错误状态回到先前的正确状态。
当系统进入错误状态时,不是回退到之前的检查点出的状态,而是尝
试从能够继续执行的某点开始把系统带入一个正确的新状态。前向错误恢复机制的关键在于它必须
预先知道会发生什么错误,这样才有可能纠正错误并转到新的状态。
一种计算能力,提供了计算资源与底层结构之间的抽象,使用户能够经过网络方便的,按需的使用,来对一个共享的资源池进行迅速配置、部署和使用,而且只须要不多的管理和交互。
按需使用
云计算特色:
虚拟化使由位于下层的软件模块,将其封装或抽象,提供一个物理或软件的接口,使得上层的软件能够直接运行在这个虚拟的环境上,和运行在原来的环境上同样。
优点:
OpenStack是一个开源的云计算管理平台,主要为了管理:计算、存储、网络三个方面的资源,是IaaS组件,这些资源能够经过OpenStack进行配置分配并提供给上层应用或用户去使用。
利用靠近数据源的边缘地带来完成的运算程序。
优势: