这种方法大家用的比较多,存在两个缺点:
(1)从库越多,同步越慢;
(2)同步越慢,数据不一致窗口越大;
第三种增加系统读性能的方式是, 增加缓存 。
常见的缓存架构如下:
![数据库软件架构,到底要设计些什么?](http://img.jiangsulong.com/220403/12451Q193-11.jpg)
文章插图
(1)上游是业务应用;
(2)下游是主库,从库(读写分离),缓存;
如果系统架构实施了 服务化 :
(1)上游是业务应用;
(2)中间是服务;
(3)下游是 主库,从库,缓存 ;
![数据库软件架构,到底要设计些什么?](http://img.jiangsulong.com/220403/12451S155-12.jpg)
文章插图
业务层不直接面向db和cache,服务层屏蔽了底层db、cache的复杂性 。
不管采用主从的方式扩展读性能,还是缓存的方式扩展读性能,数据都要复制多份(主+从,db+cache),一定会引发一致性问题 。
四、如何保证一致性?
主从数据库的一致性,通常有两种解决方案:
(1)中间件
![数据库软件架构,到底要设计些什么?](http://img.jiangsulong.com/220403/12451TV2-13.jpg)
文章插图
如果某一个key有写操作,在不一致时间窗口内,中间件会将这个key的读操作也路由到主库上 。
(2)强制读主
![数据库软件架构,到底要设计些什么?](http://img.jiangsulong.com/220403/12451S333-14.jpg)
文章插图
“双主高可用”的架构,主从一致性的问题能够大大缓解 。
第二类不一致,是db与缓存间的不一致 。
文章插图
这一类不一致,《缓存架构,一篇足够?》里有非常详细的叙述,本文不再展开 。
另外建议,所有允许cache miss的业务场景,缓存中的KEY都设置一个超时时间,这样即使出现不一致,有机会得到自修复 。
【数据库软件架构,到底要设计些什么?】
推荐阅读
- 资深架构师总结:彻底搞懂NIO效率高的原理
- 在Python中使用Pandas库实现MySQL数据库的读写
- Redis高性能缓存数据库面试题
- 架构师分享:RocksDB使用技巧之分布式存储扩容演进
- 电商网站架构探索之SOA
- 浅谈Javaweb经典三层架构和MVC框架模式
- 华为达芬奇架构和arm架构有什么区别?
- 数据库的并发操作可能带来的问题有哪些
- 开直播需要哪些设备,简单点 淘宝开直播用什么软件
- Apache架构师的30条设计原则