天天看點

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規範的資料源.

<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"