数据库|数据库 中间件调研

目标

  • 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解答速度快

    推荐阅读