<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          分布式系統(tǒng)題目答案(2)

          共 1794字,需瀏覽 4分鐘

           ·

          2021-05-19 12:58

          整理下分布式系統(tǒng)問題的答案(1)


          6、分布式事務(wù)的解決方案

          分布式事務(wù)是指一個事務(wù)包含多個操作,這些操作分布在不同的服務(wù)器上,要么都成功,要么都失敗。


          分布式事務(wù)問題的主要來源
          1、存儲,分庫分表跨庫增刪改時,保證數(shù)據(jù)的一致性
          2、服務(wù)拆分,一個操作依賴多個服務(wù),一個服務(wù)失敗就影響了整體的操作

          分布式事務(wù)解決方案

          • 2PC 兩階段提交,兩個階段:準(zhǔn)備與提交;兩個角色:事務(wù)管理者與資源管理者。容易產(chǎn)生同步阻塞、單點故障、數(shù)據(jù)不一致等問題,并不能完全保證事務(wù)的一致性。

          • 3PC 三階段提交,三階段:預(yù)備、準(zhǔn)備、提交。與二階段提交相比,加入了超時機(jī)制解決同步阻塞的問題;加入預(yù)備階段提早發(fā)現(xiàn)問題。三階段提交也存在極小概率的數(shù)據(jù)不一致問題。

          • TCC 模式,分為三個操作:Try、Confirm、Cancel。TCC 是分為兩個階段提交。第一階段主業(yè)務(wù)服務(wù)調(diào)用全部的從業(yè)務(wù)服務(wù)的 Try 操作,并且事務(wù)管理器記錄操作日志;第二階段,當(dāng)全部從業(yè)務(wù)服務(wù)都成功時,直接執(zhí)行 Confirm 操作,否則會執(zhí)行 Cancel 逆操作進(jìn)行回滾。

          • Saga 模式,拆分分布式事務(wù)為多個本地事務(wù),然后由 Saga 引擎負(fù)責(zé)協(xié)調(diào)。比 TCC 少了一個 Try 操作,Saga 會直接提交到數(shù)據(jù)庫,出現(xiàn)失敗時進(jìn)行補償。極端情況下的補償動作可能比較麻煩;但對于簡單的業(yè)務(wù)邏輯侵入性更低,減少了通信次數(shù),更輕量。

          • 補償模式,通過補償?shù)姆绞阶寯?shù)據(jù)最終一致。方式有:操作冪等 + 重試機(jī)制 + 人工介入機(jī)制;定時校對;網(wǎng)絡(luò)抖動和服務(wù)不可用導(dǎo)致的情況,可使用下次更新前,檢查和修復(fù)上一次數(shù)據(jù)的更新。

          • 可靠事件模式,通過引入可靠的消息隊列,保證當(dāng)前的可靠事件投遞并且消息隊列確保事件傳遞至少一次,這個事件能夠被訂閱者消費即可。未操作或未消費消息的持久化、消息的冪等性、消息的重發(fā)、消息的 ACK 都是要注意的問題。

          • 不要求最終一致性的柔性事務(wù),會盡最大努力通知。


          7、解決分布式事務(wù)的開源組件

          阿里開源組件 Seata,分為全局事務(wù)和分支事務(wù),分支事務(wù)滿足 ACID 特性,全局事務(wù)基于二階段提交對分支事務(wù)進(jìn)行協(xié)調(diào);同時也滿足上述的幾種模式。

          http://seata.io/zh-cn/docs/overview/what-is-seata.html


          tcc-transaction 框架是 TCC 模式的一種實現(xiàn),tcc-transaction 的使用
          https://github.com/changmingxie/tcc-transaction


          華為 ServiceComb 框架的 Saga 模塊:
          https://github.com/apache/servicecomb-pack/blob/master/README_ZH.md


          8、三階段提交比二階段提交的改進(jìn)

          兩階段提交:

          • 提交請求(Commit-request)階段,協(xié)調(diào)者將通知事務(wù)參與者執(zhí)行事務(wù)但不提交,參與者反饋是否可以正常提交。

          • 提交(Commit)階段,協(xié)調(diào)者將基于第一個階段的反饋結(jié)果進(jìn)行決策,提交或回滾這個事務(wù);只有當(dāng)所有的參與者同意提交,協(xié)調(diào)者才會通知各個參與者提交事務(wù),否則協(xié)調(diào)者將通知各個參與者回滾事務(wù)


          兩階段提交存在的問題:

          • 資源被同步阻塞

          • 協(xié)調(diào)者可能出現(xiàn)單點故障

          • Commit 階段發(fā)出 commit 通知,但網(wǎng)絡(luò)抖動可能導(dǎo)致出現(xiàn)數(shù)據(jù)不一致


          三階段提交:

          • CanCommit 階段,協(xié)調(diào)者詢問參與者是否可以正常提交,此階段不執(zhí)行僅評估與反饋,反饋 no 或超時直接終止。

          • PreCommit 階段,所有參與者反饋可提交,進(jìn)行事務(wù)的預(yù)提交;否則反饋 no 或超時,中斷事務(wù)。

          • DoCommit 階段,事務(wù)提交;協(xié)調(diào)者沒接收到或接收超時中斷事務(wù);參與者接受協(xié)調(diào)者提交請求超時自動提交


          三階段提交進(jìn)行了改進(jìn):

          • 協(xié)調(diào)者與參與者都引入了超時機(jī)制,解決同步阻塞問題

          • 添加預(yù)提交階段,鎖定資源前進(jìn)行了預(yù)判,提早發(fā)現(xiàn)問題


          三階段提交依然存在數(shù)據(jù)不一致的問題,如網(wǎng)絡(luò)問題 DoCommit 階段接收者接收超時自動提交,其余節(jié)點回滾,此時就會產(chǎn)生數(shù)據(jù)不一致。


          瀏覽 83
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费无码国产 | 中文字幕 日韩欧美 | 欧美三级片视频 | 色天堂导航 | 小早川怜子爆乿护士在线观看 |