数据库读写分离

作者: Ferrari1001 | 来源:发表于2018-03-22 21:46 被阅读37次

    我们知道电商网站经常有秒杀活动,因此不可避免的就是处理高并发的问题。说到高并发,大家都知道对数据库造成的压力很大,那如何缓解数据库压力,带给用户流畅的快捷体验呢,这时离不开我们将要说的数据库读写分离技术了。那什么是数据库读写分离呢?

一、读写分离的来由

    一般来讲,绝大部分业务场景中读取数据居多,往数据库里写数据较少,因此,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统的性能会明显降低。为了提升业务系统的性能,优化用户体验,可以通过做主从数据库来减轻主数据库的负载。同时,如果主数据宕机,可快速将业务系统切换到从数据库上,这样可避免数据丢失同时不会给用户带来差的使用体验。

二、什么是读写分离

    从字面意思理解,就是把对数据库的读操作和写操作分离开。读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上,通常用于读远大于写的场景。
    在实际开发工作中,经常使用到MySQL数据库。众多周知,MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是缓解服务器压力。
    示意图如图所示:


image.png

三、读写分离带来的好处

【1】增加冗余
【2】增加了机器的处理能力
【3】对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

四、为什么要读写分离

【1】物理服务器增加,负荷增加;
【2】主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;
【3】从库可配置myisam引擎,提升查询性能以及节约系统开销;
【4】从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的;
【5】读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制;
【6】可以在从库启动是增加一些参数来提高其读的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上;
【7】分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1 分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不 承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白 了就是拿机器和带宽换性能。
【8】MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

相关文章

  • 阿里P8架构师带你玩转数据库 “读写分离”

    想用数据库“读写分离” 请先明白“读写分离”解决什么问题 有一些技术同学可能对于“读写分离”了解不多,认为数据库的...

  • mysql读写分离

    mysql读写分离 1、读写分离的介绍 MySQL读写分离基本原理是让master数据库处理写操作,slave数据...

  • 11 MySQL 读写分离

    MySQL 数据读写分离 [TOC] 读写分离概述 什么是读写分离 把客户端访问数据库服务时的查询请求和写数据的请...

  • python django 开发电商

    1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_r...

  • 数据读写分离、多实例配置

    数据读写分离 读写分离概述 使用读写分离的原因 数据库写入效率要低于读取效率 一般来说,数据读取频率高于写入频率 ...

  • Sharding-JDBC教程:Spring Boot整合Sha

    读写分离 在上一篇文章介绍了如何使用Sharing-JDBC实现数据库的读写分离。读写分离的好处就是在并发量比较大...

  • Amoeba 实现 MySQL 读写分离

    [TOC] 一、读写分离原理 读写分离(Read/Write Splitting),基本的原理是让主数据库处理事务...

  • 46 初始MyCat实现读写分离与动态数据源切换

    基于MyCat实现读写分离读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写...

  • cent os搭载mysql读写分离

    数据库拆分原则 1.优先使用缓存来降低数据库访问压力2.缓存无法解决问题使用数据库读写分离3.读写分离有瓶颈使用数...

  • 性能优化思考(持续更新)

    一、要不要读写分离 数据库读写分离能减轻数据库的压力,从而提高应用整体性能。 但我个人觉得,数据库首先应该保证的是...

网友评论

    本文标题:数据库读写分离

    本文链接:https://www.haomeiwen.com/subject/xcyzqftx.html