数据库系列:业内主流 MySQL 数据中间件梳理
1 背景
作为一线互联网的架构师,数据库存储是必不可的一个知识领域,而 MySQL 是数据库存储层最常用的组件之一。随着互联网的不断发展,大规模流量场景的广泛应用,单单掌握 MySQL 技术是远远不够的。数据持久化还需要能应对以下复杂场景:
读写分离场景:需要一主多从的架构(写主读从),支持读写请求的自动负载,支持故障驱逐和主从自动切换等,
分库分表场景:随着数据库规模的变大,检索性能会下降,所以需要,支持横向(Scale Out)和 纵向(Scale Up)的分库分表和跨库跨表检索
权限控制:针对不同的用户或者角色组进行操作权限控制
监控告警:多维度对存储服务的可用性、性能、读写比、请求量级变化 进行实时监控,如果感知异常,及时预警,避免线上故障扩大化
日志审计:大规模业务场景,经常出现多业务公用存储费服务,如果存储层能够自行进行日志审计,那在每个业务侧就可以避免重复造轮子
并发控制:互联网下流量规模都是巨量的,具备并发控制能力,可以确保纠正由并发操作导致的错误,以保护数据库的完整性。
当然这些能力并不是 MySQL 天然支持的,需要一些中间件的支持,所以我们调研了业内常用的一些中间件的,从业务需求驱动,看看各有哪些,是能够满足的。
2 业务需求驱动
从问题出发,看看行业内对存储层有哪些共同的痛点,然后根据这些痛点输出解决方案
3 常用 MySQL 中间件介绍
3.1 ProxySQL
介绍:ProxySQL 是使用 C++开发的一个功能强大的数据库代理,具有连接池、读写分离、负载均衡、故障切换、SQL 路由、多协议支持、可扩展性、安全性、监控和日志以及易于配置和管理等特性。具备轻量、高性能(千亿级数据处理能力)等优势,功能完善,能满足中间件所需的绝大多数功能
相关链接
特性介绍
连接池:ProxySQL 支持连接池,可以有效地管理数据库连接,减少连接和断开连接的开销。
读写分离:ProxySQL 可以实现读写分离,将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
负载均衡:ProxySQL 支持负载均衡,可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
故障切换:ProxySQL 支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
SQL 路由:ProxySQL 支持 SQL 路由,可以根据不同的 SQL 语句类型和条件,将请求分发到不同的数据库服务器上,实现精细化的路由控制。
多协议支持:ProxySQL 支持多种数据库协议,如 MySQL、PostgreSQL、Oracle 等,可以轻松地与其他数据库系统集成。
可扩展性:ProxySQL 支持横向扩展,可以通过添加更多的代理实例来扩展系统的处理能力。
安全性:ProxySQL 支持 SSL/TLS 加密通信,可以保证数据传输的安全性。
监控和日志:ProxySQL 提供了丰富的监控和日志功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。
易于配置和管理:ProxySQL 的配置和管理相对简单,可以通过配置文件或命令行工具进行配置和管理。
3.2 MaxScale
介绍:MaxScale 是 MariaDB 开发的一个 MySQL 数据中间件。它是一种数据库智能代理服务,旨在扩展 MariaDB Server 的高可用性、可伸缩性和安全性。同时,MaxScale 通过将其与基础数据库基础架构分离,有助于简化应用程序开发。
相关链接
特性介绍
特性介绍基于 10.3.1 以上版本
读写分离:支持读写分离模块,能够解析 SQL 语句,从而把对应的请求转发到对应的服务器上。
自动切换:能够根据主从状态实现写库的自动切换。
插件支持:支持多种插件,如认证、协议、路由、监控和日志与过滤插件,这些插件可以根据需要进行配置和扩展。
高可用性:通过路由插件实现负载均衡的功能,同时监控插件可以对各个数据库服务器进行监控,以确保系统的可用性和稳定性。
安全性:提供简单的数据库防火墙功能,对 SQL 进行过滤和容错,以增强系统的安全性。
可扩展性:MaxScale 的体系结构支持横向扩展,可以通过添加更多的节点来提高系统的处理能力和容量。
3.3 DBProxy
介绍:DBProxy 是一个位于前端应用与后端 MySQL 数据库之间的中间件,它使得应用程序员无需再关心读写分离、分表等与 MySQL 相关的细节,可以专注于编写业务逻辑,同时使得 DBA 的运维工作对前端应用透明,上下线 DB 前端应用无感知。DBProxy 是由美团 DBA 团队研发和维护的一个基于 MySQL 协议的数据中间层。它在奇虎 360 公司开源的 Atlas 基础上,优化了部分问题,并且添加了很多特性。而 Atlas 是在 MySQL 官方推出的 MySQL-Proxy 0.8.2 版本的基础上,修改了大量 bug,添加了很多功能特性。
相关链接
特性介绍
读写分离:DBProxy 可以将读操作和写操作分发到不同的数据库服务器上,以提高系统的性能和可靠性。
负载均衡:DBProxy 可以将请求分发到多个数据库服务器上,实现负载均衡,提高系统的吞吐量和响应速度。
支持分表:DBProxy 可以支持分表,对数据进行水平和垂直拆分,以减轻单一数据库的压力。
IP 过滤:DBProxy 可以设置 IP 过滤,限制特定 IP 的访问权限,提高系统的安全性。
sql 语句黑名单:DBProxy 可以设置 SQL 语句黑名单,禁止执行某些特定的 SQL 语句,以防止潜在的安全风险。
DBA 平滑下线 DB:DBProxy 可以实现在不影响前端应用的情况下,平滑地下线某个数据库服务器。
从库流量配置:DBProxy 可以对从库的流量进行配置,实现主从流量分离,提高系统的可用性。
动态加载配置项:DBProxy 可以动态加载配置项,方便用户根据实际需求进行灵活的配置和管理。
3.4 MyCat
介绍:MyCat 源于阿里巴巴的 Cobar 项目,国内开源软件爱好者对 Cobar 项目进行了改进,加入了许多新的功能在其中,并将其命名为 MyCat。目前 MyCAT 社区活跃度很高,有很多公司采用了 MyCat 技术,涵盖银行、电信、电子商务、物流、移动应用、O2O 的众多领域和公司。算是发展比较好的。
相关链接
特性介绍
分布式架构:采用分布式架构,可以水平扩展,支持大规模数据存储和处理。
SQL 解析和优化:对 SQL 进行解析和优化,可以提高查询性能和效率。
数据分片:支持数据分片,可以将大表水平分割为多个小表,提高数据访问的效率和可扩展性。
读写分离:支持读写分离,可以将读操作和写操作分发到不同的数据库服务器上,提高系统的性能和可靠性。
故障切换:支持故障切换,当某个数据库服务器出现故障时,可以自动将请求切换到其他可用的数据库服务器上,保证系统的可用性和稳定性。
监控和管理:MyCat 提供丰富的监控和管理功能,可以实时监控系统的运行状态和性能指标,方便进行故障排查和性能优化。
3.5 TDDL
介绍:TDDL 是淘宝开发的一种基于 Java 语言的分布式数据库系统,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource 实现,具有线性水平扩展能力、海量数据存储访问能力、高性价比、数据存储平滑扩容、分库分表、透明读写分离、成熟的管控系统等特点。
相关链接
特性介绍
线性水平扩展能力:TDDL 能够实时提升数据库处理能力,提高访问效率,峰值 TPS 可达 150 万+,轻松应对高并发的实时交易场景。
海量数据存储访问:企业客户随着业务的快速发展,业务数据增长迅猛,会产生超过单机数据库存储能力极限的数据,造成数据库容量瓶颈,限制业务发展。TDDL 可以线性扩展存储空间,提供 PB 级存储能力,可广泛应用于工业制造、智能家居、车联网等超大规模数据存储访问场景。
高性价比数据库解决方案:初创型企业初期发展阶段技术积累相对比较薄弱,资金投入有限,业务发展快,数据库的稳定性风险高。TDDL 能够利用普通服务器提供阿里巴巴双十一同等处理能力的高性价比国产数据库解决方案。
数据存储平滑扩容:当应用单机存储(MySQL)出现容量或性能瓶颈时,TDDL 提供在线数据扩容功能(该功能需要结合阿里其它内部中间件使用)。
分库分表:TDDL 支持分库分表功能,只需选择拆分键,就可以按照拆分键进行分库分表的访问。
透明读写分离:通过使用 MySQL 只读实例或者 MySQL 备机实现读写分离,帮助应用解决事务、只读实例或者备机挂掉、指定主备访问等细节问题,对应用无侵入。
数据存储平滑扩容:当出现数据存储容量和访问量瓶颈时,TDDL 支持存储容量在线扩展,扩容无需改造应用,扩容进度支持可视化跟踪。
成熟的管控系统:通过数据库运维支撑系统保障数据库的正常有序运转。
4 总结
大致介绍了互联网场景下数据存储服务的需求,以及当下业内知名 MySQL 中间件的功能特性。后面我们对这些数据库中间件一个个详细拆解下,看看他能解决我们哪些痛点。
文章转载自:Hello-Brand
评论