postgresql - Golang 微服务中 API 调用的竞争条件
问题描述
我有一个在 Heroku 上运行的微服务架构。我在处理比赛条件时遇到了一些问题。
问题是,该服务A
:
- 需要通过 API 调用 service 来获取用户的余额
B
,然后 - 如果余额足够大,请通过 API 调用 service 进行提款
C
。
我注意到,如果服务A
快速连续收到两个请求(重复请求),那么这两个操作将竞相调用C
. 因此,用户最终可能会出现两次取款,以及可能的非法负余额。
更复杂的是,在这个生产环境中,微服务通常会在多个 Heroku dyno 上运行。所以我认为这使得使用 Golang 的sync.Mutex
. 潜在地,我可以考虑调整此服务以使用单个测功机以允许使用互斥锁。
有关如何处理此问题的任何建议?
解决方案
推荐阅读
- jquery - 如何循环选择器?
- javascript - 简单的 javascript 替代密码
- objective-c - Instagram 故事分享无法通过登录页面
- doctrine-query - 具有多个值的参数的学说查询
- python - 如何在我的画布小部件(tkinter)上弹出消息框
- javascript - 如何访问远程脚本标签的 innerHTML / text / 内容
- python - 通过 Django HttpResponse 提供的文件是否从磁盘进入内存或流?
- java - 对HashMap中容量计算算法的理解
- android - 由多种构建风格处理的单个应用程序链接
- python - 如何使用python获取标签中的html文本