数据库的主从分离真的理解么

本文介绍了业务增长时如何通过主从复制解决数据库压力,包括MySQL的主从复制原理、实现过程及其缺点。同时探讨了读写分离的重要性,以及淘宝TDDL等数据源代理在复杂场景中的应用。
摘要由CSDN通过智能技术生成

业务上线初期,流量少数据库压力小只有一个主库绝对够用,但是随着业务的发展,流量的增多,一个数据库就很难承受如此巨大的流量了,特别是峰值时段.然而几乎所有系统都是读多写少的场景,因此如果能够将读写分离就会大大提高系统的并发量.下面来讲解一下从分离的几个方法.

主从复制

简单说就是一个主库,一个或多个从库,其中主库主要负责数据的写入,从库主要负责数据的读取.

实现方法:

以mysql为例,主从复制是依赖binlog日志的,mysql的所有操作都会记录到以二进制形式保存的binlog日志文件中,然后将此日志文件同步到从库,最终达到主从一致,但是此过程是有延迟的,但是大部分互联网场景都能够容忍此延迟.

主从实现过程:

从库会创建一个IO线程,用于请求主库的binlog日志,并将请求的数据保存到relay log的日志文件中,而主库也需要创建一个log dump的线程发送binlog给从库.从库还需要创建一个sql线程来读取relay log的内容到从库做回放,最终实现主从一致.

缺点:

  1. 主库的写入是异步的,不会等待从库响应,因此如果中间网络断开或者磁盘坏掉会造成主从不一致,不过大多数互联网场景是可以接受的.

  2. 从库数量不宜过多,因为从库越多主库需要创建的log dump线程也会越多,造成主库资源消耗比较大,所以一般一个主库连接 3-5个 从库即可.另外从库越多后期部署和维护也会大大增加难度.

注意事项:

主从复制并不是强实时的,因此可能会出现数据写入成功了,但是查询一直查询不到数据.此时并非全部为代码问题,因此应该加上 主从落后时间作为数据库的关键指标告警,一般延迟在毫秒级即为正常.如果没有此告警再进行代码检查是否存在问题.

读写分离实现

未进行读写分离之前只需要配置一个数据库地址即可,如果现在需要读写分离则需要配置一个主库地址和多个从库地址,并且还要去分查询和写入操作,这无疑增加了实现难度,目前主要有两种实现方式业界.

  • 淘宝TDDL(Taobao Distributed Data Layer), 一种数据源的代理,可以配置多个数据源,没个数据源可以是主库也可以是从库,当有数据请求时候,将SQL语句发送到对应的数据库并返回结果信息.

  • 单独部署代理层方案,此类中间件单独部署在独立的服务器,业务代码可以直接使用单一数据库一样使用,此中间件管理多个数据源,当有sql请求时候,发往制定的数据源.

写在最后

主从分离是提高系统性能的方法之一,希望这篇文章可以帮助大家更深刻理解主从复制。关注程序员小徐,专注技术坑

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值