1 背景
作为一线互联网的架构师,数据库存储是必不可的一个知识领域,而MySQL是数据库存储层最常用的组件之一。
随着互联网的不断发展,大规模流量场景的广泛应用,单单掌握MySQL技术是远远不够的。数据持久化还需要能应对以下复杂场景:
- 读写分离场景:需要一主多从的架构(写主读从),支持读写请求的自动负载,支持故障驱逐和主从自动切换等,
- 分库分表场景:随着数据库规模的变大,检索性能会下降,所以需要,支持横向(Scale Out)和 纵向(Scale Up)的分库分表和跨库跨表检索
- 权限控制:针对不同的用户或者角色组进行操作权限控制
- 监控告警:多维度对存储服务的可用性、性能、读写比、请求量级变化 进行实时监控,如果感知异常,及时预警,避免线上故障扩大化
- 日志审计:大规模业务场景,经常出现多业务公用存储费服务,如果存储层能够自行进行日志审计,那在每个业务侧就可以避免重复造轮子
- 并发控制:互联网下流量规模都是巨量的,具备并发控制能力,可以确保纠正由并发操作导致的错误,以保护数据库的完整性。
当然这些能力并不是MySQL天然支持的,需要一些中间件的支持,所以我们调研了业内常用的一些中间件的,从业务需求驱动,看看各有哪些,是能够满足的。
2 业务需求驱动
从问题出发,看看行业内对存储层有哪些共同的痛点,然后根据这些痛点输出解决方案
问题 |
说明 |
解决方案 |
连接池管理 |
客户端连接无限制,不可复用,不可隔离,业务间互相影响(如单个服务超载调用可能导致雪崩) |
归口到Proxy统一管理,提供连接池、连接数限制、重试、超时断开保护等能力 |
读写分离机制 |
需要为业务提供读写分离机制 |
数据服务存在主从部署模式,业务在路有时Porxy自动区分读写,写路由到主存储服务,读路由到从存储服务 |
负载均衡机制 |
需要为业务提供备机负载均衡 |
读能力能自动均衡的负载到多个从服务器上 |
数据库分库分表sharding |
数据量比较大的场景下,需提供业务分库分表能力 |
调用方屏蔽分表细节,跟单表操作一直。Proxy实现对分库分表的核心细节,不同组件会有一些限制(如带分表字段,不支持跨库join等) |
故障切换 |
主/备发生宕机等故障,需业务来处理故障切换 |
屏蔽后端DB故障问题,自动故障切换 |
权限 |
一方面账号权限放太开,没有最小化权限;另一方面机器迁移等都需手动申请权限较麻烦 |
通过user/pwds/ip等做权限控制,最小化权限。机器迁移自动权限扩缩容。 |
安全 |
需业务自己处理sql注入,核心数据加密等问题 |
Proxy加一层保护,像sql注入,sql黑名单(如sleep/drop),数据加密等 |
日志审计 |
Mysql数据被修改了,找不到是被谁修改的 |
提供便捷的日志审计,日志流控和动态变更,方便定位查询 |
监控告警 |
需业务根据自己需求搭建监控系统 |
提供连接数/慢查询数/Sql延迟/Sql语句统计/DB负载等监控告警 |
事务 |
部分业务会使用事务能力 |
支持单机/分布式事务。事务是mysql中间件最难做的点,单机事务基本中间件都能支持到,分布式事务不同中间件实现程度也不同 |
缓存 |
有DB数据缓存的场景,都需业务单独来做 |
Proxy提供一些通用可配置的缓存策略(如基于查询、用户、schema等) |
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中间件的功能特性。
后面我们对这些数据库中间件一个个详细拆解下,看看他能解决我们哪些痛点。