分布式系统设计的挑战:
异构性:
即有区别,包含下列系统:
- 网络
- 硬件
- OS
- 编程语言
- 不同开发者的实现
中间件:一个软件层,提供一个编程抽象,并对底层网络、硬件、操作系统和编程语言异构性的屏蔽
异构性的解决需要中间件,而它还为服务器和分布式应用的编程人员提供了一致的计算模型。
移动代码:能从一台计算机发送到另一台计算机,并在目标机器上运行的代码
开放性:
决定系统是否能以各种不同的方式扩展和重现。
- 开放系统特征是它们的主要接口是对外发布的
- 开放分布式系统是基于提供一致的通信机制和已发布访问资源共享的接口
- 开发分布式系统能用不同的异构硬件和软件构造,能通过测试正常工作
安全性:
包含机密性(防止泄露给未授权的人)、完整性(防止改变或讹误)、可用性(防止对访问资源的手段的干扰)。
而下面的挑战仍没有满足:
- DoS
- 移动代码安全
可伸缩性:
若用户数量和资源数量激增,系统仍能保持有效,则该系统是可伸缩的。挑战有:
- 控制物理资源开销:一般来说n葛用户的系统成为可伸缩系统,物理资源应该是O(n),但是这很难达到。
- 控制性能损失:管理数据,假设采用层次算法,访问的时间为O(log n),数据数量增加也会导致性能丢失。一个可伸缩的系统,最大性能丢失应不比这个差。
- 防止软件资源耗尽:一个例子是IPv4的地址资源被耗尽,所以出现IPv6,然而也很难预测未来的需求。
- 避免性能瓶颈:算法应该是分散的,避免性能瓶颈。例子有:数据库/域名系统的分片分区。
故障处理:
- 故障检测:故障在系统中是部分的,有些故障能检测到,挑战是如何在有故障出现的情况进行管理
- 掩盖故障:有些故障能被隐藏起来或降低严重程度。例子有:消息重传,文件写入冗余
- 容错:检测并隐藏大量错误是不可能的,所以系统被设计成容错的,用户需要容忍错误
- 故障恢复:崩溃后,永久数据的状态能被恢复或回滚
- 冗余:利用冗余组件让服务实现容错
分布式系统还要提供高可用性,而可用性是指系统可用时间的比例的度量指标
并发性:
涉及资源共享的问题,并保证在并发环境下操作正确,操作必须在数据一致基础上保证同步(如OS里的信号量)
透明性:
定义为对用户和应用程序员屏蔽分布式系统的组件的分离性,系统被认为是一个整体,而不是独立组件集合。
包含:访问透明性、位置透明性、并发透明性、复制透明性、故障透明性、移动透明性、性能透明性、伸缩透明性。前两个最重要,可认为是网络透明性。
QoS(服务质量):
服务质量包括:可靠性、安全性、性能,而满足变化的系统配置和资源可用性的适应性也是一i给方面。