同時(shí)可以將事務(wù) 4 重構(gòu)成 PROCEDURE 防止 ORM 可能回滾失敗。
0x0011
流量大到數(shù)據(jù)庫扛不住了,加入 MQ 服務(wù):

使用 Redis 抗住流量,使用 MQ 抗住壓力,使用 PROCEDURE 降低 IO 。
0x0011看起來像一個(gè)可靠的系統(tǒng)了,但是還有一個(gè)隱患: uncaughtExceptionError 或者 程序宕掉了,這個(gè)會(huì)影響 最終一致性 ,導(dǎo)致 Redis 數(shù)據(jù)與 Database 中的數(shù)據(jù)在搶購(gòu)臨界結(jié)束的時(shí)候不一致。
0x0100
增加最終一致性保證。
搶購(gòu)的栗子有個(gè)很特別的地方,就是 total limit ,達(dá)到總數(shù)上限之后,就只有 MQ 中的部分需要處理了,因此可以很巧妙的利用時(shí)間差,即考慮在達(dá)到上限之后,取一次數(shù)據(jù)庫快照,延遲一段時(shí)間之后,再對(duì)比一次數(shù)據(jù)庫,判斷是數(shù)據(jù)不一致還是正常邏輯。

這是一個(gè)投機(jī)取巧的處理方式,一定程度上可以保證最終一致性。當(dāng)然,還是人最靠譜了,程序搞不定,人工修復(fù)嘛,ORZ~。
終語
分布式事務(wù)是一個(gè)很大的話題,依據(jù)業(yè)務(wù)量大小可以給出很多實(shí)現(xiàn)。
Nodejs 做分布式事務(wù)勉勉強(qiáng)強(qiáng),異步里面的雷很多,不過依賴良好的設(shè)計(jì)和邏輯一樣可以實(shí)現(xiàn)。