【发布时间】:2014-02-19 12:18:18
【问题描述】:
我们目前的 API 主要接受两种类型的请求:一种用于识别用户详细信息,另一种用于跟踪他们执行的事件。它当前处理请求中的所有逻辑。我们有两个应用程序框,因此可以同时处理具有有效相同数据的两个识别请求。虽然在性能方面,这个解决方案在当前规模上很好,但我们已经看到了并发问题。
我的问题是:我们如何处理一个 api 请求队列,以便与一个人相关的请求在单个工作人员中按顺序完成?
我们的堆栈是基于 MongoDB 的 Ruby,我非常乐意探索其他技术,但显然任何利用我们当前堆栈的解决方案都是一个优势。
我考虑过锁定人员记录,但不知道检查锁定的方法,如果空闲,则将其锁定在一个操作中,这样两个线程就不可能在同时,以为他们都有,但实际上只有一个。
我目前的想法(对消息队列的经验非常有限)是将请求排队,然后使用一致的哈希交换来确保对一个人的请求总是路由到同一个工作人员。但是阅读文档,看起来一致的哈希交换实际上是为了帮助在工作人员之间分配任务,而不是按某个属性对它们进行分组。
【问题讨论】:
标签: ruby multithreading mongodb concurrency message-queue