Монгоидные бомбы производительности по мере увеличения параллелизма

У меня есть приложение Rails(3.2.8)/Mongoid(3.0.6), которое использует сотрудников Resque для создания и отправки электронных сообщений каждое утро. Каждое задание Resque должно запросить несколько коллекций, чтобы сгенерировать электронную почту, а затем выполнить фактическую отправку.

У нас есть составные индексы, настроенные для поддержки запросов, и выполнение одного задания вручную выполняется очень быстро. Однако по мере того, как мы увеличиваем число работающих одновременно сотрудников, время, необходимое для создания электронных писем, быстро увеличивается. Хвост журнала показывает, что фактическое выполнение запросов Монго резко возрастает.

(примечание: я заметил это при оценке Sidekiq, но то же самое происходит и с Resque; 3-4 процессора / рабочие работают нормально, но пропускная способность резко падает)

У нас есть 4 тонких процесса на одном блоке, Resque на другом и сервер MongoDB на третьем (все они размещены в одном центре обработки данных в Rackspace). Разница заметна даже при переходе от 4 до 8 рабочих. Thins также влияет.

Есть ли какие-нибудь низко висящие фрукты или очевидные кусочки, которые я могу упустить, которые могли бы объяснить проблемы с производительностью, которые я вижу? Любые указатели или советы будут оценены.

0 ответов

Другие вопросы по тегам