目标
- 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解答速度快
网友评论