分布式系统笔记(三)
lecture 7 Fault Tolerence Raftlecture 8 Zookeeperlecture 9 More Replication CRAQlecture 10 Cloud Replicated DB Aurora
分布式系统笔记(三) lecture 7 Fault Tolerence RaftRaft的一些规则:
应该接受应该使用日志时间最长的服务器作为领导者;
提出一个问题:why not longest log as leader?
选举限制 election restriction
对某些候选人发送赞成票,仅在候选人具有更高的任期在上一个日志条目中或相同的上一个术语相同的上一个日志条目,并且日志条目大于等于接收到的服务器请求
日志备份加速策略
如果追随者follower拒绝追加条目,则条目会回复
持久性 persistence —易失性non-volatile storage
持久性的含义是:如果您更改其中一项,你应该将其标记为持久性,并将其写入服务器或磁盘中等其他非易失性存储。这将确保如果服务器重新启动,它将能够找到这些信息并将其重新加载到内存中,这使得我们允许服务器在发生崩溃时就能从中断处继续取回。
一个常见的故障模式是整个集群的电源故障,当发生电源故障后,我们希望在恢复电源后我们的整个集群可以恢复到断电前的状态,要求重新启动服务器所需的状态,这是观察持久性情况的一种方式。
保留日志的原因是:这是应用程序状态的唯一记录。
the cose of synchronous 同步成本
人们除了保持同步,另一个经常使用的技巧是尝试批量处理;
提出问题:为什么提交索引会持续应用到下一个索引并匹配索引
日志压缩和快照 log compaction and snapshots
日志中的某些点的状态是可以互换的
日志中有很多空间,但也可以将其压缩为一个表中的条目
因此我们添加了raft是否要求应用程序提供的快照引用
线性化能力 linearize ability
执行历史记录(一个序列)是可线性化的
读取在写入之后进行
lecture 8 Zookeeper
Zookeeper: 分布式应用程序协调服务软件,以Fast Paxos算法为基础;
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口
可线性化 linearizable
谈论的是写入和读取 数据的顺序
规则:只有一个总的操作顺序,不允许不同的客户看到;
服务器检测重复数据的机制:重新发送服务器最初发送的上一个答案和问题
1、API的外观问题,不确定名称
2、Performance 性能
Zookeeper有两个线性化的保证guarantees:
1、linearizable rights 权限线性化。Zookeeper不是严格的读写
2、FIFO 客户端顺序
读取的含义:如果客户端以某种顺序再次发出读取序列。客户会依次读取事件,先第一件事,再第二件事,再第三件事…这些读取发生在日志中的某个特定点,读取的过程中要注意观察这些点的位置
命令读取的内容只能按时间前进或仅按时间前进;
权限是读取和写入FIFO客户端命令适用于所有客户端
在读取信息的过程中,某些副本的某些内容必须等到是 leader 才可以进行读操作;因此导致Zookeeper的工作方式不保证我我们看到最新的数据
我们需要做的是让客户端请求按顺序获取数据
主服务器要首先更新配置文件,它所要做的是删除准备好的文件,然后将各种文件写入到Zookeeper并保存配置数据的文件,当更新为完全组成该配置文件的时候,再次创建就绪文件;
每个客户端请求都必须适合日志中的某个位置,我们在日志中设置了watch,并且保证会收到如果有人删除了该文件并且我们可以通知(触发通知)的话,通知将在读取之前在客户端出现,日志中随后的所有内容都会在我们获得
lecture 9 More Replication CRAQ
重点讨论的内容:不太好的关于Zookeeper的关于其API(应用程序接口)的设计
Zookeeper要成为一个真正的分布式服务系统需要执行的重要任务
Zookeeper的接口可以确保每个副本与所有副本一次又一次的处理权限流、以相同的顺序执行权限、以便副本在其中进行排序;
Zookeepe实际上为我们提供了编写容错测试和设置的工具;
Z节点
Zookeeper公开的RPC接口的操作是排序的,我们希望对文件进行的操作是在其中创建RPC的地方创建RPC名称,确实是一个完整的路径名称、一些初识数据和一些组合
放置键值对
选举是适应未知数的合理策略
可以通过删除文件来释放锁;
读取发生在权限之间的确定点上;
命名系统:
第一步:创建一个顺序文件
(文件死亡后,会自动删除其临时文件)
一般都会选择检查所有的内容,防止意外的事情发生
线程系统的不同上下文和可伸缩锁
线程的随机死亡 ,每个人都会正确使用互斥锁,我们将获得原子序列的原子性;持有锁和释放锁
系统链
针对网络分区,如果没有针对拆分的防御措施,意味着它在实践中是无法使用的;
配置管理器:工作是监视程序的活跃性
链复制 chain replication ;
客户端发出的请求都会收到最慢的服务器的限制 ;
lecture 10 Cloud Replicated DB Aurora
获得高性能可靠的数据库作为云基础架构的一部分
我们还可以使用通用存储来提高性能和容错能力;
Elastic cloud 弹性云
通常网站是由一组无状态的网络服务器组成的,当它们需要获得数据时,开始与后端数据库进行对话
EBS 弹性块存储
事务和崩溃恢复
数据库通常具有页面缓存
每一个新加的日志存储都必须附加到存储中
数据库服务器需要执行仲裁输入
亚马逊将数据库分为六个单元,每10G的数据需要20G的数据库来存储;



