通常,分布式系统须要支持如下特性:git
下面分别讨论。github
一旦受权,能够访问环境中的任何资源。web
资源:包括硬件(e.g. printer, scanner, camera)、软件(服务)、数据(file, database, web page) 。服务器
如资源管理器控制资源的访问:网络
新共享资源添加并被各类客户程序使用的(难易)程度。并发
如支持异构资源的添加和使用:框架
分布系统中的各个组成部分能够在并发的过程当中被执行。分布式
如:性能
资源定义同上。code
主要强调“伸”;偶尔也强调“缩”。
在资源和用户数较大增加的状况下,系统性能仍能维持甚至提升。
一般表现为:
如:
错误发生时,系统可以继续工做的能力。
基于这样一个假设:硬件、软件、网络的错误不可避免。
要容错,就要先知道有哪些错误(故障),再针对故障类型一一解决。
分布式系统中的典型故障以下:
故障类型 | 说明 |
---|---|
崩溃性故障 | 服务器停机,可是在停机以前工做正常 |
遗漏性故障 | 服务期不能响应到来的消息。包括不能接受、不能发送 |
定时故障 | 服务器的响应在指定时间间隔以外 |
响应故障 | 服务期的响应不正确。包括响应的值错误、偏离了正确的控制流 |
随意性故障 | 服务器可能在随意的时间产生随意的响应 |
其中,随意性故障是最严重的故障,也被称为拜占庭故障
。当发生故障时,服务器可能产生它历来没有产生过的输出,可是又不能检测出错误。更坏的状况是,发生故障的服务器恶意的与其余服务器共同工做来产生恶意的错误结果。
若是系统是容错的,那么它能作的最好的事情就是对其余进程隐藏故障的发生。因为故障没法避免,咱们只能依靠冗余来掩盖故障,包括:
部分书籍将物理冗余与软件冗余分开,本质上没法彻底分开,由于软件冗余可能在部署在单机或多机上。这里将两者统一为物理冗余。
则针对各故障,可取的主要解决方案为:
网络环境对于用户和应用程序而言,应该是一个总体,而不是一个互相协做的简单的构件集合。包括多项性质:
位置透明性、迁移透明性、重定位透明性是对命名系统的基本要求。
本文连接:分布式系统的基本特性
做者:猴子007
出处:monkeysayhi.github.io
本文基于 知识共享署名-相同方式共享 4.0 国际许可协议发布,欢迎转载,演绎或用于商业目的,可是必须保留本文的署名及连接。