文章目录
一、MySQL读写分离
1、概述
- 在实际的生产环境中,如果对数据库的读和写都在同一个数据库服务器中操作,无论是安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的
- 通过主从复制来同步数据,再通过读写分离来提升数据库并发负载能力的方案来进行部署和实施
2、读写分离原理
- 让主数据库处理事务性增、删、改,而从数据库处理SELECT查询操作
- 数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库
3、读写分离存在的作用
- 因为数据库的“写”操作是比较耗时的
- 但是数据库的“读”(读取10000条数据可能只需要5秒钟)
- 所以读写分离解决的是数据库的写入,影响了查询的效率
4、常见MySQL读写分离分为两种
4.1 基于程序代码内部实现
- 在代码中根据select、insert进行路由分类,这类方法也是目前生产环境应用最广泛的
- 优点是:性能好;因为在程序代码中实现,不需要增加额外的设备为硬件开支;
- 缺点是:需要开发人员来实现
- 并不是所有的应用都是适合程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动较大
4.2 基于中间代理层实现 - 代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,
- 有以下代表程序:
①MySQL-Proxy:为MySQL开源项目,通过其自带的lua脚本进行SQL判断②Atlas:是由奇虎360的Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目;是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条,支持事务以及存储过程③Amoeba:由陈思儒开发,该程序由Java语言进行开发,阿里巴巴将其用于生产环境,但是不支持事务和存储过程Amoeba是一个非常容易使用,可移植性非常强的软件&#x