我正在尝试实现一个应用程序来协调多个正在调度独占资源的用户。调度数据必须在具有单个主节点的网络上保持强一致性。预定资源可以是任何东西,从会议室到工作现场的工作人员。
我们假设会议室不能同时安排两个会议,一个工人不能同时在两个工作地点。应用程序的业务逻辑不得允许用户“超量预订”资源。
我不知道如何表示数据,以便如果两个或多个用户同时按计划操作,并且存在冲突,则其中一个更新将中止。
到目前为止,我看到的唯一解决方案是跟踪每个排他性资源的时隙。因此,如果会议室以 5 分钟的间隔使用,并且被安排在上午 9 点到 9 点 30 分,那么上午 9 点到 9 点 30 分对应的 5 分钟时间段都将返回 TRUE,而未安排的时间段将返回 FALSE 或 NULL . 然后,DB 事务会将会议室对象从存储中拉出,检查所有时隙,如果更新与现有时隙冲突,则中止。
但是,这似乎会变得非常大,非常快。也许它可以被垃圾收集?此外,设计的目标之一是支持可变粒度,因此某些对象将按分钟安排,而其他对象可能按天安排,这种数据设计不能很好地支持这一点。
目前,我正在尝试使用 Python 在 Google App Engine 上实现这一点,但我真的很想看到一些更通用的解决方案来解决这个问题。我在谷歌上搜索的所有内容都是安排重复性任务,或执行一次性操作以自动构建优化计划的算法。