星巴克不使用两阶段提交
共 2689字,需浏览 6分钟
·
2020-10-31 20:38
阅读本文大概需要 5 分钟。
来源:r6d.cn/6dyh
原文链接:
https://www.enterpriseintegrationpatterns.com/ramblings/18_starbucks.html
1. 请给我一杯热巧克力(Hotto Cocoa o Kudasai)
点好咖啡后,收银员会拿出一个杯将你的订单在杯子上做个标记,然后将杯子放到一个队列。这里所说的队列其实就是咖啡机上的一排杯子;
队列将收银员和咖啡师解耦,使收银员能够不断接单,即使咖啡师已经有点忙不过来了。
2 关联
多位咖啡师可能在分别使用不同的咖啡机同时制作。另外,不同类型的咖啡所需的 时间也不同,例如调配型咖啡会比已经磨好、拿杯子直接接就行的咖啡所花的时间要长;
咖啡师可能会将同一咖啡类型的多个订单放到同一批制作,以节省整体的制作时间。
在美国,大部分星巴克都会将顾客的名字作为显式关联 ID 写到杯子上,咖啡制作完成后服务员会叫顾客的名字;
在其他国家,可能会用咖啡的类型来做关联(例如,服务员会喊:“大杯摩卡好了”)。
3. 异常处理
如果付款失败,他们会怎么做?
如果咖啡已经做好了,他们会倒掉;
如果还没有开始做,他们会将杯子从“队列”中拿走。
如果咖啡做错了,或者对咖啡不满意?他们会重新做一杯;
如果咖啡机坏了,做不了咖啡?他们会退款。
3.1 销账
3.2 重试
回退已完成的操作;
重试失败的操作。
如果失败的原因是违反了业务规则,那重试就不太可能会成功;
如果失败的原因是某个外部系统挂了,那重试就有可能会成功。
3.3 补偿
4. 两阶段提交
准备阶段;
执行阶段。
准备阶段:前台点单,打印小票,然后将现金和小票都放到台面上,等待咖啡做好;
执行阶段:咖啡做好后,现金、小票和咖啡同时易手,完成交易。
5. 会话模式
时间较短的同步交互:完成下单和支付;
时间较长的异步交互:完成咖啡的制作和交付。
补偿:退款到信用卡;
重试:补发配送过程中丢失的物品。
慢一点才能更快
推荐阅读:
SpringBoot + MyBatis + MySQL读写分离实践!
微信扫描二维码,关注我的公众号
朕已阅