首页 > 代码库 > 《大规模分布式存储系统》读书摘记(持续更新)
《大规模分布式存储系统》读书摘记(持续更新)
3 分布式系统
3.5 容错
故障检测:
- 心跳协议;
- 当机器发生故障时,需要将上面的服务迁移到其他服务器上,为了保证强一致性,需要确保故障机器不再提供服务;
- 主要问题:正常机器和故障机器之间需要对“故障机器是否应该被认为发生故障而停止服务”达成一致。异步网络中多态机器无法达成一致。
- 租约:带有超时时间的一种授权。考虑一个提前量。P51
故障恢复:
- 分布式存储系统分为:单层结构和双层结构。一般都为单层,每个数据分片维护多个副本;Bigtable为双层,存储和服务分开,服务层只有一个副本。
- 单层结构系统维护多个副本,贮备副本之间通过操作日志同步。
- 两层结构系统将所有数据持久化写入底层的共享分布式文件系统,每个数据分片同一时刻只有一个提供服务的节点。
- 故障检测和故障恢复过程中,不能提供写服务和强一致性读服务。故障检测事件较长,一般为几秒到十几秒,故障恢复时间较短,两层结构故障恢复只是将数据索引加载到内存中,而不是数据。
- 为了实现高可用性,总控节点也需要一个备机。
3.6 可扩展性
总控节点:
- 一般分布式系统中总控节点只需维护数据分片的位置信息,并执行调度,分布式文件系统中还需要维护文件系统目录树,所以内存容量可能会优先成为瓶颈。
- 如果总控节点成为瓶颈,可以采用两级结构。在总控机与工作机之间增加一层,虽然看似增加了一次网络请求,但是客户端总是能够缓存总控机上的元数据,因此并不会带来额外的开销。
数据库扩容:
- 假设数据库中有3张表格,首先根据业务将三张表格垂直拆分到不同的DB中,再将每张表通过哈希的方式水平拆分到不同的存储节点。每个拆分后的DB通过主从复制维护多个副本,且允许分布到多个数据中心。
- 通常采用双倍扩容,将每个分片拆分为两个分片。
异构系统:
- 同构系统:将存储节点分为若干组,每组内的节点服务相同的数据,一个节点为主节点,其余为从节点。这样的系统的问题在于增加副本时要迁移的数据量非常大,时间长,在迁移的过程中很有可能存储节点再次发生故障。所以这样的节点很难做到自动化。
- 异构系统:每个分片的副本可以分布到集群中的任何一个存储节点。发生故障时,原有的服务有整个集群的存储节点来恢复。由于整个集群参与恢复数据,故恢复时间短,集群越大,效果越明显。
3.7 分布式协议
两阶段提交协议(2PC):
- 保证跨多个节点操作的原子性,实现分布式事务
- 两类节点:协调者(一个),事物参与者(多个)
- 两个阶段:①请求提交。协调者通知参与者准备提交或者取消事务,然后进入表决过程。在表决阶段,参与者将告知协调者自己的决策(同意或取消)。②当且仅当所有参与者同意提交事务,协调者才通知所有的参与者提交事务,否则通知取消事务。
- 两阶段提交协议是阻塞协议,执行过程中需要锁住其他更新,且不能容错,大部分分布式系统都敬而远之,放弃对分布式事务的支持。
Paxos协议:
- 解决多个节点之间一致性问题(通过操作日志同步数据)
- 主节点故障,多个备节点提议自己成为主节点,Paxos协议保证所有节点最终达成一致。
- ........
Paxos与2PC:
- Paxos用于保证一个数据分片的多个副本之间的数据一致性(尤其分布在不同的数据中心时)
- 2PC用于保证多个数据分片的操作的原子性(多态服务器上的操作要么全部成功要么全部失败)
- Paxos的两种用法:①实现全局的锁服务或者命名和配置服务(Google Chubby以及Apache Zookeeper)②将数据复制到多个数据中心(Google Megastore以及Google Spanner)
- 2PC与Paxos结合使用:2PC保证多个数据分片上的操作的原子性,Paxos保证一个数据分片的多个副本之间的一致性。Paxos解决2PC协议中协调者宕机的问题,当协调者出现宕机时,Paxos选举出新的协调者继续提供服务
跨机房部署:
- 集群整体部署(较常见),每个机房一个总控节点
- 单个集群跨机房部署,总共一个总控节点
- Paxos选主副本,总控节点和工作节点不需要保持租约
《大规模分布式存储系统》读书摘记(持续更新)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。