architecture - 如何在事件票务系统设计中处理顺序和并发
问题描述
假设一个活动门票网站处理数量和并发性,门票分布在不同的服务器和数据库上。
例如,在“server1”上还剩 10 张票,在“server2”上还剩 5 张票。如果同时“User1”(其请求被转发到server1)发送请求预订12张门票,“user2”(其请求被转发到server2)发送请求预订3张门票。“User3”(其请求被转发到 server2)发送预订 2 张门票的请求。
虽然系统中有 15 张门票可用,但 server1 会告诉 user1 有 12 张门票不可用,但 user2 和 user 3 都可以预订门票。这对 user1 来说是不公平的。
关于如何处理这种情况的任何想法?
解决方案
您不能在每个服务器都有自己的票数时执行此操作。您将需要一个中央数据库,每个服务器都可以访问以获取事实来源,或者您将需要一个具有分布式锁定机制的分布式数据库(其核心是相同的,只是具有用于读取的分布式缓存) .
我使用了基于 Apache ZooKeeper 和 Redis 的不错的分布式锁管理器,但您可能应该自己研究以找到适合您特定需求的东西,但它们是一个很好的起点。
推荐阅读
- python - 让多个 matplotlib 轴使用相同的颜色循环器
- java - 自定义 Null-Safety 注释在 kotlin 中无效
- xslt - 使用 groovy 脚本或 xslt 删除 xml 版本和其他标签
- r - 如何使用 R 获取 Outlook 中收到的电子邮件的时间分量?
- python - 无法使用 Python 代码列出 GSuite 域中的组织单位
- r - 如何在由另一列分组的列中查找前 5 个最常出现的名称
- php - PHP 是否有不短路的布尔运算符?
- java - 使用 forloop 的斐波那契数列
- pandas - 如何将新列中的值附加到 Pandas 中的 Null 行
- python-3.x - 如果相同的项目在指定的列表中,如何自动检查 Qlistwidgetitems?