假设一个事件票证网站负责处理数量和并发性,票证分布在不同的服务器和数据库上。
例如,在“ server1”上剩余10张票,在“ server2”上剩余5张票。如果同时“ User1”(其请求已转发到服务器1)发送了一个预订12张票的请求,则“ user2”(其请求已转发到服务器2了)发送了一个预订3张票的请求。 “ User3”(其请求已转发到server2)发送请求以预订2张票。
尽管系统中有15张票证,但server1会告诉用户1 12张票证不可用,但user2和user 3仍可以预订票证。这将对user1不公平。
关于如何处理这种情况的任何想法?
答案 0 :(得分:1)
您不能对每个具有自己的票证数量的服务器执行此操作。您将需要拥有一个中央数据库,每个服务器都可以访问该数据库以获取真相,或者您将需要一个具有分布式锁定机制的分布式数据库(它的核心是同一件事,只是具有用于读取的分布式缓存)
我曾经使用过基于Apache ZooKeeper和Redis的体面的分布式锁管理器,但是您可能应该做自己的研究来找到适合您特定需求的东西,但这是一个不错的起点。