【发布时间】:2016-01-01 23:48:54
【问题描述】:
我有一个包含 100 本书的网站。
但同时我有 101 个请求想要预订这本书。如何处理这种情况?
【问题讨论】:
-
我认为发行(更新图书数量)图书时需要同步。
标签: algorithm design-patterns scalability
我有一个包含 100 本书的网站。
但同时我有 101 个请求想要预订这本书。如何处理这种情况?
【问题讨论】:
标签: algorithm design-patterns scalability
Robert Hanmer's book Patterns for Fault Tolerant Software 有一个名为 Queue for resources (46) 的模式:
将无法立即处理的服务请求存储在队列中 [...]。给队列一个有限的长度,以提高请求到达行首时仍然重要的可能性。
当请求是计算机生成的并且必须按顺序处理时,应使用先进先出 (FIFO) 队列。当人们生成请求时,队列应该使用后进先出(LIFO,a.k.a.堆栈)策略(如 FRESH WORK BEFORE STALE (55))来管理插入和删除。这将帮助人们获得良好的服务。最后放入队列的请求会认为他们得到了很好的服务,而最先放入队列的请求可能已经放弃了。
在 EQUITABLE RESOURCE ALLOCATION (45) 指导下的资源分配应识别已排队的请求和新的且从未排队的请求。
【讨论】:
您应该有一个等候名单表,其中包含带有订阅者编号、书籍 ID 和请求时间的等候名单/保留请求。然后,当其中一本书被归还时——触发一个程序,将释放的书分配给最旧的等待列表请求,并通知提出此请求的订户。
除了触发器,您还可以安排每天/每天运行两次的计划作业,并检查是否有任何列入候补名单的图书现在可用。如果可用,它会将图书分配给对该图书的候补名单最早的订阅者。
如果您的系统负载不重,请使用触发器,否则使用计划作业并将其时间安排在非高峰时段。
【讨论】: