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

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

主从复制

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

实现方法:

以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请求时候,发往制定的数据源.

写在最后

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


原文始发于微信公众号(程序员小徐):数据库主从分离真的理解么

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/240835.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!