版权声明:本文为博主原创文章,未经博主允许不得转载。 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.具体实现(集成方案)
最后,确定方案还是需要深度思考,选择合适的时机及项目进行验证落地。