知识卡片
可用性优先于一致性的工程选择
内容
MySQL主从复制无法保证完全一致,半异步在Slave长时间未响应也会退化为异步。Master宕机时切到可能丢数据的Slave?工程实践通常选择切换:牺牲少量一致性换服务持续可用,因为完全不可用的损失远大于可人工修复的少量不一致。发散:遇到必须牺牲一个指标的场景,应回到”每种牺牲的实际业务损失多大、能否事后弥补”上判断。
参考来源
- 位置:第6章《数据库》6.7.3节「三种主从复制方式」(源文件:_epub-src/text/part0033.html)
- 结论依据:原文明确说明半同步复制在Master超时等待Slave太久时会退化为异步复制,无论异步还是半异步都可能在主从切换时丢数据,业务一般做法是牺牲一致性换取高可用性,切换后忍受少量数据丢失再人工修复,直接支持卡片对可用性优先于一致性的工程选择的论述。
- 原始内容:"不是半同步复制就不会丢数据呢?不是的。半同步复制可能退化为异步复制……无论异步复制,还是半异步复制(可能退化为异步复制),都可能在主从切换的时候丢数据。业务一般的做法是牺牲一致性来换取高可用性,即在Master宕机后切换到Slave,忍受少量的数据丢失,后续再人工修复。"