数据库读写分离化

数据库读写分离

Mysql复制原理

负载容量的规划

上面的答案是1台主3台从。分析如下:

  • 2倍的负载就是提高到 1000 X2 =2000次的查询
  • 2000 x 20% = 400 次的写操作
  • 80% X 1000 X 2 =1600 次的读操作
  • 将1600的读操作转移到从库上去,每台从库支持1000次的查询,从库需要预留从主库读过来的请求(400), 这个时候,每个从库剩下600的读操作。1600/600 =3 .所以需要3台从库。 也就是1主3从。

复制无法扩展写操作

数据库同步延迟的解决办法

DB主从架构一致性优化方法

半同步复制(影响性能,基本不这样操作)
  • 系统先对DB-master进行了一个写操作
  • 写主库等主从同步完成,写主库的请求才返回
  • 读从库,读到最新的数据(如果读请求先完成,写请求后完成,读取到的是“当时”最新的
写操作的脚本强制读主库,可借助数据库代理实现(工作中经常使用)
  • 将统一脚本中的后续读操作都从主库读取。可以配置数据库代理自动实现。比如db_proxy等。
缓存记录写key法(因为网络抖动,延时超过500秒,也不建议使用)
  • 将某个库上的某个key要发生写操作,记录在cache里,并设置“经验主从同步时间”的cache超时时间,例如500ms
  • 修改数据库
  • 读库时先到cache里查看,对应库的对应key有没有相关数据如果cache hit,有相关数据,说明这个key上刚发生过写操作,此时需要将请求路由到主库读最新的数据 。
  • 如果cache miss,说明这个key上近期没有发生过写操作,此时将请求路由到从库,继续读写分离 。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注