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

来源:互联网 发布:java上传文件 编辑:程序博客网 时间:2024/06/15 02:42

说明

因项目需求要调研一下TDDL,在调研中发现相关的资料较少,而且淘宝的社区支持做的无比的烂,TaoCode开源社区上面,几乎从来都是有人提问,无人响应,且网上相关的TDDL资料较少且巨坑无比,因此记之。

TDDL的架构原型

淘宝根据自身业务需求研发了TDDL(Taobao Distributed Data Layer)框架,主要用于解决分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步,它是一个基于集中式配置的JDBC DataSource实现,具有分库分表、Master/Salve、动态数据源配置等功能。

就目前而言,许多大厂也在出一些更加优秀和社区支持更广泛的DAL层产品,比如Hibernate Shards、Ibatis-Sharding等。如果你要问笔者还为什么还要对TDDL进行讲解,那么笔者只能很无奈的表示公司要这么干,因为很多时候技术选型并不是笔者说了算,而是客户说了算。当笔者费劲所有努力在google上寻找TDDL的相关使用说明和介绍时,心里一股莫名的火已经开始在蔓延,对于更新缓慢(差不多一年没更新过SVN),几乎没社区支持(提问从不响应)的产品来说,除了蜗居在企业内部,必定走不了多远,最后的结局注定是悲哀的。好了,既然抱怨了一番,无论如何还是要坚持讲解完。TDDL位于数据库和持久层之间,它直接与数据库建立交道,如图1-2所示:

 

图1-2 TDDL所处领域模型定位

 

传说淘宝很早以前就已经对数据进行过分库分表处理,应用层连接多个数据源,中间有一个叫做DBRoute的技术对数据库进行统一的路由访问。DBRoute对数据进行多库的操作、数据的整合,让应用层像操作一个数据源一样操作多个数据库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询要求在几毫秒内完成),TDDL就承担了这样一个工作(其他DAL产品做得更好),如图1-3所示:

Diamond简介

       使用任何一种框架都需要配置一些配置源信息,毕竟每一种框架都有自己的规范,使用者务必遵守这些规范来实现自己的业务与基础框架的整合。自然TDDL也不例外,也是有配置信息需要显式的进行配置,在TDDL中,配置可以基于2种方式,一种是基于本地配置文件的形式,另外一种则是基于Diamond的形式进行配置,在实际开发过程中,由于考虑到配置信息的集中管理所带来的好处,大部分开发人员愿意选择将TDDL的配置信息托管给Diamond,所以本文还是以Diamond作为TDDL的配置源。

       diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单、可靠、易用,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理。diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。

注意

TDDL必须要依赖diamond配置中心(diamond是淘宝内部使用的一个管理持久配置的系统,目前淘宝内部绝大多数系统的配置)。

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

 

2,系统环境和部署架构

本文中的示例环境如下:

OPUbuntu 11.04 x86_64(Windows亦可)Kernel2.6.38-8-generic (linux)Java至少OpenJDK 1.6.0_22

相关软件如下:

Maven至少Apache Maven 2.2.1Mysqlmysql  Ver 14.14 Distrib 5.1.62 (oracle亦可)Tomcat7.0.19 (能部署war包的web容器亦可)DiamondSvn R16 (最新版本R20)TDDLSvn R14

Diamond是一个统一的配置管理服务,各个系统服务的配置可以发布到Diamond-server上;然后客户端可以根据约定的ID来订阅和获取这些服务的配置。当需要改变配置时,只需要修改Diamond-server中的数据,各个客户端会自动获取到新的配置。这个类似于zookeeper的配置管理,只不过Diamond-client是轮询来获取数据而不是通过watch推送。

具体来说,Diamond的使用需要如下几个组件:
1)  数据库:用于存放配置数据
2) Diamond Server:配置管理组件,可以增删改查服务配置,并提供接口供client端访问。
3)  Http server:一个简单的Diamond server地址展示页面;客户端通过http server获取Diamond Server的实际地址。
4) Diamond Client:客户端,先访问Http Server获得Diamond Server的所在,再访问Diamond Server获取配置数据。

具体如下图所示:
diamond




0 0
原创粉丝点击