<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jinfeng_wang

    G-G-S,D-D-U!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
    跨數(shù)據(jù)庫的事務(wù),只能在業(yè)務(wù)上保證。
    不能保證的是,2個SQL能夠在同一時間成功。
    業(yè)務(wù)上的先期檢查、校驗(yàn)、分布式鎖的設(shè)計,再加上一部分的措施(不停重試、先劃一部分蛋糕再恢復(fù))是必須要考慮的問題和方案。



    http://dangdangdotcom.github.io/sharding-jdbc/post/soft_transaction/
    http://dangdangdotcom.github.io/sharding-jdbc/post/transaction/

    最大努力送達(dá)型

    概念

    在分布式數(shù)據(jù)庫的場景下,相信對于該數(shù)據(jù)庫的操作最終一定可以成功,所以通過最大努力反復(fù)嘗試送達(dá)操作。

    架構(gòu)圖

    最大努力送達(dá)型事務(wù)

    適用場景

    • 根據(jù)主鍵刪除數(shù)據(jù)。
    • 更新記錄永久狀態(tài),如更新通知送達(dá)狀態(tài)。

    使用限制

    使用最大努力送達(dá)型柔性事務(wù)的SQL需要滿足冪等性。

    • INSERT語句要求必須包含主鍵,且不能是自增主鍵。
    • UPDATE語句要求冪等,不能是UPDATE xxx SET x=x+1
    • DELETE語句無要求。

    開發(fā)指南

    • Sharding-JDBC-transaction完全基于java開發(fā),直接提供jar包,可直接使用maven導(dǎo)入坐標(biāo)即可使用。
    • 為了保證事務(wù)不丟失,Sharding-JDBC-transaction需要提供數(shù)據(jù)庫存儲事務(wù)日志,配置方法可參見事務(wù)管理器配置項(xiàng)。
    • 由于柔性事務(wù)采用異步嘗試,需要部署獨(dú)立的作業(yè)和ZookeeperSharding-JDBC-transaction采用elastic-job實(shí)現(xiàn)的Sharding-JDBC-transaction-async-job,通過簡單配置即可啟動高可用作業(yè)異步送達(dá)柔性事務(wù),啟動腳本為start.sh
    • 為了便于開發(fā),Sharding-JDBC-transaction提供了基于內(nèi)存的事務(wù)日志存儲器和內(nèi)嵌異步作業(yè)。

    開發(fā)示例

        // 1. 配置SoftTransactionConfiguration     SoftTransactionConfiguration transactionConfig = new SoftTransactionConfiguration(dataSource);     transactionConfig.setXXX();          // 2. 初始化SoftTransactionManager     SoftTransactionManager transactionManager = new SoftTransactionManager(transactionConfig);     transactionManager.init();          // 3. 獲取BEDSoftTransaction     BEDSoftTransaction transaction = (BEDSoftTransaction) transactionManager.getTransaction(SoftTransactionType.BestEffortsDelivery);          // 4. 開啟事務(wù)     transaction.begin(connection);          // 5. 執(zhí)行JDBC     /*          codes here     */     *      // 6.關(guān)閉事務(wù)     transaction.end(); 

    事務(wù)管理器配置項(xiàng)

    SoftTransactionConfiguration配置

    用于配置事務(wù)管理器。

    名稱類型必填默認(rèn)值說明
    shardingDataSourceShardingDataSource事務(wù)管理器管理的數(shù)據(jù)源
    syncMaxDeliveryTryTimesint3同步的事務(wù)送達(dá)的最大嘗試次數(shù)
    storageTypeenumRDB事務(wù)日志存儲類型。可選值: RDB,MEMORY。使用RDB類型將自動建表
    transactionLogDataSourceDataSourcenull存儲事務(wù)日志的數(shù)據(jù)源,如果storageType為RDB則必填
    bestEffortsDeliveryJobConfigurationNestedBestEffortsDeliveryJobConfigurationnull最大努力送達(dá)型內(nèi)嵌異步作業(yè)配置對象。如需使用,請參考NestedBestEffortsDeliveryJobConfiguration配置

    NestedBestEffortsDeliveryJobConfiguration配置 (僅開發(fā)環(huán)境)

    用于配置內(nèi)嵌的異步作業(yè),僅用于開發(fā)環(huán)境。生產(chǎn)環(huán)境應(yīng)使用獨(dú)立部署的作業(yè)版本。

    名稱類型必填默認(rèn)值說明
    zookeeperPortint4181內(nèi)嵌的注冊中心端口號
    zookeeperDataDirStringtarget/test_zk_data/nano/內(nèi)嵌的注冊中心的數(shù)據(jù)存放目錄
    asyncMaxDeliveryTryTimesint3異步的事務(wù)送達(dá)的最大嘗試次數(shù)
    asyncMaxDeliveryTryDelayMillislong60000執(zhí)行異步送達(dá)事務(wù)的延遲毫秒數(shù),早于此間隔時間的入庫事務(wù)才會被異步作業(yè)執(zhí)行

    獨(dú)立部署作業(yè)指南

    • 部署用于存儲事務(wù)日志的數(shù)據(jù)庫。
    • 部署用于異步作業(yè)使用的Zookeeper
    • 配置yaml文件,參照示例。
    • 下載并解壓文件sharding-jdbc-transaction-async-job-$VERSION.tar,通過start.sh腳本啟動異步作業(yè)。

    異步作業(yè)yaml文件配置

    #目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)源. targetDataSource:   ds_0: !!org.apache.commons.dbcp.BasicDataSource     driverClassName: com.mysql.jdbc.Driver     url: jdbc:mysql://localhost:3306/ds_0     username: root     password:   ds_1: !!org.apache.commons.dbcp.BasicDataSource     driverClassName: com.mysql.jdbc.Driver     url: jdbc:mysql://localhost:3306/ds_1     username: root     password:  #事務(wù)日志的數(shù)據(jù)源. transactionLogDataSource:   ds_trans: !!org.apache.commons.dbcp.BasicDataSource     driverClassName: com.mysql.jdbc.Driver     url: jdbc:mysql://localhost:3306/trans_log     username: root     password:  #注冊中心配置 zkConfig:   #注冊中心的連接地址   connectionString: localhost:2181      #作業(yè)的命名空間   namespace: Best-Efforts-Delivery-Job      #注冊中心的等待重試的間隔時間的初始值   baseSleepTimeMilliseconds: 1000      #注冊中心的等待重試的間隔時間的最大值   maxSleepTimeMilliseconds: 3000      #注冊中心的最大重試次數(shù)   maxRetries: 3  #作業(yè)配置 jobConfig:   #作業(yè)名稱   name: bestEffortsDeliveryJob      #觸發(fā)作業(yè)的cron表達(dá)式   cron: 0/5 * * * * ?      #每次作業(yè)獲取的事務(wù)日志最大數(shù)量   transactionLogFetchDataCount: 100      #事務(wù)送達(dá)的最大嘗試次數(shù).   maxDeliveryTryTimes: 3      #執(zhí)行送達(dá)事務(wù)的延遲毫秒數(shù),早于此間隔時間的入庫事務(wù)才會被作業(yè)執(zhí)行   maxDeliveryTryDelayMillis: 60000 


    事務(wù)支持說明

    Sharding-JDBC由于性能方面的考量,決定不支持強(qiáng)一致性分布式事務(wù)。我們已明確規(guī)劃線路圖,未來會支持最終一致性的柔性事務(wù)。

    目前最大努力送達(dá)型柔性事務(wù)已開發(fā)完成。

    如果不使用柔性事務(wù),也會自動包含弱XA事務(wù)支持,有以下幾點(diǎn)說明:

    • 完全支持非跨庫事務(wù),例如:僅分表,或分庫但是路由的結(jié)果在單庫中。

    • 完全支持因邏輯異常導(dǎo)致的跨庫事務(wù)。例如:同一事務(wù)中,跨兩個庫更新。更新完畢后,拋出空指針,則兩個庫的內(nèi)容都能回滾。

    • 不支持因網(wǎng)絡(luò)、硬件異常導(dǎo)致的跨庫事務(wù)。例如:同一事務(wù)中,跨兩個庫更新,更新完畢后、未提交之前,第一個庫死機(jī),則只有第二個庫數(shù)據(jù)提交。

    posted on 2016-12-29 14:49 jinfeng_wang 閱讀(2609) 評論(0)  編輯  收藏 所屬分類: 2016-Sharding-JDBC

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲| 亚洲乱码国产乱码精品精| 亚洲精品国产精品国自产观看| 亚洲欧洲国产成人综合在线观看| 亚洲一区AV无码少妇电影☆| 亚洲av无码国产精品夜色午夜| 亚洲国产成人精品久久| 最新亚洲人成无码网站| WWW免费视频在线观看播放| 免费专区丝袜脚调教视频| 麻豆精品国产免费观看| 国产成人精品日本亚洲专区61| 911精品国产亚洲日本美国韩国| 亚洲精品国产suv一区88 | 亚洲AV午夜福利精品一区二区| 亚洲欧洲校园自拍都市| 亚洲成a人片在线不卡一二三区| 羞羞视频免费网站在线看| 黄色永久免费网站| 国产免费午夜a无码v视频| 亚洲国产精品无码一线岛国| 亚洲а∨天堂久久精品9966| 久久久久久久久久久免费精品| 国产成人精品免费视| 亚洲精品无码久久久| 亚洲最大免费视频网| 午夜免费国产体验区免费的| 日本免费网站视频www区| 亚洲高清无码综合性爱视频| 久久精品国产亚洲AV电影| 国产精品亚洲色婷婷99久久精品| 日本免费久久久久久久网站| 色视频色露露永久免费观看| 亚洲AV日韩AV永久无码久久| 99亚洲精品卡2卡三卡4卡2卡| 香蕉免费一区二区三区| 亚洲国产成人五月综合网| 亚洲综合色7777情网站777| 国产线视频精品免费观看视频| 女人18特级一级毛片免费视频| 亚洲AV无码专区国产乱码4SE|