我知道问题标题不是最好的。让我解释。
我进行了大量的文本处理,将自然语言转换为 xml。这些文本文件上传速度相当快并被放入队列中。从那里它们被一个接一个地拉到后台工作程序中,该工作程序调用我们的解析器(使用 boost spirit)将文本转换为 xml 并将相关部分加载到我们的数据库中。
解析器一次可以做大约 100 个。我在后台工作人员上有限速器,现在只经常轮询我们的队列,因此它的执行速度不那么快。我现在不能抛出一个以上的后台工作人员,因为我的 http 请求开始下降——后台工作人员和网络服务器存在于同一台机器上,我相信这是因为 cpu 使用率达到 80-95%,尽管我们也可以使用更多的内存。
我需要更好地扩展它。你会怎么做呢?
在回答几个问题时:
我们使用亚马逊网络服务,因此购买廉价的额外硬件与生成一个新的亚马逊实例有点不同——也许有人做了一些代码来自动生成负载量的实例?
我们确实有一个 http 服务器,它只是将我们的文件塞入一个队列,所以它受到影响的唯一原因是因为 cpu 正忙于处理大量与解析相关的东西
我已经对我们的后台工作人员进行了速率限制,尽管我们没有在解析器本身中使用它
我还没有尝试过,但我过去使用过它——我需要为此写下一些基准
解析器与 Web 服务器完全分离——我们有 nginx/merb 作为我们的 Web/应用程序服务器和一个调用 c++ 的 rake 任务作为我们的后台工作者——但它们确实存在于同一台机器上