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



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

    最大努力送達型

    概念

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

    架構圖

    最大努力送達型事務

    適用場景

    • 根據主鍵刪除數據。
    • 更新記錄永久狀態,如更新通知送達狀態。

    使用限制

    使用最大努力送達型柔性事務的SQL需要滿足冪等性。

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

    開發指南

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

    開發示例

        // 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. 開啟事務     transaction.begin(connection);          // 5. 執行JDBC     /*          codes here     */     *      // 6.關閉事務     transaction.end(); 

    事務管理器配置項

    SoftTransactionConfiguration配置

    用于配置事務管理器。

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

    NestedBestEffortsDeliveryJobConfiguration配置 (僅開發環境)

    用于配置內嵌的異步作業,僅用于開發環境。生產環境應使用獨立部署的作業版本。

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

    獨立部署作業指南

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

    異步作業yaml文件配置

    #目標數據庫的數據源. 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:  #事務日志的數據源. 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      #作業的命名空間   namespace: Best-Efforts-Delivery-Job      #注冊中心的等待重試的間隔時間的初始值   baseSleepTimeMilliseconds: 1000      #注冊中心的等待重試的間隔時間的最大值   maxSleepTimeMilliseconds: 3000      #注冊中心的最大重試次數   maxRetries: 3  #作業配置 jobConfig:   #作業名稱   name: bestEffortsDeliveryJob      #觸發作業的cron表達式   cron: 0/5 * * * * ?      #每次作業獲取的事務日志最大數量   transactionLogFetchDataCount: 100      #事務送達的最大嘗試次數.   maxDeliveryTryTimes: 3      #執行送達事務的延遲毫秒數,早于此間隔時間的入庫事務才會被作業執行   maxDeliveryTryDelayMillis: 60000 


    事務支持說明

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

    目前最大努力送達型柔性事務已開發完成。

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

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

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

    • 不支持因網絡、硬件異常導致的跨庫事務。例如:同一事務中,跨兩個庫更新,更新完畢后、未提交之前,第一個庫死機,則只有第二個庫數據提交。

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

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


    網站導航:
     
    主站蜘蛛池模板: 69精品免费视频| 亚洲精品无码99在线观看 | 拔擦拔擦8x华人免费久久| 精品久久久久久久久亚洲偷窥女厕| 免费在线观看黄色毛片| 无码成A毛片免费| 亚洲一线产品二线产品| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲日韩在线观看| 麻豆高清免费国产一区| 国产精品亚洲精品久久精品 | 亚洲高清免费视频| 亚洲视频在线免费播放| 亚洲欧美在线x视频| 91嫩草私人成人亚洲影院| 四虎成人精品在永久免费| 91精品免费观看| 成人免费网站久久久| 亚洲网红精品大秀在线观看| 国产一级大片免费看| 最近中文字幕mv免费高清在线 | 免费观看四虎精品成人| 亚洲网站视频在线观看| 老司机亚洲精品影视www| 免费黄网在线观看| 久久精品中文字幕免费| xxxx日本在线播放免费不卡| 亚洲香蕉久久一区二区三区四区| 亚洲精品制服丝袜四区| 亚洲国产成人久久一区久久| 久久天天躁狠狠躁夜夜免费观看| 精品国产一区二区三区免费| 免费无遮挡无码视频在线观看| 亚洲一区二区三区免费在线观看| 亚洲av最新在线网址| vvvv99日韩精品亚洲| 四虎成人免费观看在线网址 | 久久性生大片免费观看性| 亚洲乱妇老熟女爽到高潮的片| 亚洲福利视频一区二区三区| 亚洲精品午夜无码电影网|