系统的可用性
什么是可用性
系统处在正常工作状态的时间的比例。
业务方对系统可用性“5个9”的衡量
MTTF/MTTR
mean time to Failure;
Mean time to repair;系统一旦出现故障需要多长时间让它重新恢复工作。
“100年不出故障,出故障后1小时就修好 :D“
failure
谷歌是如何做到不出错的?在硬件的基础之外?High avaliability -Fault Tolerance
解决方法: 用若干台:D
一台99.9%
两台:1-(1-99.9%)^2 就是5个9了:D
MongoDB的容错方案
主从节点始终保持一致。
Hearbear:我还活着:D
新的Primary广播他的身份。
这种切换是全自动的,无干预 。
From 用户,抖动。
为什么要一主两备或更多?
为什么不可以一主一备?
备机和主机出现争执,即timeout只能做估计,而不能做诊断。
那为什么一主两备可以解决呢?(多数派)
当其中一个备发现没心跳的时候它会和另一个备进行商量。当有两个备都认为它是主了,他就是名副其实的主,另一个想当也当不了。
可靠性高的:一主四备。5个机器中3个正常就行了,即可tolerate两个。
如何实现节点间的决议–共识机制
多数派Protocol的实现是基于 Consensus.
s5还认为自己是leader,接收了用户的一些请求和更新。这种更新是不会落地,而是会被取消掉的。找到别人的最后一个第二轮。
MongDB:RaFt协议实现高可用
共识算法的性能代价
即必须多轮通讯才能完成一次更新操作,所以因为这个机制的出现,用户等待的时间就延长了。
从节点未Apply, MongoDB会有用户的一些相关设置,如是否允许用户读脏数据
Mongo提供了什么配置可以实现Linearizability?(即MongoDB的一致性模型)
Look into Mongo DB manual,
Write Concerns/Read Concerns/Read Preference
读:primary/secondary
写:写入结果啥状态返回
读:读取的数据版本的状态