知识卡片

强同步与异步复制的取舍,及Max Availability模式的本质

普通读书笔记卡

内容

数据库主备架构在数据同步方式上存在一个无法回避的取舍:强同步模式要求主机必须把数据同步到备机之后才能应答客户端,一旦主备之间网络抖动或备机宕机,主机将无法继续提供服务——这种模式实现了数据的强一致,却以牺牲服务可用性为代价,而且跨机房场景下同步延迟往往大到让这种模式变得不实用;异步复制模式则是主机写本地成功后立即应答客户端、不等待备机确认,一旦主机宕机无法启动,最近这段还没来得及同步的日志就会丢失——这种模式换来了服务的持续可用,代价是牺牲了数据一致性。Oracle提供的Max Availability模式看起来像是一个折中方案,但本质上仍然是异步复制:它平时按强同步运行,一旦备机没有应答,就自动退化为Max Performance(也就是异步)模式,这意味着系统始终存在退化为异步、进而可能丢数据的窗口,只是这个窗口平时不发生而已,并不能算是真正意义上同时兼顾一致性和可用性的方案。这个案例提示了一条判断”折中方案”是否名副其实的方法:一个声称能同时兼顾两个互斥目标的方案,需要仔细审视它在极端情况下到底会退化成哪一种极端策略——如果退化路径始终只倒向其中一端(这里是始终倒向异步/可用性),那么它在本质上仍然是那一端的方案,只是在正常情况下表现得更接近另一端,而不是真正意义上打破了两者的互斥关系。

参考来源

- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.10 架构师需要了解的Paxos原理、历程及实战"节,"2.10.1 数据库高可用性难题"(源文件:_epub-src/OEBPS/Text/Chapter2_10_2.xhtml) - 结论依据:原文说明强同步"牺牲了服务的可用性"、异步复制"牺牲了数据一致性",并指出"Oracle另一个最常用的Max Availability模式,则是一个折中,在备机无应答时退化为Max Performance模式,我认为本质上还是异步复制",直接支撑本卡片结论。 - 原始内容:强同步模式要求主机必须把步到备机之后,才能应答客户端……这种模式实现了数据的强一致,但是牺牲了服务的可用性……Oracle另一个最常用的Max Availability模式,则是一个折中,在备机无应答时退化为Max Performance模式,我认为本质上还是异步复制。