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



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

    最大努力送達(dá)型

    概念

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

    架構(gòu)圖

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

    適用場(chǎng)景

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

    使用限制

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

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

    開(kāi)發(fā)指南

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

    開(kāi)發(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. 開(kāi)啟事務(wù)     transaction.begin(connection);          // 5. 執(zhí)行JDBC     /*          codes here     */     *      // 6.關(guān)閉事務(wù)     transaction.end(); 

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

    SoftTransactionConfiguration配置

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

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

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

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

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

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

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

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

    #目標(biāo)數(shù)據(jù)庫(kù)的數(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:  #注冊(cè)中心配置 zkConfig:   #注冊(cè)中心的連接地址   connectionString: localhost:2181      #作業(yè)的命名空間   namespace: Best-Efforts-Delivery-Job      #注冊(cè)中心的等待重試的間隔時(shí)間的初始值   baseSleepTimeMilliseconds: 1000      #注冊(cè)中心的等待重試的間隔時(shí)間的最大值   maxSleepTimeMilliseconds: 3000      #注冊(cè)中心的最大重試次數(shù)   maxRetries: 3  #作業(yè)配置 jobConfig:   #作業(yè)名稱(chēng)   name: bestEffortsDeliveryJob      #觸發(fā)作業(yè)的cron表達(dá)式   cron: 0/5 * * * * ?      #每次作業(yè)獲取的事務(wù)日志最大數(shù)量   transactionLogFetchDataCount: 100      #事務(wù)送達(dá)的最大嘗試次數(shù).   maxDeliveryTryTimes: 3      #執(zhí)行送達(dá)事務(wù)的延遲毫秒數(shù),早于此間隔時(shí)間的入庫(kù)事務(wù)才會(huì)被作業(yè)執(zhí)行   maxDeliveryTryDelayMillis: 60000 


    事務(wù)支持說(shuō)明

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

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

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

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

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

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

    posted on 2016-12-29 14:49 jinfeng_wang 閱讀(2622) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 2016-Sharding-JDBC

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 一级毛片在线观看免费| 亚洲天堂免费在线| a级毛片100部免费观看| 高清免费久久午夜精品| 激情无码亚洲一区二区三区 | 免费看AV毛片一区二区三区| 国产h视频在线观看免费| 91免费播放人人爽人人快乐| 免费福利网站在线观看| 亚洲精品免费网站| 无限动漫网在线观看免费| 欧美a级在线现免费观看| 特级做A爰片毛片免费69| 最近中文字幕免费mv视频7| 免费看片免费播放| 日本免费一二区在线电影| 外国成人网在线观看免费视频| 免费成人在线视频观看| 日韩免费观看一区| 在线观看免费av网站| 免费看美女裸露无档网站| 午夜色a大片在线观看免费| 日韩精品成人亚洲专区| 国产精品成人观看视频免费| 大学生一级毛片免费看| 在线观看亚洲免费| 亚洲麻豆精品国偷自产在线91| 亚洲精品无码久久久影院相关影片| 久久精品亚洲综合| 亚洲av专区无码观看精品天堂| 亚洲色无码国产精品网站可下载| 在线观看免费亚洲| 大妹子影视剧在线观看全集免费| 久久青草国产免费观看| 精品熟女少妇AV免费观看| 亚洲成av人片在线观看天堂无码| 亚洲一区无码中文字幕 | 国产一区二区三区在线观看免费| mm1313亚洲国产精品美女| 亚洲熟妇av一区二区三区漫画| 亚洲综合色一区二区三区小说|