分布式概述
构建分布式系统的目标
- 资源共享
- 协同计算
分布式系统定义
A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages.
分布式系统是指位于联网计算机上的组件仅通过传递消息来进行通信和协调其操作的系统。
分布式特征
并发性
分布式系统中多个程序(进程,线程)并发执行,共享资源
缺乏全局时钟
分布式系统中每个系统都有自己独立的时间,难以全局同步。
故障独立性
某台设备的故障并不会让其他机器马上了解,系统的每个组件出现故障,其他组件仍将继续运行。
分布式系统应用
- WEB搜索(Google)
- 大型联机游戏
- 金融交易
- 区块链
- 分布式数据库
分布式的挑战
异构性
- 网络异构
- 硬件异构
- 操作系统异构
- 编程语言异构
- 开发者实现方案异构
解决方案:
- 中间件(Middleware)
中间件将具体业务和底层逻辑解耦的组件。如Nginx,RPC框架,消息队列等。
- 移动代码(Mobile code)
可以在不同机器间移动执行,如虚拟机,Docker等
开放性
计算机系统的开放性是决定系统能否以不同的方式被扩展和重新实现的特征。开放性的关键在于公开接口。
安全性
- 机密性(防止未经授权的个人访问资源)
- 完整性 (防止数据被篡改和破坏)
- 可用性(防止对所提供服务的干扰)
可伸缩性
资源数量和用户数量激增下,系统的性能仍保持在一定的水平。
设计挑战:
- 控制物理资源代价 如随着用户数的增长,服务器的增长代价不能超过给O(n)
- 控制性能损失 如DNS复杂度不能超过O(logn)
- 软件资源不能被耗尽 如IPv4地址
- 避免性能瓶颈 如某些共享文件不断变大会给读写性能带来瓶颈。
故障处理
- 检测故障(确切检测到远程服务的故障是困难的)
- 屏蔽故障(通过一些操作来尽量降低故障造成的影响)
- 故障容错(无法做到屏蔽时,让用户知道出现问题,由用户自行决定是否继续请求)
- 故障恢复
- 冗余策略(利用冗余组件来实现容错)
并发性
既要考虑数据的一致性又要保证并发性能。
透明性
- 访问透明(用访问本地资源的方式去访问远程资源)
- 位置透明(不关心要访问资源的具体位置)
- 并发透明(多个进程同时访问资源,互不干扰)
- 复制透明(使用多个资源的副本来提高可靠性和性能,用户或者应用程序开发者并不需要了解副本技术)
- 故障透明(在存在故障的情况下,用户和应用仍可完成他们的任务)
- 移动透明(资源或者客户端的移动不影响用户及程序的操作)
- 性能透明(允许系统重新配置改善性能,例如改变负载)
- 扩展透明(允许系统和应用扩大规模无需改变系统的结构和用算法)