什么是分布式系统?
多台协同计算机,用于大型网站的存储、MapReduce、对等共享和
许多关键的基础设施都是分布式的
为什么要建立分布式系统?
1.通过并行增加容量 (增加性能,例如更快的响应速度,更大的存储空间)
2.通过复制容忍故障 (增加容错)
3.将计算物理上靠近外部实体
4.通过隔离实现安全 (一致性)
分布式难点
想要高性能,就需要让数据分片存在多个服务器上,
更多的服务器,意味着必须要有容错,因为出错成了大概率事件
很好的容错就需要主从复制,将数据复制多份来做容错
数据复制多份就带来了一致性的问题。
做更多的通信来保证一致性,又会产生最初的性能问题
分布式问题主要围绕着如何解决以下几个问题的平衡
- 性能提升
可拓展的吞吐量,意思就是有N台机器就能带来,N倍的性能提升 - 容错
1000台的机器意味着总是会有机器挂掉,需要一个办法能有效的解决-复制数据 - 一致性
通用基础架构需要定义明确的行为,一致性和性能跟容错总会有冲突,更多的分片意味着一致性问题的产生,更强的一致性意味着更多的通信
1.解决容错的办法-Primary/Backup Replication(主从复制)
主从复制能解决什么样的问题? “停机问题” 例如一台机器因为各种原因挂掉
主从复制有两种方法
1.状态转移
主备份执行服务,主备份将新的状态发送给子节点 ,但状态可能很大,无法通过网络传输
2.状态机复制
客户端发送操作给主节点,主节点按序号将操作排序,并且发送备份
所有从节点按顺序执行所有的操作,如果所有节点有相同的开始状态,相同的操作,相同的顺序,都有着不可改变的特性,那么最终他们的状态是一样的
发送操作往往需要的发送的数据比较小,不会造成网络拥堵,但是一般来说更难维护正确的结果
主从复制需要解决的问题
1.需要复制什么状态?
2.主节点需要等待子节点备份完成么?
3.什么时候切换的子节点?
4.切换时异常可见么
5.如何加速替换备份过程?
在哪个层级做状态同步?
应用层级? 操作系统层?
gfs是这样做的:
网友评论