MySQL数据库读写分离的应用场景和存在问题

为什么要读写分离

在应用的用户访问量比较低的时候,一个数据库的读写能力是完全能够胜任的。但是在用户访问量增大的时候,数据库I/O就会成为瓶颈,解决数据库I/O瓶颈可以有两种方式:

  • 增加数据库缓存,如memche、Redis,数据库的读写先操作缓存,然后再持久化到数据库;
  • 数据库主从备份,进行读写分离;
    通过对用户访问的数据分析,一定是读数据库的量要远远大于写数据库的量,这时读就成为瓶颈,而读写的可靠性级别也是不一样的,写的可靠性要求会更高,针对读写的不同的要求,进行数据库的读写分离。

如何实现主从同步

读写分离,主从同步

半同步复制:主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
并发复制:指的是从库开启多个线程,并行读取relay log中不同库的日志,然后并行重放不同库的日志。

读写分离存在哪些问题及解决方法

由于主从同步是异步的,存在不一致的情况,因此会产生一些问题。

问题1

用户注册成功后,需要进行登录操作,注册是写 操作,登录是读操作,如果此时从库还没有用户的注册信息,那么用户登录会失败。
解决方法:
这个问题可以在业务层进行处理,注册成功之后,马上登录的,访问主库;
这个问题也可以在访问从库失败之后,访问主库进行验证;

问题2

用户修改密码成功后,需要进行登录操作,修改是写 操作,登录是读操作,如果此时从库还没有更新用户的信息,那么用户登录会失败。
解决方法:

缓存方案

此时从库的数据没有更新,如果用户登录会出现失败。可以在业务逻辑层进行处理,当用户密码修改后,在缓存中新增一条Id记录,记录用户的最新信息,并设置过期时间,每次请求的时候,先从缓存读取信息,如果没有在缓存读到,则到从库读取。

你可能感兴趣的:(MySQL数据库读写分离的应用场景和存在问题)