什么是分布式系统?
- 多个计算机进行协作
- 大规模数据库,P2P文件共享,MR,DNS等等
- 许多重要的基础设施是分布式的
为什么要使用分布式?
- 连接物理隔离的实体
- 通过隔离取得安全性
- 通过副本机制容忍故障
- 可水平扩展资源提高生产力
实现中的困难?
- 许多并发问题
- 处理局部故障
- 难以实现理论性能
主题
关于分布式程序背后的三大抽象方面:
- 存储
- 通信
- 计算
话题:实现
RPC ,threads,concurrency control
话题:性能
目标:可伸缩的吞吐量,n台服务器提供对应n台对应的性能总量(cpu,disk,net)
困难点: 难以实现线性提升至N倍,原因如下:
1.负载均衡, stragglers(可能是负载过高的某一节点)
2.非平行化的代码: 初始化关系,或有相互作用
3.由于共享资源产生瓶颈:例如网络
话题:故障容忍
当集群的规模很大,网络结构很复杂时,总会有一些节点故障,而我们需要让应用能够隐藏这些故障,通常需要:
1.可用性:整个集群仍可提供服务,使用存储的数据
2.耐久性:当故障节点恢复时,相关的数据也会随之恢复
一个好的解决方案: 冗余的服务。当一个实例崩溃时,客户端可执行另一个副本实例
话题:一致性
通用的基础架构需要提供明确的行为,例如Get操作产生的值要来自于最近的Put操作,但是达到这样好的行为时困难的。
冗余的(副本)服务之间很难保证(eg.数据)完全相同,如:
1.客户端可能中途崩溃在由多步组成的更新操作
2.服务端可能