TDDL:来自淘宝的分布式数据层

转载 2016年06月01日 11:17:53

淘宝根据自身业务需求研发了TDDL(Taobao Distributed Data Layer)框架,主要用于解决分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步,它是一个基于集中式配置的JDBC DataSource实现,具有分库分表、Master/Salve、动态数据源配置等功能。就目前而言,许多大厂也在出一些更加优秀和社区支持更广泛的DAL层产品,比如Hibernate Shards、Ibatis-Sharding等。TDDL位于数据库和持久层之间,它直接与数据库建立交道,如图所示:

这里写图片描述

淘宝很早就对数据进行过分库的处理,上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。下图展示了一个简单的分库分表数据查询策略:

这里写图片描述

TDDL的主要优点:

    数据库主备和动态切换
    带权重的读写分离
    单线程读重试
    集中式数据源信息管理和动态变更
    剥离的稳定jboss数据源
    支持mysql和oracle数据库
    基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
    无server,client-jar形式存在,应用直连数据库
    读写次数,并发度流程控制,动态变更
    可分析的日志打印,日志流控,动态变更

TDDL的体系架构

TDDL其实主要可以划分为3层架构,分别是Matrix层、Group层和Atom层。Matrix层用于实现分库分表逻辑,底层持有多个Group实例。而Group层和Atom共同组成了动态数据源, Group层实现了数据库的Master/Salve模式的写分离逻辑,底层持有多个Atom实例。最后Atom层 (TAtomDataSource)实现数据库ip,port,password,connectionProperties等信息的动态推送,以及持有原子的数据源分离的JBOSS数据源)。

这里写图片描述

持久层只关心对数据源的CRUD操作,而多数据源的访问并不应该由它来关心。也就是说TDDL透明给持久层的数据源接口应该是统一且“单一”的,至于数据库到底如何分库分表持久层无需知道也无需编写对应的SQL去实行应对策略。这个时候对TDDL一些疑问就出现了,TDDL需要对SQL进行二次解析和拼装吗?答案是不解析仅拼装。TDDL只需要从持久层拿到发出的SQL再按照一些分库分表条件,进行特定的SQL扩充以此满足访问路路由操作。
TDDL除了拿到分库分表条件外,还需要拿到order by、group by、limit、join等信息,SUM、MAX、MIN等聚合函数信息,DISTINCT信息。具有这些关键字的SQL将会在单库和多库情况下进行,语义是不同的。TDDL必须对使用这些关键字的SQL返回的结果做出合适的处理;
TDDL行复制需要重新拼写SQL,带上sync_version字段;
不通过sql解析,因为TDDL遵守JDBC规范,它不可能去扩充JDBC规范里面的接口,所以只能通过SQL中加额外的字符条件(也就是HINT方式)或者ThreadLocal方式进行传递,前者使SQL过长,后者难以维护,开发debug时不容易跟踪,而且需要判定是在一条SQL执行后失效还是1个连接关闭后才失效;
TDDL现在也同时支持Hint方式和ThreadLocal方式传递这些信息;
参考链接:https://github.com/alibaba/tb_tddl

分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较

框架比较 TDDL Amoeba Cobar MyCat 点评 TDDL不同于其它几款产品,并非独立的中间件,只能算作中间层,是以Jar包方式提供给应用调用。属于JDBC...
  • kobejayandy
  • kobejayandy
  • 2017年03月08日 11:40
  • 3463

TDDL使用

1.创建数据源           由DBA来做。            一般数据源有3层:           (1)Matrix                      分库分表,数据路...
  • cpf2016
  • cpf2016
  • 2015年05月18日 14:24
  • 3059

PHP 数学运算之类笔记

1.整除   $a=9/4;  echo number_format($a,0);  echo ceil($a); ceil()返回不小于 x 的下一个整数,x 如果有小数部分则进一位。cei...
  • morley_wang
  • morley_wang
  • 2012年03月30日 13:30
  • 172

阿里巴巴TDDL

阿里巴巴 TDDL Diamond
  • Sunyc1990
  • Sunyc1990
  • 2017年03月01日 10:56
  • 489

TDDL-剖析淘宝TDDL

原文:http://www.tuicool.com/articles/nmeuu2  前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer...
  • lan861698789
  • lan861698789
  • 2015年07月17日 18:27
  • 2896

TDDL使用

1.创建数据源           由DBA来做。            一般数据源有3层:           (1)Matrix                      ...
  • a137268431
  • a137268431
  • 2016年12月12日 16:43
  • 611

TDDL+DIAMOND的配置及使用(一):基本介绍

说明 因项目需求要调研一下TDDL,在调研中发现相关的资料较少,而且淘宝的社区支持做的无比的烂,TaoCode开源社区上面,几乎从来都是有人提问,无人响应,且网上相关的TDDL资料较少且巨坑无比,因...
  • pkpk20044
  • pkpk20044
  • 2015年11月18日 15:51
  • 1728

TDDL+DIAMOND的配置及使用(三):TDDL

TDDL依赖于Diamond,在Diamond部署完毕后,才可以使用TDDL。 1. 获取代码:TDDL的svn地址为:http://code.taobao.org/svn/jltddl/,直接che...
  • pkpk20044
  • pkpk20044
  • 2015年11月18日 17:06
  • 2246

TDDL

1. 分库分表,而且分库规则非常灵活. 2. 主键生成策略  目前TDDL提供的id生成主要还是依托数据库来进行的,oracle可以直接使用sequence来完成id生成,mysql则需要DBA建...
  • gandin2008
  • gandin2008
  • 2013年02月18日 22:09
  • 13207

tddl原理与架构

  • 2014年07月15日 18:13
  • 2.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TDDL:来自淘宝的分布式数据层
举报原因:
原因补充:

(最多只允许输入30个字)