因项目需求要调研一下TDDL,在调研中发现相关的资料较少,因此记之。
本文描述Diamond和TDDL中间件的部署和使用。
Diamond是淘宝开源的配置管理系统(config server),以简单可用的方式提供分布式系统的配置管理功能。
TDDL是淘宝开源的数据库中间件,提供统一的中间层实现对下层数据库的集群管理,动态配置,读写分离等功能(数据同步需自行处理);当前开源版本不是内部使用完整版本,只有动态数据源功能而缺少分库分表层。
TDDL依赖于Diamond进行配置管理。
注意:由于淘宝博客地址变迁,在上文两个链接网页中的文档连接已不可用,新的地址迁移到了:
Diamond相关:
diamond专题第一期,主要介绍了diamond的概况和快速使用,
文章链接:http://jm-blog.aliapp.com/?p=1588
diamond专题第二期,主要介绍了diamond的核心原理,
文章链接:http://jm-blog.aliapp.com/?p=1592
diamond专题第三期,主要介绍了diamond的架构,
文章链接:http://jm-blog.aliapp.com/?p=1606
diamond专题第四期,主要介绍了diamond的容灾机制,
文章链接:http://jm-blog.aliapp.com/?p=1617
TDDL相关:
TDDL动态数据源基本说明:http://jm-blog.aliapp.com/?p=1642
TDDL示例说明:http://jm-blog.aliapp.com/?p=1645
二,系统环境和部署架构
本文中的示例环境如下:
相关软件如下:
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获取配置数据。
具体如下图所示:
TDDL是一个数据库中间件,它集成了数据库的集群管理,主备切换,读写分离等功能,能够大大减少应用层面对数据库集群操作的复杂度。整个TDDL产品包括对应用透明的分库分表层,以及具有众多特性的动态数据源。但可惜的是,现在还只开源了动态数据源的部分。这部分基本用在集群管理上,比如主备切换,读写权重设置,数据库配置动态变更等。
TDDL动态数据源主要分为两层,每一层都实现了JDBC规范,整体结构如下图所示:
其中的tdds atom datasource(TAtomDataSource)和tddl gourp datasource(TGroupDataSource)分别从单个数据库节点和集群数据库两个层面对下层的数据库进行管理。
TAtomDataSource抽取了Jboss中的datasource组件,对应单个的数据源,实现数据库配置管理和访问的封装。TGroupDataSource对应多个数据库节点组成的集群,内含多个TAtomDataSource,实现数据库集群配置管理,容灾切换和访问的封装。在实际使用时,所有数据源和集群的配置信息都放在Diamond上,程序中的TDDL首先从Diamond获取数据,然后根据配置策略直连数据库,访问方式如图所示:
虽然Diamond和TDDL都开源了,但是代码,配置说明和使用文档还不够完善,在使用时直接遵循开源文档中的描述一般都会出现问题。下文参照文档和网络资料对这两个组件的安装和使用进行说明。
扩展阅读:
TDDL和Diamond的使用(一):基本介绍: http://udn.yyuap.com/thread-38155-1-1.html
TDDL和Diamond的使用(二):Diamond: http://udn.yyuap.com/thread-38157-1-1.html
TDDL和Diamond的使用(三):TDDL: http://udn.yyuap.com/thread-38159-1-1.html