什么是分布式系统?
- 多计算机协作
- DNS,P2P的文件共享
- 大型数据 MapReduce,以及很多的关键性基础架构都是分布式的。
为什么要分布式?
- 去连接物理上分离的实体
- 去通过隔离获得安全性
- 去通过复制来容错
- 去通过并行的CPU/mem/disk/net来达到横向扩展
但是这很复杂, 许多并发的组件,必须处理好部分组件失败的情况,也 很难去了解性能的瓶颈
MAIN TOPICS
关于抽象,就是隐藏了分布式应用程序的复杂性,有三大类抽象:
- 存储
- 通信
- 计算
关于分布式有一堆topic被反复探究。
实现
- RPC
- 线程
- 并发控制
性能
期望得到可伸缩的吞吐量,N台 服务器通过并行的CPU,磁盘,网络提高N倍吞吐量,因此处理更高的负载只需要买更多的计算机,但是实际上扩展会变得越来越难,如何负载均衡,如何隐藏共享资源,如何处理无法并行处理的部分。
容错
1000台服务器,复杂的网络 总是会出现某些服务挂掉了,我们希望在应用程序程序隐藏这些失败的情况
我们通常希望用下面两个来度量:
- 可用性 – 我可以一直使用我的文件无论是否失败
- 持久性 – 当故障被修复了,我的文件可以继续使用
容错的思路:
通过副本服务器来解决