色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是業務補償?業務補償設計的實現方式

jf_ro2CN3Fa ? 來源:栗箏i ? 2023-04-10 10:01 ? 次閱讀

我們知道,應用系統在分布式的情況下,在通信時會有著一個顯著的問題,即一個業務流程往往需要組合一組服務,且單單一次通信可能會經過 DNS 服務,網卡、交換機、路由器、負載均衡等設備,而這些服務于設備都不一定是一直穩定的,在數據傳輸的整個過程中,只要任意一個環節出錯,都會導致問題的產生。

這樣的事情在微服務下就更為明顯了,因為業務需要在一致性上的保證。也就是說,如果一個步驟失敗了,要么不斷重試保證所有的步驟都成功,要么回滾到以前的服務調用。

因此我們可以對業務補償的過程進行一個定義,即當某個操作發生了異常時,如何通過內部機制將這個異常產生的「不一致」狀態消除掉。

一、關于業務補償機制

1、什么是業務補償

我們知道,應用系統在分布式的情況下,在通信時會有著一個顯著的問題,即一個業務流程往往需要組合一組服務,且單單一次通信可能會經過 DNS 服務,網卡、交換機、路由器、負載均衡等設備,而這些服務于設備都不一定是一直穩定的,在數據傳輸的整個過程中,只要任意一個環節出錯,都會導致問題的產生。

這樣的事情在微服務下就更為明顯了,因為業務需要在一致性上的保證。也就是說,如果一個步驟失敗了,要么不斷重試保證所有的步驟都成功,要么回滾到以前的服務調用。

因此我們可以對業務補償的過程進行一個定義,即當某個操作發生了異常時,如何通過內部機制將這個異常產生的「不一致」狀態消除掉。

2、業務補償設計的實現方式

業務補償設計的實現方式主要可分為兩種:

回滾(事務補償) ,逆向操作,回滾業務流程,意味著放棄,當前操作必然會失敗;

重試 ,正向操作,努力地把一個業務流程執行完成,代表著還有成功的機會。

一般來說,業務的事務補償都是需要一個工作流引擎的。這個工作流引擎把各式各樣的服務給串聯在一起,并在工作流上做相應的業務補償,整個過程設計成為最終一致性的。

Ps:因為「補償」已經是一個額外流程了,既然能夠走這個額外流程,說明時效性并不是第一考慮的因素。所以做補償的核心要點是:寧可慢,不可錯。

二、關于回滾

“回滾” 是指當程序或數據出錯時,將程序或數據恢復到最近的一個正確版本的行為。在分布式業務補償設計到的回滾則是通過事務補償的方式,回到服務調用以前的狀態。

1、顯示回滾

回滾一般可分為 2 種模式:

顯式回滾 ;調用逆向接口,進行上一次操作的反操作,或者取消上一次還沒有完成的操作(須鎖定資源);

隱式回滾 :隱式回滾意味著這個回滾動作你不需要進行額外處理,往往是由下游提供了失敗處理機制的。

最常見的就是「顯式回滾」。這個方案無非就是做 2 個事情:

首先要確定失敗的步驟和狀態,從而確定需要回滾的范圍。一個業務的流程,往往在設計之初就制定好了,所以確定回滾的范圍比較容易。但這里唯一需要注意的一點就是:如果在一個業務處理中涉及到的服務并不是都提供了「回滾接口」,那么在編排服務時應該把提供「回滾接口」的服務放在前面,這樣當后面的工作服務錯誤時還有機會「回滾」。

其次要能提供「回滾」操作使用到的業務數據。「回滾」時提供的數據越多,越有益于程序的健壯性。因為程序可以在收到「回滾」操作的時候可以做業務的檢查,比如檢查賬戶是否相等,金額是否一致等等。

2、回滾的實現方式

對于跨庫的事務,比較常見的解決方案有:兩階段提交、三階段提交(ACID)但是這 2 種方式,在高可用的架構中一般都不可取,因為跨庫鎖表會消耗很大的性能。

高可用的架構中一般不會要求強一致性,只要達到最終的一致性就可以了。可以考慮:事務表、消息隊列、補償機制、TCC 模式(占位 / 確認或取消)、Sagas模式(拆分事務 + 補償機制)來實現最終的一致性。

三、關于重試

“重試” 的語義是我們認為這個故障是暫時的,而不是永久的,所以,我們會去重試。這個操作最大的好處就是不需要提供額外的逆向接口。這對于代碼的維護和長期開發的成本有優勢,而且業務是變化的。逆向接口也需要變化。所以更多時候可以考慮重試。

1、重試的使用場景

相較于回滾,重試使用的場景要少一些:下游系統返回請求超時,被限流中等臨時狀態的時候,我們就可以考慮重試了。而如果是返回余額不足,無權限的明確業務錯誤,就不需要重試。一些中間件或者 RPC 框架,返回 503,404 這種沒有預期恢復時間的錯誤,也不需要重試了。

2、重試策略

重試的時間和重試的次數。這種在不同的情況下要有不同的考量,主流的重試策略主要是以下幾種:

策略 1 - 立即重試 :有時候故障是暫時性的,可能因為網絡數據包沖突或者硬件組件高峰流量等事件造成的,在這種情況下,適合立即重試的操作。不過立即重試的操作不應該超過一次,如果立即重試失敗,應該改用其他策略;

策略 2 - 固定間隔 :這個很好理解,比如每隔 5 分鐘重試一次。PS:策略 1 和策略 2 多用于前端系統的交互操作中;

策略 3 - 增量間隔 :每一次的重試間隔時間增量遞增。比如,第一次 0 秒、第二次 5 秒、第三次 10 秒這樣,使得失敗次數越多的重試請求優先級排到越后面,給新進入的重試請求讓路;

return(retryCount-1)*incrementInterval;

策略 4 - 指數間隔: 每一次的重試間隔呈指數級增加。和增量間隔一樣,都是想讓失敗次數越多的重試請求優先級排到越后面,只不過這個方案的增長幅度更大一些;

return2^retryCount;

策略 5 - 全抖動: 在遞增的基礎上,增加隨機性(可以把其中的指數增長部分替換成增量增長。)適用于將某一時刻集中產生的大量重試請求進行壓力分散的場景;

returnrandom(0,2^retryCount);

策略 6 - 等抖動: 在「指數間隔」和「全抖動」之間尋求一個中庸的方案,降低隨機性的作用。適用場景和「全抖動」一樣。

intbaseNum=2^retryCount;
returnbaseNum+random(0,baseNum);

策略 - 3、4、5、6 的表現情況大致是這樣(x軸為重試次數):

882edae4-d6c8-11ed-bfe3-dac502259ad0.png

3、重試時的注意事項

首先對于需要重試的接口,是需要做成冪等性的,即不能因為服務的多次調用而導致業務數據的累計增加或減少。

滿足「冪等性」其實就是需要想辦法識別重復的請求,并且將其過濾掉。思路就是:

給每個請求定義一個唯一標識。

在進行「重試」的時候判斷這個請求是否已經被執行或者正在被執行,如果是則拋棄該請求。

Ps:此外重試特別適合在高負載情況下被降級,當然也應當受到限流和熔斷機制的影響。當重試的“矛”與限流和熔斷的“盾”搭配使用,效果才是最好。

四、業務補償機制的注意事項

1、ACID 還是 BASE

ACID 和 BASE 是分布式系統中兩種不同級別的一致性理論,在分布式系統中,ACID有更強的一致性,但可伸縮性非常差,僅在必要時使用;BASE的一致性較弱,但有很好的可伸縮性,還可以異步批量處理;大多數分布式事務適合 BASE。

而在重試或回滾的場景下,我們一般不會要求強一致性,只要保證最終一致性就可以了!

2、業務補償設計的注意事項

業務補償設計的注意事項:

因為要把一個業務流程執行完成,需要這個流程中所涉及的服務方支持冪等性。并且在上游有重試機制;

我們需要小心維護和監控整個過程的狀態,所以,千萬不要把這些狀態放到不同的組件中,最好是一個業務流程的控制方來做這個事,也就是一個工作流引擎。所以,這個工作流引擎是需要高可用和穩定的;

補償的業務邏輯和流程不一定非得是嚴格反向操作。有時候可以并行,有時候,可能會更簡單。總之,設計業務正向流程的時候,也需要設計業務的反向補償流程;

我們要清楚地知道,業務補償的業務邏輯是強業務相關的,很難做成通用的;

下層的業務方最好提供短期的資源預留機制。就像電商中的把貨品的庫存預先占住等待用戶在 15 分鐘內支付。如果沒有收到用戶的支付,則釋放庫存。然后回滾到之前的下單操作,等待用戶重新下單。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據傳輸
    +關注

    關注

    9

    文章

    1926

    瀏覽量

    64690
  • 交換機
    +關注

    關注

    21

    文章

    2646

    瀏覽量

    99820
  • 路由器
    +關注

    關注

    22

    文章

    3737

    瀏覽量

    114038
  • DNS
    DNS
    +關注

    關注

    0

    文章

    219

    瀏覽量

    19879

原文標題:淺談分布式系統中的補償機制設計問題

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    飽和蒸汽流量計測量時補償方式的選擇

    在飽和蒸汽流量測量中,補償方式的選擇是確保測量準確性的關鍵。由于飽和蒸汽的密度與溫度或壓力之間存在固定的對應關系,因此可以通過溫度補償或壓力補償來修正測量結果。對于飽和蒸汽來說,可以只
    的頭像 發表于 12-29 09:38 ?93次閱讀

    突破傳統監測模式:業務狀態監控HM的新思路

    一、傳統監控系統的盲區,如何打造業務狀態監控。 在系統架構設計中非常重要的一環是要做數據監控和數據最終一致性,關于一致性的補償,已經由算法部的大佬總結過就不在贅述。這里主要講如何去補償補償
    的頭像 發表于 08-29 14:36 ?246次閱讀
    突破傳統監測模式:<b class='flag-5'>業務</b>狀態監控HM的新思路

    電容半補償和全補償的區別

    電容半補償和全補償是兩種不同的無功補償方式,主要區別在于補償的程度和效果。以下是它們的具體區別: 1、
    的頭像 發表于 08-14 14:08 ?944次閱讀
    電容半<b class='flag-5'>補償</b>和全<b class='flag-5'>補償</b>的區別

    無功補償隨機補償和隨器補償的區別

    無功補償的隨機補償和隨器補償是兩種不同的補償策略,它們在應用場景、控制方法和效果上存在差異。 一、隨機補償 1、概述 隨機
    的頭像 發表于 07-18 14:20 ?822次閱讀
    無功<b class='flag-5'>補償</b>隨機<b class='flag-5'>補償</b>和隨器<b class='flag-5'>補償</b>的區別

    llc電源環路補償是幾階補償

    LLC電源環路補償是電源設計中的一個重要環節,其目的是保證電源系統的穩定性和性能。LLC電源環路補償通常采用二階補償或更高階補償,具體取決于電源系統的需求和設計。 LLC電源環路
    的頭像 發表于 07-16 16:19 ?1294次閱讀

    并聯電容器的補償方式有哪幾種

    。 固定補償 固定補償是最簡單的一種補償方式,它通過安裝一組固定容量的并聯電容器來實現。這種方式
    的頭像 發表于 07-12 14:50 ?843次閱讀

    無功補償怎么計算補償電容容量

    無功補償是電力系統中一種重要的技術手段,用于提高電網的功率因數,降低線損,提高輸電效率,改善電能質量。無功補償的主要方式是通過并聯電容器進行補償。本文將介紹無功
    的頭像 發表于 07-12 14:44 ?1681次閱讀

    無功補償方式有哪幾種類型

    無功補償是電力系統中提高功率因數、改善電網質量、減少線路損失的重要技術手段。根據補償裝置的接入電壓等級和安裝位置的不同,無功補償方式可以分為高壓分散
    的頭像 發表于 06-09 16:50 ?1282次閱讀

    無功補償的裝設方式有哪些

    無功補償是電力系統中維持電壓穩定、提高功率因數、減少能量損失及保障電網安全高效運行的重要技術手段。正確安排無功補償對于優化電力系統性能至關重要。以下是幾種常見的無功補償安排方式: 1.
    的頭像 發表于 06-09 15:00 ?808次閱讀

    無功補償裝置的安裝方式

    無功補償裝置的安裝方式通常根據具體的應用場景和電力系統的需求來決定,以下是一些常見的安裝方式及其特點:
    的頭像 發表于 04-24 14:18 ?603次閱讀

    無功補償器怎么調到自動補償

    無功補償器是一種重要的電力設備,它可以對電力系統中的無功功率進行補償調節,提高電力系統的功率因數。正確調節無功補償器的自動補償功能,可以有效地解決電力系統中的無功功率問題,提高電力系統
    的頭像 發表于 04-24 14:16 ?953次閱讀

    無功補償控制器怎么設置參數 無功補償的作用和原理

    無功補償控制器是一種用于調節電力系統的無功功率的設備,通過設置參數,可以實現對電網的無功功率進行精確控制。本文將詳細介紹無功補償的作用和原理,以及如何設置無功補償控制器的參數。 一、無
    的頭像 發表于 02-01 16:44 ?5515次閱讀

    靜止無功補償與動態無功補償有哪些區別呢?

    靜止無功補償與動態無功補償有哪些區別呢? 靜止無功補償和動態無功補償是電力系統中常用的無功補償技術,兩者在原理、應用和效果等方面有著明顯的區
    的頭像 發表于 01-23 16:28 ?3639次閱讀

    無功補償的原理、作用及常見方式

    無功補償的原理、作用及常見方式? 無功補償是電力系統中的一項重要技術措施,用于改善電力質量和提高能源利用效率。本文將詳細介紹無功補償的原理、作用以及常見的
    的頭像 發表于 01-19 14:19 ?9504次閱讀

    如何根據補償原則,確定無功補償容量?

    如何根據補償原則,確定無功補償容量? 補償原則是電力系統中的一個重要原理,其目的是通過引入無功補償容量來改善電網的功率因數和電壓質量,提高系統的穩定性和可靠性。 第一部分:無功
    的頭像 發表于 01-19 14:19 ?977次閱讀
    主站蜘蛛池模板: 日韩欧美一级| 护士被老头边摸边吃奶的视频| 被窝伦理午夜电影网| 国产视频www| 蜜桃狠狠色伊人亚洲综合网站| 帅哥男男GV在线1080P| 中国人泡妞xxxxxxxx19| 成人影片下载网站| 妓女嫖客叫床粗话对白| 欧美另类摘花hd| 蜜桃狠狠色伊人亚洲综合网站| 手机在线观看毛片| 在线观看日本免费| 青青久久久| 国产一区日韩二区欧美三区| 99久久麻豆AV色婷婷综合| 亚洲h视频在线观看| 日本久久频这里精品99| 国内精品久久影视免费| 久久是热这里只有精品| 97免费人妻在线观看| 无码国产成人777爽死在线观看| 乌克兰10一12x video| 97超碰在线视频 免费| 国产精品亚洲一区二区三区久久| 秋霞电影网午夜一级鲁丝片| 大肥婆丰满大肥奶bbw肥| 2021久久精品免费观看| 国产亚洲精品久久无亚洲| 欧美激情视频在线观看一区二区三区 | 国产午夜福利100集发布| 久久精品国产在热亚洲| 亚洲精品影院久久久久久| 成 人 网 站免费观看| 葵司中文第一次大战黑人| 亚洲AV无码久久流水呻蜜桃久色| 9277高清在线观看视频| 精品视频免费在线观看| 香蕉AV福利精品导航| 波多结衣一区二区三区| 乱叫抽搐流白浆免费视频|