360 Atlas

Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。

Altas架构:

Atlas是一个位于应用程序与MySQL之间,它实现了MySQL的客户端与服务端协议,作为服务端与应用程序通讯,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

主要功能:

1. 读写分离

2. 从库负载均衡

3. IP过滤

4. SQL语句黑白名单

5. 自动分表

(1)需带有分表字段。

(2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE语句。

(3)支持多个子表查询结果的合并和排序。

6.之前官方主要功能逻辑由使用lua脚本编写,效率低,Atlas用C改写,QPS提高,latency降低。

7.安全方面的提升

(1)通过配置文件中的pwds参数进行连接Atlas的用户的权限控制。

(2)通过client-ips参数对有权限连接Atlas的ip进行过滤。

(3)日志中记录所有通过Altas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行成功与否、执行所耗费的时间

8.平滑重启

通过配置文件中设置lvs-ips参数实现平滑重启功能,否则重启Altas的瞬间那些SQL请求都会失败。该参数前面挂接的lvs的物理网卡的ip,注意不是虚ip。平滑重启的条件是至少有两台配置相同的Atlas且挂在lvs之后。

https://github.com/Qihoo360/Atlas

Cobar

Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务。

Cobar的分布式主要是通过将表放入不同的库来实现:

支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分

支持将不同的表放入不同的库

多数情况下,用户会将以上两种方式混合使用。

Cobar 不支持将一张表,例如test表拆分成test_1, test_2, test_3.....放在同一个库中,必须将拆分后的表分别放入不同的库来实现分布式。

在用户配置了 MySQL 心跳的情况下,Cobar 可以自动向后端连接的 MySQL 发送心跳,判断 MySQL 运行状况,一旦运行出现异常,Cobar 可以自动切换到备机工作。

注意事项:

1. Cobar 的主备切换有两种触发方式,一种是用户手动触发,一种是 Cobar 的心跳语句检测到异常后自动触发。那么,当心跳检测到主机异常,切换到备机,如果主机恢复了,需要用户手动切回主机工作,Cobar不会在主机恢复时自动切换回主机,除非备机的心跳也返回异常。

2. Cobar 只检查 MySQL 主备异常,不关心主备之间的数据同步,因此用户需要在使用 Cobar 之前在 MySQL 主备上配置双向同步,详情可以参阅MySQL参考手册。

Cobar功能约束:

1. 不支持跨库情况下的join、分页、排序、子查询操作。

2. SELECT 语句执行会被忽略,事务和字符集设置除外。

3. 分库情况下,insert 语句必须包含拆分字段列名。

4. 分库情况下,update 语句不能更新拆分字段的值。

5. 不支持 SAVEPOINT 操作。

6. 暂时只支持 MySQL数据节点。

https://github.com/alibaba/cobar

Mycat

前身 Cobar,开源,较为活跃。

特点:

1.遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。

2.基于心跳的自动故障切换,支持读写分离,支持 MySQL 一双主多从,以及一主多从

3.有效管理数据源连接,基于数据分库,而不是分表的模式。

4.基于 NIO 实现,有效管理线程,高并发问题。

5.支持数据的多片自动路由与聚合,支持 sum , count , max 等常用的聚合函数。

6.支持2表 join,甚至基于 caltlet 的多表 join。

7.支持通过全局表,ER 关系的分片策略,实现了高效的多表 join 查询。

8.支持多租户方案。

9.支持分布式事务(弱xa)

10.支持全局序列号,解决分布式下的主键生成问题。

11.分片规则丰富,插件化开发,易于扩展。

12.强大的 web,命令行监控。

13.支持前端作为 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 。

集群基于 ZooKeeper 管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

https://github.com/myCATApache

TDDL

已经不再使用,下一代是 DDRS。

淘宝根据自己的业务特点开发了 TDDL (Taobao Distributed Data Layer 外号:头都大了 )框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource 实现,具有主备,读写分离,动态数据库配置等功能。

TDDL 通过部署在客户端的 jar 包,将用户的 SQL 路由到指定的数据库中。

功能:

数据库主备和动态切换

带权重的读写分离

单线程读重试

集中式数据源信息管理和动态变更

剥离的稳定 jboss 数据源

支持 MySQL 和 Oracle 数据库

基于 JDBC 规范,很容易扩展支持实现 JDBC 规范的数据源

无 Server,Client,Jar 形式存在,应用直连数据库

读写次数,并发度流程控制,动态变更

可分析的日志打印,日志流控,动态变更

TDDL动态数据源使用示例说明:http://rdc.taobao.com/team/jm/archives/1645

简介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/

TDDL源码:https://github.com/alibaba/tb_tddl

TDDL复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库分还未开源,还需要依赖diamond,不推荐使用。

DRDS

整合云服务,收费、Cobar、TDDL整合,商用,首选。

阿里分布式关系型数据库服务(Distribute Relational Database Service,简称DRDS)是一种水平拆分、可平滑扩缩容、读写分离的在线分布式数据库服务。前身为淘宝 TDDL,是近千个应用首选组件,已稳定服务了七年以上。

Heisenberg

整合 Cobar、TDDL,目前并不活跃,由百度员工个人编写。

功能:

分库分表与应用脱离,分库表如同使用单库表一样

减少 DB 连接数压力

热重启配置

可水平扩容

遵守 MySQL 原生协议

无语言限制,MySQLClient,C,Java等都可以使用

Heisenberg服务器通过管理命令可以查看,如连接数,线程池,结点等,并可以调整

https://github.com/songwie/heisenberg

Oceanus

用得较少,58 Oceanus 致力于打造一个功能简单、可依赖、易于上手、易于扩展、易于集成的解决方案,甚至是平台化系统。拥抱开源,提供各类插件机制集成其他开源项目,新手可以在几分钟内上手编程,分库分表逻辑不再与业务紧密耦合,扩容有标准模式,减少意外错误的发生 datanode:数据源节点。为一个数据源命名,配置链接属性、报警实现。

主要概念:

namenode:数据源的簇。为一组数据源命名,指定这组数据源的负载方式、访问模式、权重

table:映射表。匹配解析sql中的table名称,命中table标签的name属性值后,会执行约定的路由逻辑

bean:实体。由其他标签引用,实体类必须有无参的构造函数

tracker:监控埋点。涉及到计算和IO的功能点都有监控点,自定义一个埋点实现类,当功能耗时超出预期时会执行其中的回调函数,便于监控和优化系统

Vitess

较全 高大上,和开发中的 Mycat2.0 类似。谷歌开发的数据库中间件,集群基于 ZooKeeper 管理,通过 RPC 方式进行数据处理,总体分为,server,command line,gui监控 3部分。

https://github.com/youtube/vitess

OneProxy

商业、收费。

OneProxy 分布式中间件,是平民软件完全自主开发的分布式数据访问层,帮助用户在 MySQL/PostgreSQL 集群上快速搭建支持分库分表的分布式数据库中间件,也是一款具有 SQ L白名单(防 SQL 注入)及 IP 白名单功能的 SQL 防火墙软件。采用与 MySQL Proxy 一致的反向协议输出模式,对应用非常简单和透明易用,让用户畏惧的分库分表(Horizontal Partitioning)工作变得极其简单可控。基于 Libevent 机制实现,单个实例可以实现25万的 SQL 转发能力,用一个 OneProxy 节点可以带动整个 MySQL 集群。

MySQL中间件介绍的更多相关文章

  1. #研发中间件介绍#异步消息可靠推送Notify

    郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发   电商系统为什么需要 NotifyServer? ...

  2. mysql中间件研究(Atlas,cobar,TDDL)

    mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开源中间件产品,Atlas ...

  3. MySQL中间件之ProxySQL(1):简介和安装

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL简介 之前的文章里,介绍了一个MySQL的中间件: ...

  4. mysql中间件研究(Atlas,cobar,TDDL)[转载]

    mysql中间件研究(Atlas,cobar,TDDL) mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差. ...

  5. MySQL中间件之ProxySQL_读写分离/查询重写配置

    MySQL中间件之ProxySQL_读写分离/查询重写配置 Posted on 2016-12-25 by mark blue, mark Leave a comment MySQL 1.闲扯几句 读 ...

  6. mysql 中间件

    http://f.dataguru.cn/thread-543718-1-1.html mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持 ...

  7. mysql中间件研究(tddl atlas cobar sharding-jdbc)

    mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等,但其不支持大数据量的分库分表且性能较差.下面介绍几款能代替其的mysql开源中间件产品,Atlas ...

  8. mysql中间件分享(Mysql-prxoy,Atlas,DBProxy,Amoeba,cobar,TDDL)

    hello 各位小伙伴大家好,我是小栈君,这期我们分享关于mysql中间件的研究,也就是数据层的读写分离和负载均衡,希望能够在实际的应用中能够帮助到各位小伙伴. 下期我们将继续分享go语言的系列讲解, ...

  9. #研发中间件介绍#定时任务调度与管理JobCenter

    郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工   没有JobCenter时我们要面对的:   电商业务链条很长,业 ...

随机推荐

  1. 99乘法表(for循环嵌套)

    计算乘法表 两个数相乘,外层循环代表被乘数,控制行数:内层代表乘数,控制列数. 循环嵌套,变量名不可以重复. 使用 break 语句让输出的乘法表更简洁. 使用 String 变量,做 String ...

  2. git杂碎汇总

    1. .gitignore文件使用 1.如果不想某类文件(编译后.配置等文件)加入到git版本管理,可以在这个文件中配置规则,进行过滤筛选: 2.配置规则 以斜杠"/"表示目录:e ...

  3. 提升Essay写作说服力,需要注意这几个细节

    很多留学生对于essay写作都不精通,能够勉强通过就不错了.那么Essay写作到底该怎么提分呢?可以从哪些方面入手?小编给同学们指几条路,相信可以帮到大家. 在有说服力的Essay中总结您的论点.尽管 ...

  4. NIO 组件Buffer

    重要属性 属性 描述 Capacity 容量, 即可以容纳的最大数据量; 在缓冲区创建时被设定并且不能改变 Limit 表示缓冲区的当前终点, 不能对缓冲区超过极限的位置进行读写操作, 且极限是可以修 ...

  5. Job for nginx.service failed because the control process exited with error code. See “systemctl stat

    启动nginx服务时如果遇到这个错误 Job for nginx.service failed because the control process exited with error code. ...

  6. 51nod 1293:球与切换器

    1293 球与切换器 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  取消关注 有N行M列的正方形盒子.每个盒子有三种状态0 ...

  7. hihocoder 1241:Best Route in a Grid

    #1241 : Best Route in a Grid 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个N行N列的非负整数方阵,从左上角(1,1)出发,只能向下 ...

  8. JavaScript原生Ajax请求纯文本数据

    源代码 ajax1.html: <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...

  9. 时间戳和LocalDateTime和Date互转和格式化

    一 前言 续上篇java8在日常开发中使用LocalDate和LocalTime[https://blog.csdn.net/youku1327/article/details/102771936]中 ...

  10. (转)深入理解JVM—JVM内存模型

    原文地址:http://www.cnblogs.com/dingyingsi/p/3760447.html 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互 ...