我知道问题标题不是最好的.让我解释.
我做了一个文本处理TON,它将自然语言转换为xml.这些文本文件上传得相当快,并被扔进队列中.从那里将它们逐个拉到后台工作器中,后者调用我们的解析器(使用boost spirit)将文本转换为xml并将相关部分加载到我们的数据库中.
解析器一次可以执行大约100个这样的操作.我在后台工作者上有速率限制器,现在每隔一段时间只轮询我们的队列,所以它的执行速度不是很快.我现在不能抛弃多个后台工作者,因为我的http请求开始掉线 - 后台工作者和网络服务器存在于同一台机器上,我相信这是因为cpu使用率达到80-95%,尽管我们也可以使用更多的ram.
我需要更好地扩展它.你会怎么做呢?
在几个问题的答案:
我们使用亚马逊网络服务,所以购买便宜的额外硬件与产生一个新的亚马逊实例有点不同 - 也许有人做了一些自动生成负载量实例的代码?
我们有一个http服务器,只是将我们的文件填入队列,所以它受影响的唯一原因是因为cpu忙着处理大量的解析相关的东西
虽然我们没有在解析器本身中使用它,但我已经对后台工作者进行了速率限制
我还没有尝试过,但我过去曾经使用它 - 我需要写下一些基准
解析器完全独立于Web服务器 - 我们将nginx/merb作为我们的Web /应用程序服务器,并将一个rake任务调用c ++作为我们的后台工作者 - 但它们确实存在于同一台机器上
Artelius.. 8
也许只是将后台工作者置于较低的调度优先级(例如使用nice)会有所帮助.这意味着您的服务器可以在需要时处理请求,但是当它不忙时,您可以完全了解文本处理.
它可以为你提供比任意背叛后台工作者更多的好处.
也许只是将后台工作者置于较低的调度优先级(例如使用nice)会有所帮助.这意味着您的服务器可以在需要时处理请求,但是当它不忙时,您可以完全了解文本处理.
它可以为你提供比任意背叛后台工作者更多的好处.