我试图实现一个应用程序,该应用程序可协调调度独占资源的多个用户。计划数据必须在具有单个主节点的网络上保持强大的一致性。计划资源可以是从会议室到工作场所的工作人员的任何资源。资源调度应用程序
我们假设会议室不能同时安排两次会议,并且一个工作人员不能同时在两个工作地点上。应用程序的业务逻辑不允许用户“超额预订”资源。
我无法弄清楚的是如何表示数据,以便如果两个或多个用户同时在计划中操作并且存在冲突,则其中一个更新将中止。
到目前为止,我所见过的唯一解决方案是跟踪每个排除资源的时隙。因此,如果会议室以5分钟的间隔使用,并且它被安排在9-9:30am,那么9-9:30am对应的5分钟时隙全部返回TRUE,而未计划的时隙将返回FALSE或NULL 。然后数据库事务会将会议室对象拉出商店,检查所有时隙,并在更新与现有时隙冲突时中止。
但是,这似乎会变得非常大,非常快。也许它可能是垃圾收集?此外,设计的目标之一是支持可变粒度,因此一些对象将按分钟到分钟进行计划,而另一些则可能在日常基础上进行,而这种数据设计并不能很好地支持这一点。
目前,我正试图在Google App Engine上使用Python实现此功能,但我真的很想看到针对此问题的一些更一般的解决方案。我提出的所有Google搜索都是安排重复执行的任务,或执行一次性操作以自动构建优化时间表的算法。
另一种可能的解决方案是将资源“锁定”存储在数据存储中。然后要求客户在以可写形式向用户呈现时间表之前异步获取锁。在客户端获取锁之前,日程表是只读的。这有效地将操作序列化,并允许将业务逻辑移动到客户端,但问题将是确定可接受的资源争用的上限。 – 2009-10-08 23:36:56