数据库软件架构,到底要设计些什么?( 二 )


这种方法大家用的比较多,存在两个缺点:
(1)从库越多,同步越慢;
(2)同步越慢,数据不一致窗口越大;
第三种增加系统读性能的方式是, 增加缓存  。
常见的缓存架构如下:
 

数据库软件架构,到底要设计些什么?

文章插图
 
(1)上游是业务应用;
(2)下游是主库,从库(读写分离),缓存;
如果系统架构实施了 服务化 :
(1)上游是业务应用;
(2)中间是服务;
(3)下游是 主库,从库,缓存 ;
数据库软件架构,到底要设计些什么?

文章插图
 
业务层不直接面向db和cache,服务层屏蔽了底层db、cache的复杂性 。
不管采用主从的方式扩展读性能,还是缓存的方式扩展读性能,数据都要复制多份(主+从,db+cache),一定会引发一致性问题 。
四、如何保证一致性?
主从数据库的一致性,通常有两种解决方案:
(1)中间件
数据库软件架构,到底要设计些什么?

文章插图
 
如果某一个key有写操作,在不一致时间窗口内,中间件会将这个key的读操作也路由到主库上 。
(2)强制读主
数据库软件架构,到底要设计些什么?

文章插图
 
“双主高可用”的架构,主从一致性的问题能够大大缓解 。
第二类不一致,是db与缓存间的不一致 。
数据库软件架构,到底要设计些什么?

文章插图
 
这一类不一致,《缓存架构,一篇足够?》里有非常详细的叙述,本文不再展开 。
另外建议,所有允许cache miss的业务场景,缓存中的KEY都设置一个超时时间,这样即使出现不一致,有机会得到自修复 。

【数据库软件架构,到底要设计些什么?】


推荐阅读