星巴克不使用兩階段提交
閱讀本文大概需要 5 分鐘。
來源:r6d.cn/6dyh
原文鏈接:
https://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
1. 請給我一杯熱巧克力(Hotto Cocoa o Kudasai)
點好咖啡后,收銀員會拿出一個杯將你的訂單在杯子上做個標記,然后將杯子放到一個隊列。這里所說的隊列其實就是咖啡機上的一排杯子;
隊列將收銀員和咖啡師解耦,使收銀員能夠不斷接單,即使咖啡師已經(jīng)有點忙不過來了。
2 關(guān)聯(lián)
多位咖啡師可能在分別使用不同的咖啡機同時制作。另外,不同類型的咖啡所需的 時間也不同,例如調(diào)配型咖啡會比已經(jīng)磨好、拿杯子直接接就行的咖啡所花的時間要長;
咖啡師可能會將同一咖啡類型的多個訂單放到同一批制作,以節(jié)省整體的制作時間。
在美國,大部分星巴克都會將顧客的名字作為顯式關(guān)聯(lián) ID 寫到杯子上,咖啡制作完成后服務(wù)員會叫顧客的名字;
在其他國家,可能會用咖啡的類型來做關(guān)聯(lián)(例如,服務(wù)員會喊:“大杯摩卡好了”)。
3. 異常處理
如果付款失敗,他們會怎么做?
如果咖啡已經(jīng)做好了,他們會倒掉;
如果還沒有開始做,他們會將杯子從“隊列”中拿走。
如果咖啡做錯了,或者對咖啡不滿意?他們會重新做一杯;
如果咖啡機壞了,做不了咖啡?他們會退款。
3.1 銷賬
3.2 重試
回退已完成的操作;
重試失敗的操作。
如果失敗的原因是違反了業(yè)務(wù)規(guī)則,那重試就不太可能會成功;
如果失敗的原因是某個外部系統(tǒng)掛了,那重試就有可能會成功。
3.3 補償
4. 兩階段提交
準備階段;
執(zhí)行階段。
準備階段:前臺點單,打印小票,然后將現(xiàn)金和小票都放到臺面上,等待咖啡做好;
執(zhí)行階段:咖啡做好后,現(xiàn)金、小票和咖啡同時易手,完成交易。
5. 會話模式
時間較短的同步交互:完成下單和支付;
時間較長的異步交互:完成咖啡的制作和交付。
補償:退款到信用卡;
重試:補發(fā)配送過程中丟失的物品。
慢一點才能更快
推薦閱讀:
SpringBoot + MyBatis + MySQL讀寫分離實踐!
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?

