设为首页 收藏本站
查看: 1384|回复: 0

[经验分享] MySQL DAL(Data Access Layer)中间件总结

[复制链接]

尚未签到

发表于 2018-10-11 10:16:38 | 显示全部楼层 |阅读模式
  转载于运维社区: https://www.unixhot.com/article/75
  DAL是数据访问层的英文缩写,即为数据访问层(Data Access Layer)。用在这里可能不是特别恰当,因为本文主要介绍MySQL访问的中间件,不过也是属于DAL的范畴。本文不会去高可用相关的知识,主要聚焦于MySQL的横向扩展。
  我们知道最简单的一种扩展是MySQL 主从复制,通过1主多从来实现读的性能扩展,但是这样的扩展不仅仅有局限性,而且写入的问题并没有解决。目前市场上用三类解决方案:
  1.客户端分片(推荐)
  程序客户端进行分库分表。也就是直接在程序里面进行数据库和表的拆分,例如用户表。根据用户的UID,例如13678789,根据最后一位,可以拆分为0-9共10个数据库,把尾号是0的存入db_user_0数据库,尾号是1的存入db_user_1数据库,select的时候也是一样。然后根据倒数第二位,可以拆分为0-9共10张表,根据倒数第二的尾号写入相应的表中。例如13678789这个UID的信息,写入db_user_9数据库的table_user_8的表中。
  2.各种数据成中间件:
  
  2.1 MySQL-Proxy(不强烈推荐)
  先说MySQL自己的,MySQL Proxy: 是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。
DSC0000.jpg

  MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
DSC0001.png

  2.2  Atlas(不强烈推荐)
  Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。
DSC0002.jpg

  主要功能:

  •   读写分离
  •   从库负载均衡
  •   IP过滤
  •   自动分表
  •   DBA可平滑上下线DB
  •   自动摘除宕机的DB
  简单的说是在MySQL Proxy的基础上做了二次开发,并支持了自动分表的特性。但是仅支持非常有限的rang进行分表。目前有先的分支Atlas Sharding来实现更多的功能。
  具体的功能清看Github,非常详细
  https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
  2.3 Cobar(不强烈推荐)
  Cobar是阿里巴巴开源的一个,提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  •   产品在阿里巴巴稳定运行3年以上。
  •   接管了3000+个MySQL数据库的schema。
  •   集群日处理在线SQL请求50亿次以上。
  •   集群日处理在线数据流量TB级别以上。
DSC0003.jpg

  详情:https://github.com/alibaba/cobar/wiki
  2.4 MyCAT(不强烈推荐)
  MyCAT基于阿里开源的Cobar产品而研发的,目前社区相对比较活跃,功能也是最多的一个MySQL中间件,

    什么是MYCAT

  •   一个彻底开源的,面向企业应用开发的大数据库集群
  •   支持事务、ACID、可以替代MySQL的加强版数据库
  •   一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  •   一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  •   结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  •   一个新颖的数据库中间件产品
DSC0004.png

  3.MySQL 集群
  3.1 MySQL Cluster(强烈不推荐)
  MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。几乎无应用案例,不推荐。
DSC0005.png

  3.2 Percona XtraDB Cluster方案(推荐)
  Percona XtraDB Cluster简称PXCPercona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。
DSC0006.png

  上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。
  以上为个人生产经验,不代表产品本身的相关利益,不过还好了,都是开源的,大家可以根据自身情况选择。你会发现并没有强烈推荐的方案,主要是大家要考虑自身业务的情况进行选择,例如核心业务。连主从切换都不推荐自动,而是手动,宁愿业务不能访问,也不能出现自动主从切换导致数据丢失。
  MySQL DAL(Data Access Layer)中间件总结
  DAL是数据访问层的英文缩写,即为数据访问层(Data Access Layer)。用在这里可能不是特别恰当,因为本文主要介绍MySQL访问的中间件,不过也是属于DAL的范畴。本文不会去高可用相关的知识,主要聚焦于MySQL的横向扩展。
  我们知道最简单的一种扩展是MySQL 主从复制,通过1主多从来实现读的性能扩展,但是这样的扩展不仅仅有局限性,而且写入的问题并没有解决。目前市场上用三类解决方案:
  1.客户端分片(推荐)
  程序客户端进行分库分表。也就是直接在程序里面进行数据库和表的拆分,例如用户表。根据用户的UID,例如13678789,根据最后一位,可以拆分为0-9共10个数据库,把尾号是0的存入db_user_0数据库,尾号是1的存入db_user_1数据库,select的时候也是一样。然后根据倒数第二位,可以拆分为0-9共10张表,根据倒数第二的尾号写入相应的表中。例如13678789这个UID的信息,写入db_user_9数据库的table_user_8的表中。
  2.各种数据成中间件:
  
  2.1 MySQL-Proxy(不强烈推荐)
  先说MySQL自己的,MySQL Proxy: 是处在你的MySQL数据库客户和服务端之间的程序,它还支持嵌入性脚本语言Lua。这个代理可以用来分析、监控和变换(transform) 通信数据。

  MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。

  2.2  Atlas(不强烈推荐)
  Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。

  主要功能:

  •   读写分离
  •   从库负载均衡
  •   IP过滤
  •   自动分表
  •   DBA可平滑上下线DB
  •   自动摘除宕机的DB
  简单的说是在MySQL Proxy的基础上做了二次开发,并支持了自动分表的特性。但是仅支持非常有限的rang进行分表。目前有先的分支Atlas Sharding来实现更多的功能。
  具体的功能清看Github,非常详细
  https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
  2.3 Cobar(不强烈推荐)
  Cobar是阿里巴巴开源的一个,提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。

  •   产品在阿里巴巴稳定运行3年以上。
  •   接管了3000+个MySQL数据库的schema。
  •   集群日处理在线SQL请求50亿次以上。
  •   集群日处理在线数据流量TB级别以上。

  详情:https://github.com/alibaba/cobar/wiki
  2.4 MyCAT(不强烈推荐)
  MyCAT基于阿里开源的Cobar产品而研发的,目前社区相对比较活跃,功能也是最多的一个MySQL中间件,

    什么是MYCAT

  •   一个彻底开源的,面向企业应用开发的大数据库集群
  •   支持事务、ACID、可以替代MySQL的加强版数据库
  •   一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  •   一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  •   结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  •   一个新颖的数据库中间件产品

  3.MySQL 集群
  3.1 MySQL Cluster(强烈不推荐)
  MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。几乎无应用案例,不推荐。

  3.2 Percona XtraDB Cluster方案(推荐)
  Percona XtraDB Cluster简称PXCPercona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。

  上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。
  以上为个人生产经验,不代表产品本身的相关利益,不过还好了,都是开源的,大家可以根据自身情况选择。你会发现并没有强烈推荐的方案,主要是大家要考虑自身业务的情况进行选择,例如核心业务。连主从切换都不推荐自动,而是手动,宁愿业务不能访问,也不能出现自动主从切换导致数据丢失。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-620261-1-1.html 上篇帖子: MYSQL 锁:metadata lock 下篇帖子: 完全卸载MySQL 数据库——清空MySql注册表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表