通常我们所说的读写分离和负载均衡,实际上是两个不同的概念,读写分离主要做的工作,是把对数据库的读操作和写操作,来分开,我们进行MYSQL主从复制配置的一个主要目的呢,就是为了分担主库的读负载,就是因为对于大多数应用来说,数据库所承担的读的负载呢,远远高于写的负载,那么我们为什么要读写分离呢,一方面来说,写负载是不能够分担的,而且只能够在主上来进行操作,而读操作既可以在主上进行,同样也可以在从上来进行,所以为了减少主库由于在读操作的时候,所带来的这个压力,来让主库能够更专注的进行写操作,因此我们就希望把读操作和写操作来分开,写操作只能在主库上进行,而读操作则尽量的在从上来进行,这样我们就要对操作来进行区分,或者说要进行读写分离,而完成读写分离后,对于读操作,可以在多个从上来进行处理,而如何分配多个从服务器上的读操作呢,这就需要我们读的负载均衡了

而目前来说,实现读写分离,主要有两种方式,一种是由程序来实现读写分离,另一种是由中间件来实现读写分离,那下面我们分别来看一下这两种方式的优缺点

首先来看实现读写分离的第一种方式呢,由程序来实现读写分离,这种情况适用于大多数是自主开发的系统中,其最主要优点是,首先第一个优点是,可以由开发人员来控制什么样的查询可以在从库上来执行,由于主从复制机制的原因,主从复制服务器之间,多少会存在一些延迟,这个延迟基本上是以毫秒为单位的,这点延迟对于人来说,很难察觉到,但是对于程序来说呢,却已经算是一个很长的时间了,因此对于实时性敏感的查询呢,不适合在从库上来执行,因此从这一点上来说,也不是什么查询都可以进行读写分离的,如果是由开发人员根据实际情况,来判断哪些查询自己判断哪些是可以在主库上查询,哪些查询是可以在从库上来执行,这样就比较灵活,另外有程序实现的第二个优点是,由于程序连接的是数据库,所以其性能损耗和使用单台数据库服务器时呢,是一样的,不会增加查询的性能损耗,同时和使用中间层的插件相比,不会增加新的故障点,所以架构更为的简单,更为方便的来维护

但是由开发人员在程序中实现读写分离,必然会加大开发人员的工作量,特别是对于一些比较大的项目,因为所需要的数据库连接会比较多,所以会增加很多连接的字符串,在程序中维护多个数据库连接呢,也会造成程序代码的复杂,使得程序难以维护,另一方面,对于开发人员认为的维护数据库,也很容易出现错误,特别是对于 一些比较大的项目,开发人员比较多,所以很难保证每一个开发人员,可以使用正确的数据库呢,来读写操作,在日常工作中,我们就会发现了,对于使用这种读写分离的项目呢,主库上的读操作往往还是很多的,必须要和开发人员反复的沟通,确认才能使得开发人员程序中使用正确的数据库进行查询,这也增加了后期程序维护以及DBA和开发人员之间的沟通成本,特别是程序一旦上线,运行要修改数据库连接的话,往往需要重新的上线发布,以及重启相关的应用程序,等等操作,这对业务也会有一定的影响,这也是由开发人员控制读写分离方案的一个缺点

那下面我们使用中间件的方式,又有哪些优缺点,除了由开发人员在开发过程中,认为的进行读写操作之外,更为常用的一种方法呢,则是通过数据库中间件的方式,来达到读写分离的目的,读写中间件有很多,很多都是由第三方公司所提供的,那这里我给大家介绍两款相对来说,比较官方点的工具,一个是由mysql所提供的mysql-proxy,而另一个是由mysql的兄弟公司,mariaDB所提供的maxScale,我们先来看看mysql-proxy,可以说是mysql的老前辈了,现在很多的中间件都是基于mysql-proxy;来进行二次开发,所得来的,但是虽然这个工具已经存在很久了,但是一直都是MYSQL的一个实验室项目,而且一直也没有发布正式版本,虽然说也有人在使用,但是性能和稳定性呢一直都存在一定的问题,在高并发的情况下呢,很容易死掉,所以才有了很多公司基于这个工具呢,开发自己的MYSQL中间件,就是为了解决mysql-proxy本身的这个问题,那么虽然mysql-proxy存在很多的问题,但是值得一提的是呢,使用这种中间件,不但可以解决读写分离的问题,而且也可以对多个从服务器,来实现负载均衡,所以说,mysql-proxy还是很强大的,但是由于其性能,和稳定性的问题,并不建议大家来使用这个工具,所以我们就来看看下面这个工具,maxScale是由mariaDB公司所提供的mysql中间件工具,对于MYSQL比较关注的点呢,对mariaDB也会有一定的了解,MariaDB呢是由MYSQL的创始人,所建立的mariaDB的分支版本,所以说呢,是MYSQL的一个亲兄弟,所以maxScale不但可以在mariaDB上使用,同样也可以在MYSQL数据库上来使用,最主要的呢,这个工具同时也是免费的,并且经过我的一些测试,maxScale是相对来说,性能消耗比较小的中间件的软件,同时和mysql一样,不但可以提供读写分离的功能,而且还可以实现多个,从服务器的读负载均衡的功能,所以下面我们会以这个工具为主,来给大家介绍一下,如何使用中间件来完成读写分离,和读负载均衡这样的操作,但是在这里之前呢,我们还是先来看一下,使用中间件的优缺点,目前许多的数据库中间件可以完成数据库的读写分离功能,根据我们所使用的软件不同,其性能和功能特点也会有不一样的地方,不过总的来说呢,使用中间层来完成读写分离的话,都会具有以下的优缺点,首先我们来看使用中间件来实现读写分离的优点,中间件会根据SQL语法的分析,分辨出所要处理的操作是读操作还是写操作,例如通过解析SQL发现呢,进行的是select操作的话,就会把相关的请求发送到从服务器上去处理,如果是非select操作呢,就会全部放到主服务器上去处理,以这样的方式来实现ain读写分离,不过存储过程这样的无法通过调用,是进行读操作还是写操作的SQL,那么只能由数据库来完成了,由于我们的存储过程呢,很大一部分是进行查询来处理的,所以无疑就会加大主数据库的负载,所以说虽然使用中间件很方便,但也会付出一定的代价,那么我认为使用中间件来完成读写分离,那么最重要的一点呢还是因为中间件代理的这种方式呢,总体来说是透明的,特别是对于已经存在的程序,只要把连接数据库的方向改为通过中间件来接数据库,那就可以了,而不用对程序代码做任何的修改,也大大节约实现读写分离扩展的一个时间,同时也降低了实现读写分离的难度,这也就是使用中间件最突出的一个优点了

说到了优点,我们还要说到其中的缺点,使用中间件的优点很明显,但是其缺点又不那么容易被人们发现了,因为不是大并发,高负载的情况下,中间件的缺点几乎是不会暴露的,首先增加了中间层之后,所有的程序会通过中间层来连接到数据库服务器,所以查询的处理能力呢,就非常依赖于中间层的处理能力,特别是编程中还要实现一些由权限认证啊,语法分析这样的工作,或者对查询的性能造成一定的损耗,这个损耗是非常严重的,在我测试过的几款工具中呢,咱们以QPS来说,差不多可以降低百分之50至百分之70的能力,是不是对这个数据很惊讶,所以说呢,我们想要使用一款中间件,来实现读写分离,一定要按照之前讲的方式呢,来进行一下几点测试,否则可能会在上线后,会有严重的性能问题,另一点使用中间件的另一个问题呢,因为读写分离是由中间件自动实现的,而中间层呢,哪些查询是对主从延迟敏感的,哪些是不敏感的,所以无法自动的把延迟敏感的查询呢自动的放到主库上去查询,他要实现这个功能呢,需要在查询中加入一些提示的关键字,如果这样做呢,就不得对我们的程序做一些更改,这样也就失去了上面提到的,中间层关键的对程序透明的优点,所以这也是中间层的一个不足之处,前面说了,读写分离和读的负载均衡,实际上是两个概念,读写分离要解决的是如何在复制集群的不同角色上,执行不同的SQL语句的问题,而读的负载均衡呢,所要解决的是,具有相同角色的数据库,如何共同分担,相同的负载的这个问题,例如同样是读请求,如何分布到多台从数据库服务器上去,进行查询,一种方式呢,我们可以使用程序轮询的方式,由程序来控制具体的在哪个服务器上来查询,如果使用这种方式呢,则我们每次减少或增加从服务器,就要修改程序,配置以适应数据库的数量,所以这样是不太灵活的,那么另一种方法呢,是可以使用专门的软件,或者硬件来完成这样的工作,那么常用的软件呢,如LVS,HAProxy,或者我们刚刚说的MaxScale,mysql-proxy的中间层,或者F5这样的硬件设备,不管是使用哪种方式呢,大家一定要记住,在具体的生产环境中,进行起来一定要先经过,我们的基准测试,下面我们就以maxScale,为例来给大家介绍一下,如何使用中间层软件,来实现读写分离和读的负载均衡,这样的功能

读写分离和负载均衡介绍相关推荐

  1. MaxScale:实现MySQL读写分离与负载均衡的中间件利器

    1.MaxScale 是干什么的? 配置好了MySQL的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡. 读写分离和负载均衡是MySQL集群的基础需求 ...

  2. 【DB宝42】MySQL高可用架构MHA+ProxySQL实现读写分离和负载均衡

    文章目录 一.MHA+ProxySQL架构 二.快速搭建MHA环境 2.1 下载MHA镜像 2.2 编辑yml文件,创建MHA相关容器 2.3 安装docker-compose软件(若已安装,可忽略) ...

  3. OneProxy实现MySQL读写分离与负载均衡

    Part1:写在最前 OneProxy平民软件完全自主开发的分布式数据访问层,帮助用户在MySQL/PostgreSQL集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有SQL白名单(防SQ ...

  4. oneproxy mysql_在OneProxy的基础上实行MySQL读写分离与负载均衡

    简介 Part1:写在最前 OneProxy平民软件完全自主开发的分布式数据访问层,帮助用户在MySQL/PostgreSQL集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有SQL白名单( ...

  5. PG基于pgpool-II实现读写分离和负载均衡

    PG基于pgpool-II实现读写分离和负载均衡 PG:12 pgpool-II:4.2.2 OS:CentOS7.6 IP 主机名 作用 port 类型 备注 172.72.6.2 mambapg6 ...

  6. mysql读写分离和组复制_数据库主从复制,读写分离,负载均衡,分库分表分别表达的什么概念?...

    谢邀,这是个好问题,而且这个问题好在即使概念非常容易理解,但是这几个不同的概念细节太多太多,而且理解了概念,自己要用,又需要做很多的调研评估和开发工作.作为在这个领域爬坑多年的人,我这里就先介绍下概念 ...

  7. php laravel 默认cookie加密 读取怎么办_Laravel+Nginx轻松实现读写分离、负载均衡,网站并发能力提升N倍...

    前言: 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的问 ...

  8. mysql 读写分离 max_MaxScale实现MySQL读写分离和负载均衡

    MaxScale安装 服务器 主1:192.168.0.131 从1:192.168.0.7 从2:192.168.0.9 1.在从2服务器上下载安装包 如若缺少依赖包请自行安装 [root@hado ...

  9. mysql+读的负载均衡_MySQL Proxy快速实现读写分离以及负载均衡

    作/译者:叶金荣(Email: ),来源:http://imysql.cn,转载请注明作/译者和出处,并且不能用于商业用途,违者必究. 1. 安装 下载已经编译好的安装包,或者预编译安装包均可,在这里 ...

最新文章

  1. 保证同一个账号同时只能在一个设备上登录
  2. 使用级联样式表的好处在于_现在都在使用益阳云终端解决方案了,原因就在于这些好处...
  3. 11道Python最基本的面试题
  4. Administrator用户被禁用
  5. Windows查找JDK的路径
  6. 月薪5万的产品经理都把什么能力放在第一位?
  7. iOS GBK转换为Utf8
  8. 计算机语言t和o,PLC编程语言/操作指令/使用步骤详解
  9. 【基础知识】~ 锁存器/触发器、寄存器
  10. 好像记得有个人喜欢我
  11. 家装建材行业解决方案
  12. Google GMS Crash 优化方案
  13. 浅谈编程思想的重要性
  14. LXD共享方案(续)
  15. MIT教授提出可扩展的新共识算法Algorand,彻底消除区块链分叉的可能性
  16. java爬虫post404_请问 这个 文件怎么下载(Java爬虫),是 怎么验证的啊?在等。。...
  17. 服务器资源监控工具—nmon
  18. Kafka 那些值得我们学习的优秀设计
  19. 【Android-音乐类】音友 免费下载、试听、全网最全的音乐 还不快来白嫖~
  20. 面对裁员,国家终于出手了

热门文章

  1. OPW-00001: Unable to open password-file
  2. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
  3. JavaScript 动态创建标记
  4. C++实现另一个猜数字游戏
  5. C# DateTimePicker控件设置空时间
  6. 关于正则验证中文名字2-5位的时候
  7. 输出多个重复字符或字符串
  8. shell脚本实现动态时钟
  9. 关于H3C MSR路由器L2TP隧道协议路由配置的特点
  10. 美!视差滚动在图片滑块中的应用【附源码下载】