TDDL动态数据源开源-基本说明

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

总体描述

TDDL动态数据源主要分为2层,每一层都实现了jdbc**规范**,以方便地集成到各种orm框架或者直接使用.每一层都各司其职.

TGroupDataSource(tddl group ds)默认情况下依赖TAtomDataSource(tddl atom ds),但是可以扩展依赖普通数据源.这一层主要的职责是解决读写分离以及主备切换的问题,当然是在线执行这些动作,无需重启.一个TGroupDataSource底下会挂多个TAtomDataSource,每个TAtomDataSource都有相对应的读写权重.

TAtomDataSource(tddl atom ds)这一层并没有实现真正的数据源逻辑,而是依赖了一个近似第三方的包-我们从**jboss**剥离出来的datasource,这一层的职责主要是将单个数据源的配置放置到diamond服务器中,实现数据源配置的集中管理和动态变更.减少运维成本. TAtomDataSource实际对应了一个真正的数据源.

Tddl动态数据源暂时支持mysql和oracle ,但是因为每一层都是jdbc的实现,所以很容易扩展支持其他实现jdbc规范的数据源.

TGroupDataSource

  1. 基本功能
    (1) 主备数据库动态容灾切换

支持进行主备的对调切换,状态对调后备库变为主库,主库变为备库

(2) 相同数据分片读写分离

针对mysql replication机制进行的数据主备复制,可以直接使用group datasource来支持读写分离。读写分离支持权重设置,允许对不同库使用不同的权重。

(3) 读重试

一台数据库挂掉后,如果是个fatal exception(有定义),那么会进入读重试,以确保尽可能多的数据访问可以在正常数据库中访问。

(4) 数据库挂掉排除,单线程重试

使用try – lock机制来进行线程保护,在第一次捕捉到fatal exception以后,只允许一个线程进入数据库进行数据访问,直到数据库可以正常的工作为止

(5) 流量控制,数据库保护

  1. 延展性功能
    (1) 指定数据库访问(ThreadLocal)

一组对等数据库中,写库一般只配置一个,其余数据库都为备库,因为通过复制机制,所以主备主键有延迟,对于各种类型的读(实时读和延迟读),可以使用GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(int dataSourceIndex)指定需要访问的数据库.

(2) 指定数据库访问(Hint)

这是指定数据库访问的另外一种方式. 这种方式是在sql之前加注释,告知tddl动态数据源该选择第几个数据库.类似: /+TDDL_GROUP({groupIndex:0})/select * from normaltbl_0001 where pk = ? 变幻groupIndex的数字即可指定具体的第几个库,从0开始.

TAtomDataSource

  1. 基本功能
    (1) 数据源配置集中管控

(2) 定期密码变更

(3) Jboss数据源连接池的配置管理和推送

  1. 延展性功能
    (1) 动态创建,添加,减少数据源

(2) 数据库R,W,NA状态通知,以及读写访问控制,如置为NA则数据库所有访问会直接抛出SQLException

(3) 数据库保护

Diamond中配置说明.

Tddl的动态数据源配置都放置在diamond配置中心,而一条diamond配置包括一个全局唯一的dataId和GROUP, tddl的配置数据也不例外,以下主要说明tddl动态数据源的dataId拼写以及每一个dataId下数据的内容.(**详细示例请参考示例使用说明文档)**

  1. 1. **TGroupDataSource**的配置
    Group中的配置主要是配置一组对等的数据的读写权重

dataId组成规范:“com.taobao.tddl.jdbc.groupV2.4.1“+dbGroupKey

配置内容(示例):tddl_sample_0:r10w10p0,tddl_sample_0_bac:r10w0p0

其中tddl_sample_0和tddl_sample_0_bak就是下一层需要的dbKey,后面r为读权重,w为写权重

  1. 2. **TAtomDataSource**的配置
    atom ds中的配置分为了3部分(global,app,user),配置内容全部为java的properties格式

Global

dataId组成规范: “com.taobao.tddl.atom.global.”+dbKey

配置内容:

属性key 说明
ip 数据实例的ip
port 数据实例的端口
dbname 数据库名称
dbType MYSQL,ORACLE
dbStatus RW,NA

App

dataId组成规范: “com.taobao.tddl.atom.app.”+appName+”.”+dbKey

配置内容:
属性key 说明
username 该应用使用的用户名
oracleConType oci,thin,如果db为mysql,则不用理会
minPoolSize 最小连接池
maxPoolSize 最大连接池
idleTimeout 连接的最大空闲时间
blockingTimeout 等待连接的最大时间
preparedStatementCacheSize Oracle专用
writeRestrictTimes 单位timeSliceInMillis写限制,默认空不限制
readRestrictTimes 单位timeSliceInMillis读限制,默认空不限制
threadCountRestrict 并发线程限制,默认空不限制
timeSliceInMillis 限制的时间单位
connectionProperties 连接参数

User

dataId组成规范: “com.taobao.tddl.atom.passwd.”+dbName+”.”+dbType+”.”+userName

配置内容:
属性key 说明
encPasswd 密码
encKey 密钥

本文来源于"阿里中间件团队播客",原文发表时间"  2012-04-27"

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
中间件 关系型数据库 Java
MySQL数据库分库分表方案
MySQL数据库分库分表方案
693 0
MySQL数据库分库分表方案
|
人工智能 自然语言处理 前端开发
从理论到实践:使用JAVA实现RAG、Agent、微调等六种常见大模型定制策略
大语言模型(LLM)在过去几年中彻底改变了自然语言处理领域,展现了在理解和生成类人文本方面的卓越能力。然而,通用LLM的开箱即用性能并不总能满足特定的业务需求或领域要求。为了将LLM更好地应用于实际场景,开发出了多种LLM定制策略。本文将深入探讨RAG(Retrieval Augmented Generation)、Agent、微调(Fine-Tuning)等六种常见的大模型定制策略,并使用JAVA进行demo处理,以期为AI资深架构师提供实践指导。
1834 73
|
存储 运维 Dubbo
HSF:阿里RPC框架
HSF:阿里RPC框架
4543 0
|
消息中间件 存储 负载均衡
一文总结 MetaQ/RocketMQ 原理
本文介绍的 MetaQ/RocketMQ 是侧重于维持消息一致性和高可靠性的消息队列中间件,帮助大家对队列设计的理解。
|
SQL 关系型数据库 Java
分库分表:中间件方案对比
分库分表:中间件方案对比
3610 86
分库分表:中间件方案对比
|
消息中间件 运维 监控
MetaQ 消息中间件介绍及使用
MetaQ是阿里云中间件团队设计和研发的一款分布式、队列模型的消息中间件。有如下几个特点:1. 有push、pull两种消费模式 2. 支持严格的消息顺序...
7845 104
MetaQ 消息中间件介绍及使用
|
消息中间件 存储 负载均衡
RocketMQ 顺序消费机制
顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费。 顺序消息分为**分区顺序消息**和**全局顺序消息**。
RocketMQ 顺序消费机制
|
消息中间件 存储 中间件
|
Kubernetes 负载均衡 应用服务中间件
青云LB(负载均衡)与k8s实战(二)
青云LB结合Ingress实现访问k8s集群内部容器服务。
1014 0
|
SQL cobar 算法
分库分表中间件介绍
分库分表中间件介绍

热门文章

最新文章