数据库系列:业内主流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

相关文章

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一