Будет ли запуск нескольких консольных процессов на Heroku замедлять работу других? - PullRequest
0 голосов
/ 14 марта 2012

Я нахожусь в стеке Cedar с Heroku и восстанавливаю 10 миниатюр для примерно 30 000 различных фотографий.

Я запускаю отдельные процессы консоли, чтобы каждая из них могла обрабатывать 1000 фотографий, так что я неЯ не могу решить проблемы с тайм-аутом (у меня были проблемы с этим раньше), и я могу одновременно генерировать новые миниатюры (которые теоретически могли бы сделать весь процесс намного быстрее).

У меня запущено около 12 процессов консолипрямо сейчас, и каждый из них выполняет регенерацию миниатюр Paperclip.

Кажется, что когда я добавляю больше процессов, другие начинают замедляться.Это правда или я просто воображаю вещи?И есть ли способ убедиться, что они продолжают работать на полной скорости?

Вот вывод из heroku ps:

Process  State       Command                            
-------  ----------  ---------------------------------  
run.14   up for 35m  bundle exec rails console          
run.16   up for 31m  bundle exec rails console          
run.18   up for 28m  bundle exec rails console          
run.19   up for 27m  bundle exec rails console          
run.20   up for 21m  bundle exec rails console          
run.21   up for 20m  bundle exec rails console          
run.22   up for 18m  bundle exec rails console          
run.23   up for 8m   bundle exec rails console          
run.24   up for 8m   bundle exec rails console          
run.25   up for 6m   bundle exec rails console          
run.26   up for 5m   bundle exec rails console          
web.1    up for 3h   bundle exec rails server -p $PORT

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Отдельные процессы являются отдельными, поэтому ничто на стороне Heroku не будет замедляться независимо от того, есть ли у вас один процесс или сотня.

Однако все ваши процессы будут смотреть на одни и те же данные, поэтомуэто может быть узким местом.При таком подходе вы также рискуете изменить размеры одних и тех же изображений несколько раз, так как не обязательно проверяете, что одни и те же файлы правильно выбираются более чем одним процессом.

В идеале вы хотите запустить какой-то видочереди с работниками, работающими в этой очереди, однако, время для создания этого может быть непрактичным для такого события, как это.

0 голосов
/ 14 марта 2012

Вы должны создать грабли.

Это хорошее решение для такого рода процессов.

В / lib / tasks создать файл my_task.rake

пространство имен: image_update do

desc '....'
  task :update => :environment do
    User.find_in_batches(:batch_size => 100) do |user_batch|
      for user in user_batch
        user. ...
      end
    end    
  end
end

и запустите его в консоли с

rake image_update:update
...