MySQL DLA中间件

MySQL DLA中间件

  1. DLA是数据访问层(Data Access Layer)的简称,本文在之前完成的数据库高可用基础之上继续完成MySQL的横向扩展,即当单台或双主MySQL写入出现瓶颈的时候,或单表写入数据出现瓶颈的时候(单表推荐数据在一千万行以内,超过也可以但是会慢)等场景下,如果对数据库进行横向的扩展:

  2. 客户端分片(推荐使用):
    在程序端进行分库分表,也就是在程序里面直接进行数据库和表的拆分,例如用户表,根据用户的UID进行库和表的拆分,例如某个用户的UID是20170123(UID需要是0-9的正整数),那么可以根据最后一位拆分出0-9一共10个数据库,每个数据库是一个MySQL服务器,把尾号为3的写入到db_user_3的数据库,尾号为4的写入到db_user_4的数据库,其他同理,select的时候也是根据最后一位UID连接到不同的MySQL服务器,然后在根据倒数第二位进行拆分成0-9共10个表,那么10个MySQL服务器中每个上面有10个表,就是100张,比如查询20170123这个UID的用户信息就要到db_user_3数据库的table_user_2的表中查询,就实现了分库分表的目的,但是缺点是如果100张表如果不够用,需要再添加库和表的话就麻烦了,需要考虑之前保存的数据怎才能被查询到。

  3. 常见的数据库中间件

  4. MySQL-Proxy(不强烈推荐): MySQL Proxy是一个处于你的client端和MySQL
    server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
    MySQL Proxy就是这么一个中间层代理,简单的说,MySQL
    Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本判断执行的操作是写操作(事务性的操作),就会放在Master上进行操作,读操作就放在Slave执行,其使用MySQL协议为客户进行服务,基本结构如下:
    在这里插入图片描述
    MySQL Proxy只是一个中间件,其性能一般,性能还不如通过客户端实现读写分离,而且Proxy是单点,但是可以通过多个Proxy+keepalived实现高可用,但是这样的话架构又比较复杂了,下面是单台MySQL Proxy的工作流程:
    在这里插入图片描述

  5. Atlas(不强烈推荐),功能上有一些局限性:
    gitlib地址:https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
    Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加,基本架构图如下:
    在这里插入图片描述
    主要功能:
    自动实现读写分离
    从库负载均衡
    IP过滤
    自动分表
    DBA可平滑上下线DB
    自动摘除宕机的DB

Atlas相对于官方MySQL-Proxy的优势:
将主流程中所有Lua代码用C重写,Lua仅用于管理接口
重写网络模型、线程模型
实现了真正意义上的连接池
优化了锁机制,性能提高数十倍

Atlas详细写入和读取流程图如下:
在这里插入图片描述
优点
-实现了读写分离(并通过hint/master/可强制走主库,并且加入了权重配置可进行读的负载均衡
-自身维护了一套连接池,减少了创建连接带来的性能消耗
-支持DB动态上下线,方便横向扩展
-支持ip过滤,实现了简单的权限控制
-可记录所有sql,实现了简单的审计功能

缺点
-使用atlas比直连DB,性能损耗大概是30%-35%左右
-使用atlas比直连DB,响应时间大概是直连DB的1.5~2倍
-对分表的支持不是太好,只支持同schema下的hash分表,并且分表后查询只基于分表key的等值查询(如果支持范围查询,那么比直接非分表情况扫描全表的性能还差,所以360干脆就不支持)
-atlas配置暂时不支持配置参数的动态加载,如果修改了配置需要重启atlas,这可能会对业务有一点的影响(不过一般可以做ha或者业务低峰进行重启,这个问题不是特别迫切)

  1. Cobar(不强烈推荐):
    Cobar是阿里巴巴开源的一个基于java开发的、提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明,项目地址:https://github.com/alibaba/cobar/wiki
    产品在阿里巴巴稳定运行3年以上。 接管了3000+个MySQL数据库的schema。 集群日处理在线SQL请求50亿次以上。
    集群日处理在线数据流量TB级别以上。
    在这里插入图片描述

Cobar解决的问题:
分布式:Cobar的分布式主要是通过将表放入不同的库来实现:
Cobar支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
Cobar也支持将不同的表放入不同的库多数情况下,用户会将以上两种方式混合使用这里需要强调的是,Cobar不支持将一张表,例如test表拆分成test_1, test_2, test_3…放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。
HA:
在用户配置了MySQL心跳的情况下,Cobar可以自动向后端连接的MySQL发送心跳,判断MySQL运行状况,一旦运行出现异常,Cobar可以自动切换到备机工作。但需要强调的是:
Cobar的主备切换有两种触发方式,一种是用户手动触发,一种是Cobar的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。
Cobar只检查MySQL主备异常,不关心主备之间的数据同步,因此用户需要在使用Cobar之前在MySQL主备上配置双向同步。

  1. Mycat(不强烈推荐,非核心业务可以测试):
    基于Cobar做的二次开发,官方网址:http://www.mycat.org.cn/,社区活跃、文档丰富,Mycat前方可以通过负载均衡访问以实现多Mycat的高可用部署,Mycat的定义如下:
    一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库
    一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
    一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
    结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 一个新颖的数据库中间件产品
    在这里插入图片描述

  2. MySQL Cluster(强烈不推荐):
    MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。几乎无应用案例,不推荐
    在这里插入图片描述
    优点:
    -99.999 %的高可用性
    -快速的自动失效切换
    -灵活的分布式体系结构,没有单点故障
    -高吞吐量和低延迟
    -可扩展性强,支持在线扩容
    缺点:
    -存在很多限制,比如:不支持外键,数据行不能超过8K(不包括BLOB和text中的数据)
    -部署、管理、配置很复杂
    -占用磁盘空间大,内存大
    -备份和恢复不方便
    -重启的时候,数据节点将数据load到内存需要很长时间

  3. Percona XtraDB Cluster方案(推荐使用)
    Percona XtraDB Cluster简称PXC。Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。
    下图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。
    此方案无法解决较大MySQL数据场景的数据保存问题,即不能实现分库分表,但是提供了一个高冗余的环境,适合于业务不是很大但是要求数据绝对安全的环境。
    在这里插入图片描述Percona Server为 MySQL 数据库服务器进行了改进,是基于MySQL做的二次开发的数据库版本,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为,官网地址:https://www.percona.com,下载地址:https://www.percona.com/downloads/。

percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,请大家还是使用percona-toolkit吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个非专业的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率,percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括:
检查master和slave数据的一致性
有效地对记录进行归档
查找重复的索引
对服务器信息进行汇总
分析来自日志和tcpdump的查询
当系统出问题的时候收集重要的系统信息

优点

  1. 当执行读操作时,默认在本地节点执行,所有的数据本地节点都有,不需要远程查询
  2. 去中心化管理,即使在任一的一个时间点宕掉一个节点,其他节点仍可以继续工作,且没有数据损失
  3. 对数据库读负载均衡支持较好,可以在任一节点执行读操作

缺点

  1. 配置新节点的开销大,当添加一个新的节点的时候,所有数据会从一台现有的数据库复制到新节点,如果数据是100G则复制100G
  2. 有多份数据副本,如果有三个节点,则数据有三个副本
  3. 对写的负载均衡支持不够好,写入数据时,在所有节点都写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值