Java 核心技术MySQL数据库知识点

数据库读写分离

2018-03-22  本文已影响37人  Ferrari1001

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

一、读写分离的来由

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

二、什么是读写分离

    从字面意思理解,就是把对数据库的读操作和写操作分离开。读写分离在网站发展初期可以一定程度上缓解读写并发时产生锁的问题,将读写压力分担到多台服务器上,通常用于读远大于写的场景。
    在实际开发工作中,经常使用到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从也是可以的。

上一篇 下一篇

猜你喜欢

热点阅读