首页 > 解决方案 > 如何在事件票务系统设计中处理顺序和并发

问题描述

假设一个活动门票网站处理数量和并发性,门票分布在不同的服务器和数据库上。

例如,在“server1”上还剩 10 张票,在“server2”上还剩 5 张票。如果同时“User1”(其请求被转发到server1)发送请求预订12张门票,“user2”(其请求被转发到server2)发送请求预订3张门票。“User3”(其请求被转发到 server2)发送预订 2 张门票的请求。

虽然系统中有 15 张门票可用,但 server1 会告诉 user1 有 12 张门票不可用,但 user2 和 user 3 都可以预订门票。这对 user1 来说是不公平的。

关于如何处理这种情况的任何想法?

标签: architecturesystem-designhigh-level

解决方案


您不能在每个服务器都有自己的票数时执行此操作。您将需要一个中央数据库,每个服务器都可以访问以获取事实来源,或者您将需要一个具有分布式锁定机制的分布式数据库(其核心是相同的,只是具有用于读取的分布式缓存) .

我使用了基于 Apache ZooKeeper 和 Redis 的不错的分布式锁管理器,但您可能应该自己研究以找到适合您特定需求的东西,但它们是一个很好的起点。


推荐阅读