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沈剑”原创稿件,转载请联系原作家】
戳这里,看该作家更多好文