如何调研使用一款数据访问层中间件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsoftchenfei/article/details/77740665

做技术的同仁可能一直会有这样的处境,这个问题又发送了,目前不是最佳做法,怎么破?怎么会做出优秀的方案?当然这些都是有一些套路。下面将以如何调研使用一款数据访问层中间件展开分析。

1.背景

2.业界调研

业界组件 简介 实现方案 实现协议 优点 缺点 参考
mysql-proxy mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server,它使用mysql协议,任何连接mysql的上游无需任何更改即可迁移至mysql-proxy上。 代理方式
 
使用lua语言实现的中间代理服务 支持sql拦截与修改、 性能分析与监控、 读写分离、 请求路由、 不支持分库分表 ref
Atlas Qihoo 360开发维护的一个基于MySQL协议的数据中间层项目。它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通信,同时作为客户端与MySQL通信 代理方式
 
对mysql-proxy进行了较大的改进 实现读写分离,功能简单,性能跟稳定性较好

不支持分布式分表;

分表算法不够完善;

ref
Cobar Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明。 代理方式
 
实现mysql客户端协议 实现动态数据源、分库分表

使用golang时,事务支持性不好;

不支持读写分离;

ref
Zebra Zebra是原点评内部使用数据源、DAO以及监控等和数据库打交道的中间件集 非代理方式
 
jdbc协议层上开发的数据库访问层中间件 实现动态数据源、读写分离、分库分表、CAT监控 接入较为复杂,当时只支持c3p0、Druid、Tomcat JDBC等连接池,且分库分表算法只支持Groovy表达式不易扩展 ref
MTAtlas 原美团DBA团队在开源Atlas基础上做的一系列升级改造 代理方式 在Atlas基础上支持了分库分表 在读写分离、单库分表的基础上,完成了分库分表的功能开发 当时还处于测试阶段,暂不推荐业务方使用  

注:代理方式需要

3.设计目标

性能、可拓展性

4.功能特性

  • 动态数据源
  • 读写分离
  • 分布式唯一主键生成器
  • 分库分表
  • 连接池及SQL监控
  • 动态化配置

5.逻辑结构

6.具体实现(集成方案)

最后,确定方案还是需要深度思考,选择合适的时机及项目进行验证落地。

猜你喜欢

转载自blog.csdn.net/itsoftchenfei/article/details/77740665