168大数据

标题: 数据库之架构:主备+分库?主从+读写分离? [打印本页]

作者: 168主编    时间: 2019-4-24 09:39
标题: 数据库之架构:主备+分库?主从+读写分离?

一、数据库架构原则二、常见的架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用
jdbc:mysql://vip:3306/xxdb
方案二:双主架构,两个主库同时提供服务,负载均衡
jdbc:mysql://vip:3306/xxdb
方案三:主从架构,一主多从,读写分离
jdbc:mysql://master-ip:3306/xxdb
jdbc:mysql://slave1-ip:3306/xxdb
jdbc:mysql://slave2-ip:3306/xxdb
注:思考一个问题,一台从库挂了会怎样?读写分离之读的负载均衡策略怎么容错?
方案四:双主+主从架构,看似完美的方案
jdbc:mysql://vip:3306/xxdb
jdbc:mysql://slave1-ip:3306/xxdb
jdbc:mysql://slave2-ip:3306/xxdb
三、一致性解决方案第一类:主库和从库一致性解决方案
注:图中圈出的是数据同步的地方,数据同步(从库从主库拉取binlog日志,再执行一遍)是需要时间的,这个同步时间内主库和从库的数据会存在不一致的情况。如果同步过程中有读请求,那么读到的就是从库中的老数据。如下图。
既然知道了数据不一致性产生的原因,有下面几个解决方案供参考:
第二类:DB和缓存一致性解决方案
先来看一下常用的缓存使用方式:
第一步:淘汰缓存;
第二步:写入数据库;
第三步:读取缓存?返回:读取数据库;
第四步:读取数据库后写入缓存。
注:如果按照这种方式,图一,不会产生DB和缓存不一致问题;图二,会产生DB和缓存不一致问题,即4.read先于3.sync执行。如果不做处理,缓存里的数据可能一直是脏数据。解决方式如下:
注:设置缓存时,一定要加上有效时间,以防延时淘汰缓存失败的情况!
四、个人的一些见解1、架构演变2、个人见解
作者:尜尜人物
使命:为中华软件之崛起而编程
愿景:愿程序员皆因喜欢而编程







欢迎光临 168大数据 (http://www.bi168.cn/) Powered by Discuz! X3.2