首页 > 代码库 > 《大规模分布式存储系统》读书摘记(持续更新)

《大规模分布式存储系统》读书摘记(持续更新)

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选主副本,总控节点和工作节点不需要保持租约

《大规模分布式存储系统》读书摘记(持续更新)