【发布时间】:2014-05-05 08:33:08
【问题描述】:
我们的 Django 项目为用户提供了创建存储库的接口
- 创建新的仓库
- 向现有存储库添加新更改
任何用户都可以通过包含更改的 HTTP POST 直接访问任何存储库以进行更改。
如果流量少一点也没关系。但是如果流量增长到多个用户想要同时对同一个 repo 进行更改,该如何处理呢?
我们目前使用Hg (Mercurial) 进行回购
【问题讨论】:
我们的 Django 项目为用户提供了创建存储库的接口
任何用户都可以通过包含更改的 HTTP POST 直接访问任何存储库以进行更改。
如果流量少一点也没关系。但是如果流量增长到多个用户想要同时对同一个 repo 进行更改,该如何处理呢?
我们目前使用Hg (Mercurial) 进行回购
【问题讨论】:
这是您应该在 Web 应用程序级别而不是 Mercurial 级别解决的问题。如果您可以让人们等待,您可以设置一个分布式锁定方案,其中 Web 工作线程尝试在执行任何操作之前从共享内存/存储中获取特定于存储库的锁。如果它无法获得锁,您可以使用带有retry-after 标头的状态码503 进行响应,或者您让网络工作者线程重试,直到它可以获得锁或超时。
【讨论】: