数据库|数据库 中间件调研
目标
- db虚拟化 让mysql对业务线透明,业务线不再需要知道db的真实ip,port,主从关系,读写关系,高可用等
- 支持mysql
- 支持mongo(待定)
- 统一接入入口: 所有的业务线,对db的访问,都只有一个入口,由数据库中间层来进行权限验证,由中间件来路由请求
- 保持访问接口:
- java应用;jdbc
- sqlpad:
- 数据团队:jdbc
- rubby:mysql2
- 屏蔽读写分离:业务层不需要在关注读写分离,由中间件来进行读写请求路由
- 支持高可用
- 故障自动发现:下游数据库挂了,能够自动发现问题,并报警周知相关人员(prometheus已实现)
- 故障自动转移:
- 主库挂了,能够自动切换,或者屏蔽写请求(MHR已实现自动切主、自动修改DNS)
- 从库挂了,能够自动自动切换读请求量流量
- 中间件挂了,自动切换中间件流量,高可用
- 可运维的
- 支持一些统计数据的展现
- 支持一些管理命令
- 支持页面化的运维
- Mysql-proxy
- mysql官方的提供中间件框架
- 已不再对外开放
- Atlas
- 360开源的服务端中间件
- 基于Mysql-proxy基础开发
- 多年未维护
- Cobar(服务端中间件)
- 阿里开源的服务端中间件
- 主要针对分布式数据库场景而设计(支持分片、不支持主从模式的读写分离)
- 多年未维护
- TDDL
- 淘宝开源的mysql客户端中间层(client side/Java jar)
- 主要针对分布式数据库场景而设计(支持分片、支持读写分离)
- 多年未维护
- Mycat
- 服务端中间件,在cobar基础上开发
- 功能十分丰富,很重
- 据大量社区使用者说,坑比较多
- 社区活跃
- Mysql-router
- mysql官方的提供中间件
- mysql-proxy的替代品
- 类似一个LVS,轻量级,实现透明的读写分离(需要依赖客户端实现读写分离)、负载均衡、集群扩展等功能
- Cetus 正在搭建、试用
- 网易开源,在Atlas基础上二次开发
- 根据应用场景不同,分读写版和分库版
- 用户不多,但近期更新活跃,qq群内、git issue解答速度快
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 数据库设计与优化
- 数据库总结语句
- MySql数据库备份与恢复
- 数据库|SQL行转列方式优化查询性能实践
- MySQL数据库的基本操作
- springboot整合数据库连接池-->druid
- Android|Android sqlite3数据库入门系列
- Python3|Python3 MySQL 数据库连接
- 达梦数据库|DM8表空间备份恢复