http://www.cnblogs.com/taoxinrui/p/6782791.html
http://www.tuicool.com/articles/A77R3m
http://blog.csdn.net/kingice1014/article/details/52344297
功能 | Cobar | Cobar-client | TDDL | Sharding-JDBC |
分库 | 有 | 有 | 未开源 | 有 |
分表 | 无 | 无 | 未开源 | 有 |
中间层 | 是 | 否 | 否 | 否 |
ORM支持 | 任意 | 仅MyBatis | 任意 | 任意 |
数据库支持 | 仅MySQL | 任意 | 任意 | 任意 |
异构语言 | 可 | 仅Java | 仅Java | 仅Java |
外部依赖 | 无 | 无 | Diamond | 无 |
(一)关键问题
1.读写分离
2.分库分表
3.类别
- lib库
1)业务直接到数据库,少一层proxy效率更高
2)没有proxy的lvs的单点问题
- proxy
1)统一管理所有到数据库的连接,连接复用
2)基础查询功能抽象,减少代码耦合
3)易于实现监控、数据迁移、连接管理等功能
(二)sharding-jdbc(开源,lib)
当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架
- 功能
1)以jar包形式提供服务
2)分片灵活,支持等号、between、in等***度分片
3)sql解析,支持聚合、分组、排序、limit、or等
- 结构
- 特点
1)分片规则:策略自定义、复数分片数
2)JDBC规范重写:针对DataSource、Connection、Statement、PreparedStatement和ResultSet接口封装
3)sql解析:druid
4)sql改写:修改逻辑表名->真实表名;替换不支持的功能,如:avg->sum和count
5)sql路由:单表路由、binding表路由、笛卡尔积路由
6)sql执行:多线程并发执行sql
7)结果归并:遍历类、排序类(归并排序)、聚合类(比较型、累加型、平均型)、分组类
(三)mycat(开源,proxy)
社区爱好者在阿里cobar基础上进行二次开发,解决了cobar的一些问题,且加入了新的功能。
- 功能
1)遵守mysql原生协议
2)基于心跳的自动故障切换
3)支持读写分离,支持mysql主从
4)支持sum、count、max等聚合,支持跨库分页
5)支持服务降级
6)安全,IP白名单、sql注入攻击拦截、prepare预编译
- 原理
拦截:分片分析、路由分析、读写分离分析、缓存分析
(四)DBproxy(开源,proxy)
针对atlas进行改进,形成了新的高可靠、高可用企业级数据库中间件DBProxy
- 功能
1)读写分离
2)负载均衡
3)slave故障感知&摘除
4)连接池
5)自定义sql拦截&过滤
6)流量分组&控制
7)监控状态
(五)atlas
360团队基于mysql proxy把lua用c改写,在高并发下经常会挂掉。
(六)oneproxy(不开源,proxy)
基于mysql协议的数据库中间件。利用c进行开发的,专注于性能和稳定性。
- 功能
透明sql路由(实现后端mysql数据库的集群化部署)和流量分析(为上层应用和底层数据库集群提供丰富的性能监控功能)。
1)复用数据库连接,降低数据库并发连接数
2)即时发现和剔除不可用的后端节点,转发应用请求实现高效故障隔离
3)内置守护进程模式和ha vip机制,确保高可用
4)查询语句分离,跨分片结果集合并,根据分片并行执行sql
5)读写分离
6)对sql语句进行安全检查,拒绝危险的DDL操作
7)分别设置前端应用和后端数据库的sql请求频率,实现QoS控制
8)实时透明分析流量,实时统计sql和事务的运行时间,分析事务的sql结构
- 特点
语言:C&C++开发
网络事件:libevent框架
内存分配:jemalloc优化
QPS:单实例支持40W
连接池:透明连接池的功能,具备mysqk企业版连接池效果
主备:实现透明的读写分离路由
安全:sql请求类别;请求IP;每个sql请求实时检查&拦截
流量分析:IP维度、事务维度展示&分析
稳定:内置高可用、也可与zookeeper等配合
(七)vitess
Youtube上产使用的,架构复杂
目前市面上中间件种类很多种 先看下各种中间件背景:
Cobar:
阿里巴巴B2B开发的关系型分布式系统,管理将近3000个mysql实例。 在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护 了,阿里也开发了tddl替代cobar。
MyCAT:
社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
OneProxy:
数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。
Vitess:
这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。
Kingshard:
Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用Go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
Atlas:
360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。
MaxScale与MySQL Route:
这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。
MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。
这两个中间件后面也会跟进测试下,看下效果如何。