免费国产美女一级A作爱播放免费,日本动漫精品一区二区三区,ⅩⅩ国产全无遮挡无码,国产精品无码视频2020

  • <delect id="1z9bx"><center id="1z9bx"><ruby id="1z9bx"></ruby></center></delect>

      1. <u id="1z9bx"><sub id="1z9bx"></sub></u>

      2. 一文教你迅速解決分布式事務XA一致性問題

        發(fā)布時間:2024-09-17
        云計算
        近日,騰訊云發(fā)布了分布式數(shù)據(jù)庫解決方案(dcdb),其最明顯的特性之一就是提供了高于開源分布式事務xa的性能。大型業(yè)務系統(tǒng)有著用戶多、并發(fā)高的特點,在這方面,集中式數(shù)據(jù)庫(單機數(shù)據(jù)庫)的性能很難支持,因此主流的互聯(lián)網(wǎng)公司往往采用分布式(架構(gòu))數(shù)據(jù)庫,物理上利用更多的低端設備,邏輯上對大表水平拆分支撐業(yè)務的需要。
        雖然分布式數(shù)據(jù)庫能解決性能難題,但事務一致性(consistency)的問題,卻很難在分布式數(shù)據(jù)庫上得到解決。
        分布式事務老大難題,數(shù)據(jù)一致難以實現(xiàn)
        眾所周知,一個事務所做的更新,分布式數(shù)據(jù)庫系統(tǒng)內(nèi)部多個獨立的數(shù)據(jù)節(jié)點完成(每個節(jié)點的本地事務是這個全局事務的一個事務分支),在這樣一個全局事務提交期間,有可能某些事務分支無法成功提交。
        針對這一問題,雖然業(yè)內(nèi)早已存在理論解決方案——二階段提交協(xié)議(簡稱2pc),并延伸出分布式事務(簡稱xa)的解決方案。但業(yè)內(nèi)卻少有工程化實現(xiàn)且大規(guī)模應用的案例。而騰訊云分布式數(shù)據(jù)庫dcdb,卻已在內(nèi)部業(yè)務中應用多年。
        (圖:二階段提交算法)
        目前dcdb已應用在騰訊內(nèi)部90%%u4ee5上的交易、計費業(yè)務,并且三一重工(樹根互聯(lián))、匯通天下(g7)、閱文集團(起點/創(chuàng)世中文網(wǎng)等)、微眾銀行、和泰人壽、威富通等都在該產(chǎn)品。
        騰訊云首發(fā)分布式數(shù)據(jù)庫xa,支持mysql 5.7
        騰訊云分布式數(shù)據(jù)庫dcdb,是基于騰訊金融級數(shù)據(jù)庫(公司內(nèi)部代號tdsql)云化改造而來的兼容mysql協(xié)議的分布式數(shù)據(jù)庫。現(xiàn)如今,騰訊云dcdb已經(jīng)正式在mysql 5.7(percona分支)協(xié)議上支持分布式事務xa,并已在騰訊云公有云、金融云發(fā)布供開發(fā)者使用。開發(fā)者可以通過申請dcdb實例,并在初始化后,連接實例運行如下sql進行初始化:
        mysql> xa init;
        query ok, 0 rows affected (0.03 sec)
        注意:初始化xa前,請開啟強同步復制能力,另外該sql會創(chuàng)建xa.gtid_log_t,用戶在后續(xù)使用中萬勿對其進行任何操作。。
        為更好的支持分布式事務,dcdb還新增了sql命令:
        1) select gtid(),獲取當前分布式事務的gtid(事務的全局唯一性標識),如果該事務不是分布式事務則返回空;
        gtid的格式:
        ‘網(wǎng)關(guān)id’-‘網(wǎng)關(guān)隨機值’-‘序列號’-‘時間戳’-‘分區(qū)號’,例如 c46535fe-b6-dd-595db6b8-25
        2) select gtid_state(“gtid”),獲取“gtid”的狀態(tài),可能的結(jié)果有:
        a) “commit”,標識該事務已經(jīng)或者最終會被提交
        b) “abort”,標識該事務最終會被回滾
        c) 空,由于事務的狀態(tài)會在一個小時之后清楚,因此有以下兩種可能:
        1) 一個小時之后查詢,標識事務狀態(tài)已經(jīng)清除
        2) 一個小時以內(nèi)查詢,標識事務最終會被回滾
        3) 運維命令:
        xa recover:向后端set發(fā)送xa recover命令,并進行匯總
        xa lockwait:顯示當前分布式事務的等待關(guān)系(可以使用dot命令將輸出轉(zhuǎn)化為等待關(guān)系圖)
        xa show:當前網(wǎng)關(guān)上正在運行的分布式事務
        以python為例,可以對轉(zhuǎn)賬業(yè)務進行如下編碼:
        db =
        pymysql.connect(host=testhost, port=testport, user=testuser, password=testpassword,
        database=testdatabase)
        cursor = db.cursor()
        try:
        cursor.execute(begin)
        #為一個賬戶bob的余額減1
        query = update
        t_user_balance set balance = balance – 1
        where user=\\\’bob\\\’ and balance>1)
        affected =
        cursor.execute(query)
        if affected == 0: #余額不足,回滾事務
        cursor.execute(rollback)
        return
        #為一個賬戶john的余額加1
        query = update
        t_user_balance set balance = balance 1
        where user=\\\’john\\\’)
        cursor.execute(query)
        # 為了安全起見,建議在這里執(zhí)行‘select gtid()’獲取當前事務的id值,便于后續(xù)跟蹤事務的執(zhí)行情況
        #提交事務
        cursor.execute(commit)
        except pymysql.err.mysqlerror as
        e:
        # 發(fā)生故障,回滾事務
        cursor.execute(rollback)
        分布式事務的好處在于會大大降低應用開發(fā)難度,因為在某些不支持xa的數(shù)據(jù)庫中,需要業(yè)務系統(tǒng)通過特殊并且巧妙的設計,而非利用數(shù)據(jù)庫來解決事務中數(shù)據(jù)不一致等問題。這種對應用開發(fā)者的技術(shù)水平要求很高,越是復雜的業(yè)務系統(tǒng),越會增加開發(fā)成本和技術(shù)門檻,這是業(yè)內(nèi)大多數(shù)開發(fā)者面對分布式數(shù)據(jù)庫時,只能望而卻步的主要原因。
        騰訊云dcdb xa關(guān)鍵實現(xiàn)方案
        1、dcdb架構(gòu)介紹
        騰訊云dcdb整個集群架構(gòu)簡圖如下圖,mysql采用主從節(jié)點配置(也叫作主備)一套主從節(jié)點叫做set,在每一個set外配置網(wǎng)關(guān)(tproxy),形成一個物理分片(shard)。
        dcdb后端是mysql(或其分支版本)數(shù)據(jù)庫,目前騰訊云公有云發(fā)布支持xa的版本是基于mysql 5.7.17(percona分支)。
        2、網(wǎng)關(guān)(tproxy)與xa
        網(wǎng)關(guān)是用于接收請求并與后端mysql建立連接的網(wǎng)絡模塊。網(wǎng)關(guān)可以用兩種模式工作,一種稱為noshard,此模式下網(wǎng)關(guān)不處理/不解析sql語句,透明轉(zhuǎn)發(fā)請求和應答。另一種模式稱為shard(分布式,即支持自動水平分表)模式下,tproxy會解析sql并轉(zhuǎn)發(fā)到不同的數(shù)據(jù)分片。
        在實現(xiàn)xa之前,網(wǎng)關(guān)不允許在一個事務中向多個set發(fā)送dml語句。因為未實現(xiàn)二階段提交(2pc)時,事務采用一階段提交,如果分布式中某一個set提交失敗了或回滾了,那么這個分布式事務就處于不一致的狀態(tài)。
        (網(wǎng)關(guān)的工作方式)
        二階段提交中需要的事務管理器(tm)。為了解決容災、簡化架構(gòu),騰訊云dcdb將tm實現(xiàn)在tproxy中,而dcdb的網(wǎng)關(guān)是一個無狀態(tài)的模塊,通過這一架構(gòu),dcdb xa可以支持:
        1、分布式事務對業(yè)務透明,兼容單機事務語法(start transaction/commit/rollback/savepoint)。
        2、每個網(wǎng)關(guān)都可以獨立接受和處理事務請求,且無需與其他網(wǎng)關(guān)進行協(xié)調(diào)節(jié)點故障不丟失事務。
        3、允許顯式事務中多條語句分別發(fā)給多個分片。
        4、網(wǎng)關(guān)無需持久狀態(tài),無需容災,可以隨時經(jīng)由調(diào)度集群退出或加入集群,且性能可以擴展。
        5、支持autocommit下單條語句寫訪問多個分片等。
        dcdb網(wǎng)關(guān)還允許以流式處理方式運行g(shù)roup by、order by,流式處理讓這類操作變得非常方式非常高效;網(wǎng)關(guān)還支持兩個shard使用shardkey(分表鍵)做等值連接,以及使用shardkey的子查詢。
        未來,騰訊云還計劃支持分布式join、sparksql、二級分區(qū)等高級功能,兼容更多mysql高級語法。
        3、強同步與xa
        由于騰訊云dcdb默認采用強同步復制,即主從節(jié)點數(shù)據(jù)完全一致,因此xa事務也遵循強同步的邏輯,即需等待從機確認數(shù)據(jù)同步后,才給業(yè)務以應答(commit)。基于強同步,在以下兩種異常情況下,dcdb xa可輕松應對
        1、主節(jié)點故障時,已確認事務數(shù)據(jù)不會丟失:主節(jié)點故障那么擁有最新數(shù)據(jù)和binlog的從機就被選為主節(jié)點,這其中的數(shù)據(jù)也包括所有已經(jīng)向用戶確認完成提交的事務的數(shù)據(jù)。
        2、原主節(jié)點恢復后重新加入集群,未確認事務自動閃回:原主節(jié)點恢復重新接入集群,它將作為從機運行,此時他可能存留多余的已提交事務(此時事務并未得到強同步同步確認,即原備機并沒有相關(guān)數(shù)據(jù)),那么這些事務會被閃回。雖然這些事務可能已經(jīng)在原主節(jié)點的mysql內(nèi)部完成提交,但由于強同步機制,他并不會向客戶端返回commit語句,這意味著仍被視為一個未完成的事務。因此,這些事務的閃回了也并沒有破壞數(shù)據(jù)庫的acid屬性。這里值得說的是,閃回flashback是基于binlog生成做逆操作,它與數(shù)據(jù)庫回滾并不同rollback,閃回可以做ddl操作。
        騰訊云dcdb的強同步為騰訊金融級數(shù)據(jù)庫自研的一項能力,性能比官方半同步大幅提高,幾乎等于異步復制性能,騰訊云dcdb在騰訊內(nèi)部應用多年,未發(fā)生過一起因為主從切換、故障帶來的數(shù)據(jù)誤差。而且
        上一個:消費市場升級 甜味劑開始趨向于營養(yǎng)健康
        下一個:半自動拋光機SP-L1/IM-P2的拋光優(yōu)點

        導輪對對中走絲線切割設備加工的重要性
        SS-1土壤收縮儀
        砂塵試驗箱故障處理--經(jīng)驗之談
        行政賠償訴訟程序是怎樣的
        windows意外關(guān)閉原因(win10意外關(guān)閉事件6008)
        碳鋼法蘭的磨削生產(chǎn)工藝介紹
        金銀花的副作用
        嘀嗒順風車每天可以接幾單(嘀嗒順風車每天可以接幾單訂單)
        定制網(wǎng)站建設的意義和作用在哪里?需要注意什么?
        gessmann捷斯曼D-742111操作手柄到貨實物圖