TDDL動態數據源基本說明
總體描述
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) 主備數據庫動態容災切換
支持進行主備的對調切換,狀態對調后備庫變為主庫,主庫變為備庫
(2) 相同數據分片讀寫分離
針對mysql replication機制進行的數據主備復制,可以直接使用group datasource來支持讀寫分離。讀寫分離支持權重設置,允許對不同庫使用不同的權重。
(3) 讀重試
一臺數據庫掛掉后,如果是個fatal exception(有定義),那么會進入讀重試,以確保盡可能多的數據訪問可以在正常數據庫中訪問。
(4) 數據庫掛掉排除,單線程重試
使用try – lock機制來進行線程保護,在第一次捕捉到fatal exception以后,只允許一個線程進入數據庫進行數據訪問,直到數據庫可以正常的工作為止
(5) 流量控制,數據庫保護
- 延展性功能
(1) 指定數據庫訪問(ThreadLocal)
一組對等數據庫中,寫庫一般只配置一個,其余數據庫都為備庫,因為通過復制機制,所以主備主鍵有延遲,對于各種類型的讀(實時讀和延遲讀),可以使用GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(int dataSourceIndex)指定需要訪問的數據庫.
(2) 指定數據庫訪問(Hint)
這是指定數據庫訪問的另外一種方式. 這種方式是在sql之前加注釋,告知tddl動態數據源該選擇第幾個數據庫.類似: /*+TDDL_GROUP({groupIndex:0})*/select * from normaltbl_0001 where pk = ? 變幻groupIndex的數字即可指定具體的第幾個庫,從0開始.
TAtomDataSource
- 基本功能
(1) 數據源配置集中管控
(2) 定期密碼變更
(3) Jboss數據源連接池的配置管理和推送
- 延展性功能
(1) 動態創建,添加,減少數據源
(2) 數據庫R,W,NA狀態通知,以及讀寫訪問控制,如置為NA則數據庫所有訪問會直接拋出SQLException
(3) 數據庫保護
Diamond中配置說明.
Tddl的動態數據源配置都放置在diamond配置中心,而一條diamond配置包括一個全局唯一的dataId和GROUP, tddl的配置數據也不例外,以下主要說明tddl動態數據源的dataId拼寫以及每一個dataId下數據的內容.(詳細示例請參考示例使用說明文檔)
- 1. TGroupDataSource的配置
Group中的配置主要是配置一組對等的數據的讀寫權重
dataId組成規范:“com.taobao.tddl.jdbc.group_V2.4.1_”+dbGroupKey
配置內容(示例):tddl_sample_0:r10w10p0,tddl_sample_0_bac:r10w0p0
其中tddl_sample_0和tddl_sample_0_bak就是下一層需要的dbKey,后面r為讀權重,w為寫權重
- 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 | 密鑰 |
posted on 2013-11-10 11:13
hellxoul 閱讀(1737)
評論(0) 編輯 收藏 所屬分類:
other