一,说明
因项目需求要调研一下TDDL,在调研中发现相关的资料较少,因此记之。
本文描述Diamond和TDDL中间件的部署和使用。
Diamond(http://code.taobao.org/p/diamond/wiki/index/)是淘宝开源的配置管理系统(config server),以简单可用的方式提供分布式系统的配置管理功能。
TDDL(http://code.taobao.org/p/tddl-dynamic-datasource/wiki/index/)是淘宝开源的数据库中间件,提供统一的中间层实现对下层数据库的集群管理,动态配置,读写分离等功能(数据同步需自行处理);当前开源版本不是内部使用完整版本,只有动态数据源功能而缺少分库分表层。
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
2,系统环境和部署架构
本文中的示例环境如下:
OP | Ubuntu 11.04 x86_64 |
Kernel | 2.6.38-8-generic |
Java | OpenJDK 1.6.0_22 |
相关软件如下:
Maven | Apache Maven 2.2.1 |
Mysql | mysql Ver 14.14 Distrib 5.1.62 (oracle亦可) |
Tomcat | 7.0.19 (能部署war包的web容器亦可) |
Diamond | Svn R16 |
TDDL | Svn 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获取配置数据。
TDDL是一个数据库中间件,它集成了数据库的集群管理,主备切换,读写分离等功能,能够大大减少应用层面对数据库集群操作的复杂度。整个TDDL产品包括对应用透明的分库分表层,以及具有众多特性的动态数据源。但可惜的是,现在还只开源了动态数据源的部分。这部分基本用在集群管理上,比如主备切换,读写权重设置,数据库配置动态变更等。
TDDL动态数据源主要分为两层,每一层都实现了JDBC规范,整体结构如下图所示:
其中的tdds atom datasource(TAtomDataSource)和tddl gourp datasource(TGroupDataSource)分别从单个数据库节点和集群数据库两个层面对下层的数据库进行管理。
TAtomDataSource抽取了Jboss中的datasource组件,对应单个的数据源,实现数据库配置管理和访问的封装。TGroupDataSource对应多个数据库节点组成的集群,内含多个TAtomDataSource,实现数据库集群配置管理,容灾切换和访问的封装。在实际使用时,所有数据源和集群的配置信息都放在Diamond上,程序中的TDDL首先从Diamond获取数据,然后根据配置策略直连数据库,访问方式如图所示:
虽然Diamond和TDDL都开源了,但是代码,配置说明和使用文档还不够完善,在使用时直接遵循开源文档中的描述一般都会出现问题。下文参照文档和网络资料对这两个组件的安装和使用进行说明。
相关推荐
可分析的日志打印,日志流控,动态变更TDDL必须要依赖diamond配置中心(diamond是淘宝内部使用的一个管理持久配置的系统,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理,同时diamond也已开源)。...
淘宝登录、淘宝工具程序,全部源码均已进行严格测试,可以直接运行!
diamond来自淘宝diamond:diamond设计上的一些问题?com.taobao.diamond.common.Constants.CONFIG_HTTP_URI_FILE,获取ServerAddress的值,当前没实现他们的,所以必须自己配置目前必须在:~/diamond/ServerAddress...
这是一个使用JavaScript反向字符串的网站。 描述: 这是一个使用JavaScript反向字符串的网站。快速链接 :sparkling_heart: :diamond_suit: :diamond_suit: :diamond_suit: :diamond_suit:项目设置Open this in your...
awesome-blackmagic::performing_arts::heart_suit:奇技淫巧:diamond_with_a_dot:黑魔法大集合:diamond_suit::club_suit:
HTC_touch_diamond2使用说明书
diamond-bot:只是一个不和谐的机器人
解决Lattice Diamond Version 3.10.0.111.2出现的Synthesis exit by 9. Done: error code 9 问题. 下载后双击运行,关机,重启。
一个简单的软件包,用于将钻石浮动操作按钮或FAB添加到颤振应用程序中。 该FAB还允许根据位置在“底部应用程序栏”或“底部导航栏”中创建一个槽口。 FAB代码基于材料设计规范。 入门 将此添加到包的pubspec.yaml...
影片介绍 科技栈 :diamond_suit: React Native :diamond_suit: Expo :diamond_suit: Native Base :diamond_suit: Lottie UI :diamond_suit: Express :diamond_suit: GraphQL :diamond_suit: Apollo :diamond_suit: ...
diamond-navigation 部署需要准备的资源 1 一台可以运行 Docker 的服务器 2 一个 Github 的账户 3 会操作 Git 的脑子 第一步 Fork与修改代码 登陆 Github 打开 点击 Star 点击 Fork 克隆一份代码 修改网站源码 修改...
diamond软件为:在原子水平范围内实现晶体结构可视化的软件。
作品: 《Sea Diamond》 .rar
diamond_drops:关于分片和以太坊2.0的WIP,具有共识性的数据可用性和Rust:一种快速,安全,并发和实用的编程语言
taobao Diamond 部分maven jar包
《linux c一站式编程》中的习题,...编写函数diamond打印一个菱形。如果调用diamond(3, '*')则打印: * * * * * 如果调用diamond(5, '+')则打印: + + + + + + + + + + + + + 如果用偶数做参数则打印错误提示。
挑战:双色调卡 制成: 这是什么? 这是的挑战,要做一张双色调卡。... 以下是我使用他们的资源来设计和编码此挑战的用户: 保持棒极了的Gothan! :diamond_suit: :diamond_suit: :diamond_suit: :diamond_suit:
diamond客户端使用方法
,Forks和PRs都欢迎! 受到推崇的 强烈建议主持人使用。 对UI /默认设置的微小更改使您的Mod生活变得轻松很多(节省点击次数,或者必须寻找特定的链接/ mod功能,或者预先显示更多信息)。 单击这些以跳转到其描述...
最小的内存使用量和高性能 默认控件 该编辑器具有两种操作模式:命令和编辑器。 命令模式 h ...将光标向左移动一个字符 j ...将光标向下移动一行 k ...将光标上移一行 l ...将光标向右移动一个字符 我...将光标左移...