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規範的資料源.
<a></a>
基本功能
(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開始.
(1) 資料源配置集中管控
(2) 定期密碼變更
(3) jboss資料源連接配接池的配置管理和推送
(1) 動态建立,添加,減少資料源
(2) 資料庫r,w,na狀态通知,以及讀寫通路控制,如置為na則資料庫所有通路會直接抛出sqlexception
(3) 資料庫保護
tddl的動态資料源配置都放置在diamond配置中心,而一條diamond配置包括一個全局唯一的dataid和group, tddl的配置資料也不例外,以下主要說明tddl動态資料源的dataid拼寫以及每一個dataid下資料的内容.(**詳細示例請參考示例使用說明文檔)**
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為寫權重
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
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
encpasswd
密碼
enckey
密鑰
本文來源于"阿裡中間件團隊播客",原文發表時間" 2012-04-27"