性能优化-主从同步、读写分离

一、业务场景

  • 随着业务系统用户访问量的增大,会出现高并发的情况,这个时候数据库的压力增大,如果数据库没有设计好,容易出现行锁、表锁、响应缓慢等情况出现。
  • 每台数据库服务器有他的最大连接数和 IOPS,若有一天它无法再满足我们的业务需求,相比于在单台服务器上去做性能提升,不如考虑横向扩展会更加合理。
  • 如果服务对数据库的需求是 IO 密集型的,那可能会经常遇到行锁等待等问题,若要鱼与熊掌兼得,读写分离是否是更好的选择。
  •  如果我们的系统需要做很多报表,或者统计和数据分析,这些业务往往相当地耗费资源但又不是很重要,针对这类需求,我们是否应该开几台从库,让他们去慢慢执行,不会影响处理核心业务的效率。

二、解决办法

        (一)引入缓存中间件

        比如redis、memcache等,不是这次的重点,先不讲。

        (二)主从同步、读写分离

        原理:配置一个主数据库,用于读写数据,再配置多个从数据库,只用于读取数据。这里就需要确保从库和主库的数据一致性(数据要实现低延迟同步)。

        1、主库(Master):

        对于单个体系,一般只有一个主库。主库用于读和写数据。

        2、从库(Slave):

        可以有1个或多个从库,从库只用于读数据,不能用作写。

        3、主从同步:

性能优化-主从同步、读写分离_第1张图片

         如上图:

        前提:主库开启了binlog日志,记录更新操作。

        1:从库开启I/O线程来请求主库,请求指定bin-log中position点之后的内容
        2:主库创建一个binlog dump线程,把binlog的内容发送到从库
        3:从库读取主库传过来的binlog内容并写入到relay log.
        4:从库SQL线程实时监测relay-log日志有更新,读取内容,解析成sql语句,在salve库中执行;

        4、读写分离:

        所有来自客户端的读请求(查询语句),分发到从库Slave,也可以分发到主库Master;所有的写请求(更新、插入、删除等语句),都到主库Master,不能到从库。

你可能感兴趣的:(MySQL,性能优化,性能优化,数据库,架构)