Cobar 概述
Cobar 是由 Alibaba 开源的 MySQL 分布式处理中间件,它可以在分布式的环境下看上去像传统数据库一样提供海量数据服务。
Cobar 解决的问题
分布式:Cobar 的分布式主要是通过将表放入不同的库来实现:
- Cobar 支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分
- Cobar 也支持将不同的表放入不同的库
- 多数情况下,用户会将以上两种方式混合使用
HA:在用户配置了 MySQL 心跳的情况下,Cobar 可以自动向后端连接的 MySQL 发送心跳,判断 MySQL 运行状
况,一旦运行出现异常,Cobar 可以自动切换到备机工作。但需要强调的是:
- Cobar 的主备切换有两种触发方式,一种是用户手动触发,一种是 Cobar 的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar 不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常
- Cobar 只检查 MySQL 主备异常,不关心主备之间的数据同步,因此用户需要在使用 Cobar 之前在 MySQL 主备上配置双向同步
功能约束
- 不支持跨库情况下的 join、分页、排序、子查询操作
- SET 语句执行会被忽略,事务和字符集设置除外
- 分库情况下,insert 语句必须包含拆分字段列名
- 分库情况下,update 语句不能更新拆分字段的值
- 不支持 SAVEPOINT 操作
- 暂时只支持 MySQL 数据节点
- 使用 JDBC 时,不支持 rewriteBatchedStatements=true 参数设置(默认为 false)
- 使用 JDBC 时,不支持 useServerPrepStmts=true 参数设置(默认为 false)
- 使用 JDBC 时,BLOB, BINARY, VARBINARY 字段不能使用 setBlob() 或 setBinaryStream() 方法设置参数
Cobar 组件
- Driver:MySQL JDBC 驱动的封装,实现对 Cobar Server 的负载均衡与高可用支持
- Server:请求处理(SQL 解析、路由、结果集合并)、集群
- Manager:Server 监控的 Web 应用
结论
- 解决了大数据量下的透明水平分表
- 必须使用封装过的 MySQL 驱动包 Cobar Driver,无框架要求
- 后端对 MySQL 是直接面向二进制协议的
- 基于 LL(2) 手写的 SQL 解析器
- 支持弱一致性事务(多库并行执行/提交)
- 不支持跨库 join、分页、排序、子查询、读写分离
- 在 MySQL 实例上没有 agent
- MySQL 主从数据同步使用 MySQL 解决方案
- 主异常时切换到从后主恢复,没有 failback,只能手动切换回主
- 后端对 MySQL 有连接池
- 支持跨地域
参考