干货!MySql DAL中间件总结
Posted 马哥Linux运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货!MySql DAL中间件总结相关的知识,希望对你有一定的参考价值。
来源:民工哥技术之路
ID:jishuroad
1.前言
mysql作为互联网公司都会用到的数据库,如果在使用过程中出现性能问题,会采用mysql的横向扩展,使用主从复制来提高读性能,要是解决写入问题,需要进行分库分表。本文不会去介绍mysql的高可用,需要了解Mysql高可用架构相关的请戳,本文主要介绍mysql的访问中间件(DAL)的一些实现方案。
2.Atlas
官网:https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
2.1.atlas简介
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条。同时,有超过50家公司在生产环境中部署了Atlas,超过800人已加入了我们的开发者交流群,并且这些数字还在不断增加。
2.2.atlas架构
Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。
2.3.主要功能
1.读写分离
2.从库负载均衡
3.IP过滤
4.自动分表
5.DBA可平滑上下线DB
6.自动摘除宕机的DB
Atlas相对于官方MySQL-Proxy的优势
1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口
2.重写网络模型、线程模型
3.实现了真正意义上的连接池
4.优化了锁机制,性能提高数十倍
3.Mysql router
官网:http://dev.mysql.com/doc/mysql-router/en/
3.1.mysql router简介
MySQL Router是mysql官方发布的数据库中间件,是处于应用client和dbserver之间的轻量级代理程序,它能检测,分析和转发查询到后端数据库实例,并把结果返回给client。是mysql-proxy的一个替代品。其架构图和功能如下。
3.2.mysql router架构
1.Router实现读写分离,程序不是直接连接数据库IP,而是固定连接到mysql router。MySQL Router对前端应用是透明的。应用程序把MySQL Router当作是普通的mysql实例,把查询发给MySQL Router,而MySQL Router会把查询结果返回给前端的应用程序。
2.从数据库服务器故障,业务可以正常运行。由MySQL Router来进行自动下线不可用服务器。程序配置不需要任何修改。
3.主数据库故障,由MySQL Router来决定主从自动切换,业务可以正常访问。程序配置不需要做任何修改。
MySQL Router读写分离原理:
MySQL Router接受前端应用程序请求后,根据不同的端口来区分读写,把连接读写端口的所有查询发往主库,把连接只读端口的select查询以轮询方式发往多个从库,从而实现读写分离的目的。读写返回的结果会交给MySQL Router,由MySQL Router返回给客户端的应用程序。
3.3.mysql router主要功能
MySQL Router的主要用途是读写分离,主主故障自动切换,负载均衡,连接池等。
4.Mycat
4.1.mycat简介
-
一个彻底开源的,面向企业应用开发的大数据库集群 -
支持事务、ACID、可以替代MySQL的加强版数据库 -
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 -
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server -
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 -
一个新颖的数据库中间件产品
4.2.mycat架构
4.3.mycat主要功能
支持SQL92标准
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio实现,有效管理线程,高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持IP白名单
支持SQL黑名单、sql注入攻击拦截
支持分表(1.6)
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
5.Cobar
5.1.cobar简介
5.2.cobar架构
5.3.cobar现状
6.Amoeba
6.1.amoeba简介
6.2.amoeba架构
6.3.amoeba现状
7.Mysql proxy
7.1.mysql proxy简介
7.2.mysql proxy现状
mysql proxy架构实战
8.客户端分片
8.1.客户端分片简介
8.2.优点
9.后记
文章系作者原创投稿,作者:西门飞冰,一名90后it男,一直在北京工作,热爱运动,热爱冒险,热爱旅行。
以上是关于干货!MySql DAL中间件总结的主要内容,如果未能解决你的问题,请参考以下文章