当前位置: 首页 > Linux

干货!MySqlDAL中间件总结

时间:2023-04-07 03:25:56 Linux

1。前言Mysql是互联网公司使用的数据库。如果在使用过程中出现性能问题,会使用mysql进行水平扩展和主从复制,提高读取性能。问题,需要分库分表。本文不介绍mysql的高可用。如果您需要了解Mysql高可用架构,请点击MySQL集群高可用架构。本文主要介绍mysql的访问中间件(DAL)的一些实现方案。2.图集官网:https://github.com/Qihoo360/A...2.1.Atlas图层项目介绍。基于MySQL官方推出的MySQL-Proxy0.8.2版本,修改了很多bug,增加了很多特性。目前,该项目已在公司得到广泛应用。很多MySQL服务已经接入Atlas平台,每天承载的读写请求量达到数十亿。同时,已有超过50家公司在生产环境中部署了Atlas,超过800人加入了我们的开发者交流群,而且这些数字还在不断增加。2.2.atlas架构Atlas是应用程序和MySQL之间的中间件。从后端DB的角度来看,Atlas相当于与之相连的客户端,而从前端应用的角度来看,Atlas相当于一个DB。Atlas作为服务器与应用程序进行通信。它实现了MySQL客户端和服务器协议,并作为客户端与MySQL进行通信。它对应用程序屏蔽了DB的细节,同时为了减轻MySQL的负担,它还维护了一个连接池。2.3.主要功能1.读写分离2.Slave负载均衡3.IP过滤4.自动分表5.DBA可以平滑的进出DB6.自动清除宕机主进程中的Lua代码用C重写,Lua只用于管理界面2.重写网络模型和线程模型3.实现真正意义上的连接池4.优化锁机制,通过以下方式提升性能几十次3.Mysqlrouter官网:http://dev.mysql.com/doc/mysq...3.1.mysqlrouter介绍,检测、分析并转发查询到后端数据库实例,并将结果返回给客户端。是mysql-proxy的替代品。其架构图和功能如下。3.2.mysqlrouter架构1.router实现了读写分离。程序不直接连接数据库IP,而是固定连接mysqlrouter。MySQLRouter对前端应用程序是透明的。应用程序将MySQLRouter当作一个普通的mysql实例,向MySQLRouter发送查询,MySQLRouter将查询结果返回给前端应用程序。2、从数据库服务器故障来看,业务可以正常运行。不可用的服务器由MySQLRouter自动下线。程序配置不需要任何修改。3、如果主库出现故障,MySQLRouter会判断主从自动切换,业务可以正常访问。程序配置不需要任何修改。MySQLRouter读写分离原理:MySQLRouter收到前端应用的请求后,根据不同的端口区分读写,将连接到该读写端口的所有查询发送到主数据库,轮询selectquery连接到只读端口发送到多个从库,达到读写分离的目的。读写返回的结果会交给MySQLRouter,再由MySQLRouter返回给客户端应用程序。3.3.mysqlrouter主要功能MySQLRouter的主要用途是读写分离、主备自动切换、负载均衡、连接池等。4.Mycat官网:http://www.mycat.org。cn/4.1.mycat介绍Mycat基于开源cobar进化而来,对cobar代码进行了全面重构,网络模块使用NIO进行重构,并优化了Buffer核心,增强了aggregation和Join等基础特性,并兼容大多数数据库成为通用的数据库中间件。1.4版本后,完全脱离了基础的cobar核心,结合Mycat集群管理、自动扩展、智能优化,成为一个高性能的中间件。一个完全开源的,面向企业应用开发的大型数据库集群支持事务,ACID,可替代MySQL的增强型数据库企业级数据库,可视为MySQL集群,替代昂贵的Oracle集群融合内存缓存技术,NoSQL技术,HDFS大数据新SQLServer结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品一种新颖的数据库中间件产品语言,跨平台,跨数据库的通用中间件代理。基于心跳的自动故障转移,支持读写分离,支持MySQL主从,galeracluster集群。支持基于Nio实现的MySQL集群、Percona集群或MariaDB集群的Galera,有效管理线程,解决高并发问题。支持数据的多切片自动路由和聚合,支持sum、count、max等常用聚合函数。支持单库内任意join,支持跨库2表join,甚至支持基于caltlet的多表join。通过全局表和ER关系支持分片策略,实现高效的多表连接查询。支持多租户场景。支持分布式事务(弱xa)。支持全局序列号,解决分布式下主键生成问题。分片规则丰富,插件化开发,易于扩展。强大的网络,命令行监控。前端支持作为mysq的通用代理,后端JDBC方式支持Oracle、DB2、SQLServer、mongodb、Sequoia。支持密码加密支持服务降级支持IP白名单支持SQL黑名单,SQL注入攻击拦截支持分表(1.6)基于ZooKeeper管理的Cluster,在线升级,扩容,智能优化,大数据处理(2.0开发版)。Mysql+mycat架构,请戳Mysql+Mycat实现数据库主从同步和读写分离5.Cobar官网:https://github.com/alibaba/co...5.1.cobar介绍)的中间件分布式服务,可以让传统的数据库得到很好的线性扩展,看起来还是数据库的样子,对应用程序是透明的。产品在阿里巴巴稳定运行3年多。接管3000多个MySQL数据库的架构。该集群每天处理超过50亿个在线SQL请求。该集群每天处理超过TB级的在线数据流量。5.2.cobar架构5.3.Cobar现状2013年,阿里的Cobar在社区使用过程中发现了一些严重的问题和使用限制。后来mycat在cobar的基础上进行了改进,是目前cobar的换代版本,并且从2013年开始就没有版本更新了。6.Amoeba官网:http://docs.hexnova.com/amoeba/6.1。amoeba介绍Amoeba(阿米巴)项目,开源框架在2008年开始发布一个AmoebaforMysql软件。这个软件专门用于MySQL的分布式数据库前端代理层。主要作为应用层访问MySQL时的SQL路由功能,重点开发分布式数据库代理层(DatabaseProxy)。它位于客户端和数据库服务器之间,对客户端是透明的。具有负载均衡、高可用、SQL过滤、读写分离,可以将相关数据路由到目标数据库,可以并发请求多个数据库合并结果。通过Amoeba,可以完成多数据源的高可用、负载均衡、数据切片等功能。7.Mysql代理7.1.mysql代理简介MySQL代理是您的客户端和MySQL服务器之间的一个简单程序,它可以监视、分析或改变它们之间的通信。它灵活且不受限制,常见的用途包括:负载均衡、故障、查询分析、查询过滤和修改等。MySQLProxy就是这样一个中间层代理。简单的说,MySQLProxy是一个连接池,负责将前台应用的连接请求转发给后台数据库,并通过lua脚本实现复杂的连接控制和过滤,从而实现读写分离和负载均衡。对于应用来说,MySQLProxy是完全透明的,应用只需要连接到MySQLProxy的监听端口即可。当然,这样的代理机可能会成为单点故障,但是可以使用多台代理机进行冗余,可以在应用服务器的连接池配置中配置多台代理机的连接参数。MySQLProxy比较强大的功能之一就是实现了“读写分离”。基本原则是让主库处理事务查询,让从库处理SELECT查询。数据库复制用于将事务查询引起的更改同步到集群中的从数据库。7.2.mysqlproxy现状自mysql官网出现mysqlrouter以来,mysqlproxy已经停止维护。Mysql代理架构实践:ProxySQL+Mysql实现数据库读写分离实践8.客户端分片8.1.clientsharding简介程序客户端分库分表。即在程序中直接拆分数据库和表,比如用户表。根据用户的UID,比如13678789,按照最后一位,可以从0到9分成10个数据库,尾号为0的存入db_user_0数据库,尾号为0的存入db_user_0数据库1存储在db_user_1数据库中。选择相同时也是如此。然后根据倒数第二个数字,可以从0到9拆分成10张表,按照倒数第二个尾号写入对应的表。例如将13678789的UID信息写入到db_user_9数据库的table_user_8表中。8.2.优点(1)不需要使用中间件,对性能没有影响(2)通过代码控制,可定义性强如果你实力强或者有DBA,可以使用clientsharding。mysqlrouter感觉还不是很成熟。至于其他中间件作者,他们不会再更新了。只要没有历史问题,最好不要使用。文章为作者原创投稿。作者:西门飞冰,90后IT男,一直在北京工作,热爱运动,热爱冒险,热爱旅游。微信关注农民工技术之路公众号对话回复关键字:1024即可获取最新技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程,Java实战项目,架构师综合教程,架构师实战项目,大数据,Docker容器,ELKStack,机器学习,BAT面试精讲视频等。

最新推荐
猜你喜欢