Seadt: Financial Level Distributed Transaction Solution (III) - SAGA Design and Implementation
AD |
seadt Shopee Financial Products GolangTCCseadt TCCseadt TCCseadt-SAGAseadtTCCSAGASAGATCCSAGA1. SAGASAGASagasSAGASAGASAGA1 SAGAT C SAGA/SAGASAGA1
seadt Shopee Financial Products Golang
TCCseadt TCCseadt TCCseadt-SAGA
seadtTCCSAGASAGATCCSAGA
1. SAGA
SAGASagasSAGASAGASAGA
1 SAGA
T C SAGA/SAGASAGA
1.1 SAGA-
TCCSAGAATseadtTCCTCCSAGA
TCC | SAGA | |
& | ||
TryConfirmCancel | ||
TCC
SAGA
SAGASAGASAGASAGASAGASAGA
1.2 SAGA-
SAGASAGA
1.2.1
SAGADSLTCTCTCSAGA
2
- SAGA
- TMTCSAGA
- TCDSLQuotaA
- 3TCDSLQuotaASAGA
- 3TCDSLPromotionB
- 5TCDSLPromotionB4
- 5SAGA
import seadtfunc BizFunc() { sagaTxId := "BizTrans" seadt.StartSAGATx(ctx, seadt_name, req_id)}
// DSL{ "seadt_name":"BizTrans", "tx_seq":[ { "sub_tx_id": "UseQuota", "commit_method": "/Module_Name/UseQuota", "callback_method": "/Module_Name/UnUseQuota", "pre_step":"Start", "next_step":"UseCoupon" }, { "sub_tx_id": "UseCoupon", "commit_method": "/Module_Name/UseCoupon", "callback_method": "/Module_Name/UnUseCoupon", "pre_step":"UseQuota", "next_step":"End" } ]}
- DSL
- /
- SAGA
- DSL
- DSL
DSL(domain-specific language)HTMLDSL
1.2.2
SAGASDKTMSAGATMSAGASAGATCSAGA
3
- SAGA
- QuotaA
- 2TMTCTCQuotaASAGA
- 2PromotionB
- 4TMTCTCQuotaPromotionSAGA
- 4SAGA
func BizTrans(ctx context.Context, userId, loanId, couponIdPrincipal string) { saga.WithGlobalTransaction(ctx, func(ctx context.Context) { // biz.RefAccount().UseQuota(ctx, userId, loanId, Principal) // biz.RefPromotion().UseCoupon(ctx, userId, couponId) // local db op dao.ClFileAuthDAO().Insert(ctx, record) }, &seadt_model.Option{ TimeOutSecond: 10, TransactionName: "loan_apply", })
seadt TCCTCC10/
- TC
SAGA | SAGA | |
-TC / SDK-TC
- SAGA
- SDK-TCTCTMRMSDK
- -TCTC
SDKTC
SDK-TC | -TC | |
SDK | ||
SDK | ||
DB | ||
TM |
TCTCTCTCseadt TC
1.3
1.2SAGA
seadt-SAGA
seadt
SAGASAGA
DSL | ||
seadt TCC |
seadtTC
2. seadt-SAGA
2.1
seadt-SAGA
4 seadt-SAGA
2.2
seadt-SAGA
5 seadt-SAGA
- TM TC
- RM
- RM
- TM
- ConfirmTC
- CancelTCCancel RM Unuse/
2.3
1.2.2
6
seadt-SAGAseadt-TCCseadt-SDK SAGA Compensate API pbForward Forward pb
// saga_manager.govar quotaUseProxySagaRef *saga.SagaResourceServiceProxyfunc init() { quotaUseProxySagaRef = saga.RegisterSagaResourceService(new(QuotaUseSagaImpl))}func GetQuotaUseSagaRef() *saga.SagaResourceServiceProxy { return quotaUseProxySagaRef}
// saga_resource_impl.gotype QuotaUseSagaImpl struct {}func (t *QuotaUseSagaImpl) Forward(ctx context.Context, payload interface{}) (bool, error) { biz.UseQuota(ctx, payload) return true,nil}func (t *QuotaUseSagaImpl) Compensate(ctx context.Context, payload interface{}) bool { biz.UnUseQuota(ctx, payload) return true}
// service.gofunc UseQuota(ctx context.Context, req *api.UseQuotaReq, resp *api.UseQuotaResp) error { db.WithTransaction(ctx, func(ctx context.Context) { resp, err := seadt.GetQuotaUseSagaRef().Forward(ctx, req) if err != nil { panic(err) } }) return nil}
2.4
TCCSAGA
7
8
SAGATCCSAGACommitCommitCommitted
SAGATCCSAGA: PreparedConfirmedCanceledConfirmedCanceled
TM RM
Prepared | Committing | Committed | SRollbacking | Rollbacked | ||
- | Y | N | N | Y | N | |
Prepared | N | Y | N | N | Y | N |
Confirmed | N | N | Y | Y | Y | N |
Canceled | N | N | N | N | Y | Y |
RM RM
Prepared | Committed | Canceled | ||
Y | Y | Y | Y | |
Prepared | Y | Y | Y | Y |
Confirmed | Y | Y | Y | Y |
Canceled | Y | Y | Y | Y |
SAGARollbackingConfirmedCanceledSAGACanceled
- Rollbacking
SAGA
SAGA-TC
SAGASAGAseadt
-
SAGA
Backward crash recovery for parallel sagas is similar to that for sequential sagas. Within each process of the parallel saga, transactions are compensated for (or undone) in reverse order just as with sequential sagas. In addition all compensations in a child process must occur before any compensations for transactions in the parent that were executed before the child was created (forked). (Note that only transaction execution order within a process and fork and join information constrain the order of compensation. If T1 and T2 have executed in parallel processes and T2 has read data written by T1, compensating for T1 does not force us to compensate for T2 first.) : Hector Garcaa-Molrna, Kenneth Salem. SAGAS
9 SAGA
SAGA
Happened-before
In computer science, the happened-before relation (denoted: ->) is a relation between the result of two events, such that if one event should happen before another event, the result must reflect that, even if those events are in reality executed out of order (usually to optimize program flow). This involves ordering events based on the potential causal relationship of pairs of events in a concurrent system, especially asynchronous distributed systems. It was formulated by Leslie Lamport.
The happened-before relation is formally defined as the least strict partial order on events such that:
- If events a and b occur on the same process, a -> b if the occurrence of event a preceded the occurrence of event b.
- If event a is the sending of a message and event b is the reception of the message sent in event a, a -> b.
- If two events happen in different isolated processes (that do not exchange messages directly or indirectly via third-party processes), then the two processes are said to be concurrent, that is neither a -> b nor b -> a is true.
: Happened-before wiki
Happened-beforeHappened-before
Happened-before
SAGAHappened-before
- -
TCDSLSAGAHappened-before
- -
SAGASAGATCHappened-beforeHappened-before
Happened-before
Happened-before
VC n n
- P i V C i = [ 0 , , 0 ]
- P i i V C i [ i ] + = 1
- P i P j V C i
- P j [ 0 , n ) k V C j [ k ] = M a x ( V C j [ k ] , V C i [ k ] ) 2V C j [ j ] + = 1
1TM(Trans)RMQuotaPromotion
- TransP0QuotaP1PromotionP2
- TMRMVCi = [0,0,0]
- TransATrans[1,0,0]
- TransQuotaQuotaBQuota[2,1,0]
- TransQuotaPromotionPromotionCPromotion[4.2,1]
10
TCTCABCHappened-beforeA[1,0,0] < B[2,1,0] < C[4.2,1] => A -> B -> C
Happened-before
PiHashMapKeyValue
11
Happened-before
SAGASAGA
12
seadtTCTC
- ASeq-a < BSeq-bABABABASeq-a < BSeq-b
(TC)()SAGA
Happened-before
Happened-beforeseadtseadt-sdk
seadtseadt-sdkseadt-tc
- sagahttps://github.com/mltds/sagas-report
- https://zh.wikipedia.org/wiki/%E5%81%8F%E5%BA%8F%E5%85%B3%E7%B3%BB
- https://zh.wikipedia.org/wiki/%E5%85%A8%E5%BA%8F%E5%85%B3%E7%B3%BB
- Happened-beforehttps://en.wikipedia.org/wiki/Happened-before
- https://writings.sh/post/logical-clocks
:Yongchang
::Shopee
:https://mp.weixin.qq.com/s/VGz3YIHPzkniCWNDsc8Xgw
Disclaimer: The content of this article is sourced from the internet. The copyright of the text, images, and other materials belongs to the original author. The platform reprints the materials for the purpose of conveying more information. The content of the article is for reference and learning only, and should not be used for commercial purposes. If it infringes on your legitimate rights and interests, please contact us promptly and we will handle it as soon as possible! We respect copyright and are committed to protecting it. Thank you for sharing.(Email:[email protected])
Mobile advertising space rental |
Tag: Seadt Financial Level Distributed Transaction Solution III SAGA Design
Has the prophecy of nine experts regarding the Three Gorges Dam really come true now?
NextCrazy Internet: Why Are Choppers Named Heroes?
Guess you like
-
China Leads in Developing IEC 63206 International Standard, Driving Global Innovation in Industrial Process Control System RecordersDetail
2025-01-18 11:06:14 1
-
The 2024 Micro-Short Series Industry Ecological Insight Report: 647,000 Job Opportunities, Rise of Diversified Business Models, and High-Quality Content as the Future TrendDetail
2025-01-17 17:33:01 1
-
Global PC Market Shows Moderate Recovery in 2024: High AIPC Prices a Bottleneck, Huge Growth Potential in 2025Detail
2025-01-17 11:02:09 1
-
Bosch's Smart Cockpit Platform Surpasses 2 Million Units Shipped, Showcasing Strength in Intelligent Driving TechnologyDetail
2025-01-17 10:55:29 1
-
YY Guangzhou Awarded "2024 Network Information Security Support Unit" for Outstanding ContributionsDetail
2025-01-17 10:43:28 1
-
TikTok CEO Invited to Trump's Inauguration, Biden Administration May Delay BanDetail
2025-01-16 20:06:11 1
-
Douyin Denies Opening International Registration: Overseas IPs Don't Equate to Overseas Registration; Platform Actively Combats Account ImpersonationDetail
2025-01-16 14:26:12 1
-
Lei Jun, Xiaomi's founder, chairman, and CEO, has set a new goal: learning to drive a forklift!Detail
2025-01-15 10:22:30 11
-
ByteDance Scholarship 2024: Fifteen Outstanding Doctoral Students Awarded RMB 100,000 Each to Advance Frontier Technology ExplorationDetail
2025-01-14 15:56:39 1
-
Fliggy Launches "Peace of Mind for the New Year" Service Initiative to Ensure Smooth Travel During the Year of the Snake Spring Festival RushDetail
2025-01-14 15:24:53 1
-
Arm's Massive Fee Hike and Potential In-House Chip Development: A Precursor to a Seismic Shift in the Chip Industry?Detail
2025-01-14 11:02:36 1
-
Adobe Firefly Launches: Generative AI Suite Revolutionizes Image and Video Processing EfficiencyDetail
2025-01-14 10:46:39 1
-
Chinese New Year Elements Sell Like Hotcakes Overseas: Cross-border E-commerce "Spring Festival Economy" Booms, Cainiao Overseas Warehouses Help Merchants Capture Market ShareDetail
2025-01-13 14:17:50 1
-
China Railway's 12306 System Successfully Navigates Spring Festival Travel RushDetail
2025-01-13 12:56:54 1
-
Handan, Hebei Province Successfully Tests First Low-Altitude Drone Delivery Route, Ushering in a New Era of Smart LogisticsDetail
2025-01-13 12:50:13 1
-
Kuaishou Leads in Developing Anti-Fraud Industry Standards, Contributing to a Secure and Reliable Short-Video CommunityDetail
2025-01-13 09:47:32 11
-
Microsoft Offers Top Salaries to Retain AI Talent: AI Software Engineers Earn Over $400,000 AnnuallyDetail
2025-01-12 17:28:34 11
- Detail
-
Chang'e-5 Mission Unveils Secrets: New Discoveries Regarding Lunar Magnetic Field Strength and Deep Dynamics 2 Billion Years AgoDetail
2025-01-10 11:42:44 11
-
SenseTime's "Day Day New" Multimodal Large Model: Native Fusion Enables Diverse ApplicationsDetail
2025-01-10 11:40:40 21