kaiyun 敢说你没遭遇过,主从数据库不一致?

发布日期:2023-12-09 14:21    点击次数:110

[[442979]]

昨天聊了《数据库与缓存一致性问题》,今天聊聊数据库主库与从库的一致性问题。

问:常见的数据库集群架构怎么?

一主多从,主从同步,读写分辨。

如上图:

(1)一个主库提供写劳动;

(2)多个从库提供读劳动,不错加多从库擢升读性能;

(3)主从之间同步数据;

画外音:任何有贪图不要忘了甘心,加从库的甘心,是擢升读性能。

问:为什么会出现不一致?

主从同步随机延,这个时延时间读从库,可能读到不一致的数据。

如上图:

(1)劳动发起了一个写恳求;

(2)劳动又发起了一个读恳求,此时同步未完成,读到一个不一致的脏数据;

(3)数据库主从同步终末才完成;

画外音:任何数据冗余,必将激发一致性问题。

问:怎么幸免这种主从延时导致的不一致?

常见的形势有这样几种。

有贪图一:忽略。

任何脱离业务的架构遐想王人是耍流氓,绝大部分业务,举例:百度搜索,淘宝订单,QQ音书,58帖子王人允许短时刻不一致。

画外音:若是业务能继承,最珍贵此法。

若是业务简略继承,别把系统架构搞得太复杂。

有贪图二:强制读主。

如上图:

(1)使用一个高可用主库提供数据库劳动;

(2)读和写王人落到主库上;

(3)采纳缓存来擢升系统读性能;

这是很常见的微劳动架构,不错幸免数据库主从一致性问题。

有贪图三:采纳性读主。

强制读主过于罪戾,毕竟只好一丝写恳求,很短时刻,可能读取到脏数据。

有莫得可能已毕,只好这一段时刻,可能读到从库脏数据的读恳求读主,闲居读从呢?

不错诈欺一个缓存纪录必须读主的数据。

 kaiyun

如上图,当写恳求发生时:

(1)写主库;

(2)将哪个库,哪个表,哪个主键三个信息组装一个key开辟到cache里,这笔纪录的超平人世,开辟为“主从同步时延”;

画外音:key的形势为“db:table:PK”,假定主从延时为1s,这个key的cache超平人世也为1s。

如上图,当读恳求发生时:

这是要读哪个库,哪个表,哪个主键的数据呢,也将这三个信息组装一个key,到cache里去查询,若是,

(1)cache里有这个key,证实1s内刚发生过写恳求,数据库主从同步可能还莫得完成,此时就应该去主库查询;

(2)cache里莫得这个key,证实最近莫得发生过写恳求,此时就不错去从库查询;以此,保证读到的一定不是不一致的脏数据。

转头

数据库主库和从库不一致,常见有这样几种优化有贪图:

(1)业务不错继承,系统不优化;

(2)强制读主,高可用主库,用缓存提高读性能;

(3)在cache里纪录哪些纪录发生过写恳求,来路由读主也曾读从;

翰墨很短,但愿能给各人一些启示。

【本文为51CTO专栏作家“58沈剑”原创稿件,转载请联系原作家】

戳这里,看该作家更多好文