数据库系列:业内主流MySQL数据中间件梳理

本文主要是介绍数据库系列:业内主流MySQL数据中间件梳理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 背景

作为一线互联网的架构师,数据库存储是必不可的一个知识领域,而MySQL是数据库存储层最常用的组件之一。随着互联网的不断发展,大规模流量场景的广泛应用,单单掌握MySQL技术是远远不够的。数据持久化还需要能应对以下复杂场景:

  • 读写分离场景:需要一主多从的架构(写主读从),支持读写请求的自动负载,支持故障驱逐和主从自动切换等,

  • 分库分表场景:随着数据库规模的变大,检索性能会下降,所以需要,支持横向(Scale Out)和 纵向(Scale Up)的分库分表和跨库跨表检索

  • 权限控制:针对不同的用户或者角色组进行操作权限控制

  • 监控告警:多维度对存储服务的可用性、性能、读写比、请求量级变化 进行实时监控,如果感知异常,及时预警,避免线上故障扩大化

  • 日志审计:大规模业务场景,经常出现多业务公用存储费服务,如果存储层能够自行进行日志审计,那在每个业务侧就可以避免重复造轮子

  • 并发控制:互联网下流量规模都是巨量的,具备并发控制能力,可以确保纠正由并发操作导致的错误,以保护数据库的完整性。

当然这些能力并不是MySQL天然支持的,需要一些中间件的支持,所以我们调研了业内常用的一些中间件的,从业务需求驱动,看看各有哪些,是能够满足的。

2 业务需求驱动

从问题出发,看看行业内对存储层有哪些共同的痛点,然后根据这些痛点输出解决方案

3 常用MySQL中间件介绍

3.1 ProxySQL

介绍:ProxySQL是使用C++开发的一个功能强大的数据库代理,具有连接池、读写分离、负载均衡、故障切换、SQL路由、多协议支持、可扩展性、安全性、监控和日志以及易于配置和管理等特性。具备轻量、高性能(千亿级数据处理能力)等优势,功能完善,能满足中间件所需的绝大多数功能

image

相关链接

  • 官网:ProxySQL - A High Performance Open Source MySQL Proxy

  • Github:GitHub - sysown/proxysql: High-performance MySQL proxy with a GPL license.

特性介绍

  1. 连接池:ProxySQL支持连接池,可以有效地管理数据库连接,减少连接和断开连接的开销。

  2. 读写分离:ProxySQL可以实现读写分离,将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。

  3. 负载均衡:ProxySQL支持负载均衡,可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。

  4. 故障切换:ProxySQL支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。

  5. SQL路由:ProxySQL支持SQL路由,可以根据不同的SQL语句类型和条件,将请求分发到不同的数据库服务器上,实现精细化的路由控制。

  6. 多协议支持:ProxySQL支持多种数据库协议,如MySQL、PostgreSQL、Oracle等,可以轻松地与其他数据库系统集成。

  7. 可扩展性:ProxySQL支持横向扩展,可以通过添加更多的代理实例来扩展系统的处理能力。

  8. 安全性:ProxySQL支持SSL/TLS加密通信,可以保证数据传输的安全性。

  9. 监控和日志:ProxySQL提供了丰富的监控和日志功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。

  10. 易于配置和管理:ProxySQL的配置和管理相对简单,可以通过配置文件或命令行工具进行配置和管理。

3.2 MaxScale

介绍:MaxScale是MariaDB开发的一个MySQL数据中间件。它是一种数据库智能代理服务,旨在扩展MariaDB Server的高可用性、可伸缩性和安全性。同时,MaxScale通过将其与基础数据库基础架构分离,有助于简化应用程序开发。

image

相关链接

  • 官网:MariaDB Enterprise Open Source Database & SkySQL MariaDB Cloud | MariaDB

  • Github:GitHub - mariadb-corporation/MaxScale: An intelligent database proxy.

特性介绍

特性介绍基于10.3.1以上版本

  1. 读写分离:支持读写分离模块,能够解析SQL语句,从而把对应的请求转发到对应的服务器上。

  2. 自动切换:能够根据主从状态实现写库的自动切换。

  3. 插件支持:支持多种插件,如认证、协议、路由、监控和日志与过滤插件,这些插件可以根据需要进行配置和扩展。

  4. 高可用性:通过路由插件实现负载均衡的功能,同时监控插件可以对各个数据库服务器进行监控,以确保系统的可用性和稳定性。

  5. 安全性:提供简单的数据库防火墙功能,对SQL进行过滤和容错,以增强系统的安全性。

  6. 可扩展性:MaxScale的体系结构支持横向扩展,可以通过添加更多的节点来提高系统的处理能力和容量。

3.3 DBProxy

介绍:DBProxy是一个位于前端应用与后端MySQL数据库之间的中间件,它使得应用程序员无需再关心读写分离、分表等与MySQL相关的细节,可以专注于编写业务逻辑,同时使得DBA的运维工作对前端应用透明,上下线DB前端应用无感知。DBProxy是由美团DBA团队研发和维护的一个基于MySQL协议的数据中间层。它在奇虎360公司开源的Atlas基础上,优化了部分问题,并且添加了很多特性。而Atlas是在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

相关链接

  • 介绍:美团的DBProxy实践 - 美团技术团队

  • Github:GitHub - Meituan-Dianping/DBProxy

特性介绍

  1. 读写分离:DBProxy可以将读操作和写操作分发到不同的数据库服务器上,以提高系统的性能和可靠性。

  2. 负载均衡:DBProxy可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。

  3. 支持分表:DBProxy可以支持分表,对数据进行水平和垂直拆分,以减轻单一数据库的压力。

  4. IP过滤:DBProxy可以设置IP过滤,限制特定IP的访问权限,提高系统的安全性。

  5. sql语句黑名单:DBProxy可以设置SQL语句黑名单,禁止执行某些特定的SQL语句,以防止潜在的安全风险。

  6. DBA平滑下线DB:DBProxy可以实现在不影响前端应用的情况下,平滑地下线某个数据库服务器。

  7. 从库流量配置:DBProxy可以对从库的流量进行配置,实现主从流量分离,提高系统的可用性。

  8. 动态加载配置项:DBProxy可以动态加载配置项,方便用户根据实际需求进行灵活的配置和管理。

3.4 MyCat

介绍:MyCat源于阿里巴巴的Cobar项目,国内开源软件爱好者对Cobar项目进行了改进,加入了许多新的功能在其中,并将其命名为MyCat。目前MyCAT社区活跃度很高,有很多公司采用了MyCat技术,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。算是发展比较好的。

相关链接

  • 官网:http://www.mycat.io/

  • Github:MyCATApache · GitHub

特性介绍

  1. 分布式架构:采用分布式架构,可以水平扩展,支持大规模数据存储和处理。

  2. SQL解析和优化:对SQL进行解析和优化,可以提高查询性能和效率。

  3. 数据分片:支持数据分片,可以将大表水平分割为多个小表,提高数据访问的效率和可扩展性。

  4. 读写分离:支持读写分离,可以将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。

  5. 故障切换:支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。

  6. 监控和管理:MyCat提供丰富的监控和管理功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。

3.5 TDDL

介绍:TDDL是淘宝开发的一种基于Java语言的分布式数据库系统,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的jdbc datasource实现,具有线性水平扩展能力、海量数据存储访问能力、高性价比、数据存储平滑扩容、分库分表、透明读写分离、成熟的管控系统等特点。

相关链接

  • Github:GitHub - alibaba/tb_tddl

特性介绍

  1. 线性水平扩展能力:TDDL能够实时提升数据库处理能力,提高访问效率,峰值TPS可达150万+,轻松应对高并发的实时交易场景。

  2. 海量数据存储访问:企业客户随着业务的快速发展,业务数据增长迅猛,会产生超过单机数据库存储能力极限的数据,造成数据库容量瓶颈,限制业务发展。TDDL可以线性扩展存储空间,提供PB级存储能力,可广泛应用于工业制造、智能家居、车联网等超大规模数据存储访问场景。

  3. 高性价比数据库解决方案:初创型企业初期发展阶段技术积累相对比较薄弱,资金投入有限,业务发展快,数据库的稳定性风险高。TDDL能够利用普通服务器提供阿里巴巴双十一同等处理能力的高性价比国产数据库解决方案。

  4. 数据存储平滑扩容:当应用单机存储(MySQL)出现容量或性能瓶颈时,TDDL提供在线数据扩容功能(该功能需要结合阿里其它内部中间件使用)。

  5. 分库分表:TDDL支持分库分表功能,只需选择拆分键,就可以按照拆分键进行分库分表的访问。

  6. 透明读写分离:通过使用MySQL只读实例或者MySQL备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入。

  7. 数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,TDDL支持存储容量在线扩展,扩容无需改造应用,扩容进度支持可视化跟踪。

  8. 成熟的管控系统:通过数据库运维支撑系统保障数据库的正常有序运转。

4 总结

大致介绍了互联网场景下数据存储服务的需求,以及当下业内知名MySQL中间件的功能特性。后面我们对这些数据库中间件一个个详细拆解下,看看他能解决我们哪些痛点。

文章转载自:Hello-Brand

原文链接:https://www.cnblogs.com/wzh2010/p/16098579.html

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

这篇关于数据库系列:业内主流MySQL数据中间件梳理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/523208

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S