Как правильно запустить несколько заданий, используя одного работника в героку и рубина на рельсах - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь запускать много (более 20) заданий в Heroku каждую минуту одновременно, но я уверен, что я делаю это неправильно.В настоящее время я использую динамо Standard-1X с 512 МБ ОЗУ.Я почти уверен, что смогу достичь своей цели, не улучшая героку.Мое решение вроде работает, но оно занимает много моей памяти и не выполняет все задачи одновременно.Может кто-нибудь помочь мне придумать лучшее решение?

Вот мой Rakefile:

Rails.application.load_tasks

task :update_exchanges_1 => :environment do
 until 2 < 1 do
  Rake::Task['exchange_markets_update:gdax'].execute
  Rake::Task['exchange_markets_update:gemini'].execute
  Rake::Task['exchange_markets_update:bitstamp'].execute
  Rake::Task['exchange_markets_update:bitflyer'].execute
  Rake::Task['exchange_markets_update:okex'].execute
  Rake::Task['exchange_markets_update:cex'].execute
  sleep(60.seconds)
 end
end

task :update_exchanges_2 => :environment do
  until 2 < 1 do
   Rake::Task['exchange_markets_update:bitfinex'].execute
   Rake::Task['exchange_markets_update:bittrex'].execute
   Rake::Task['exchange_markets_update:hitbtc'].execute
   Rake::Task['exchange_markets_update:poloniex'].execute
   Rake::Task['exchange_markets_update:kraken'].execute
   Rake::Task['exchange_markets_update:binance'].execute
   Rake::Task['exchange_markets_update:bithumb'].execute
   sleep(60.seconds)
 end
end

task :update_exchanges_3 => :environment do
  until 2 < 1 do
    Rake::Task['exchange_markets_update:gateio'].execute
    Rake::Task['exchange_markets_update:idex'].execute
    Rake::Task['exchange_markets_update:bitbank'].execute
    Rake::Task['exchange_markets_update:zb'].execute
    Rake::Task['exchange_markets_update:bibox'].execute
    Rake::Task['exchange_markets_update:ethfinex'].execute
    sleep(60.seconds)
  end
 end

Таким образом, в принципе, каждая задача вызывается бесконечно и используется для вызова нескольких внешних API, которые используютсяобновить мою базу данных.Каждая задача exchange_markets_update занимает около 10-15 секунд.

Вот мой Procfile (я использую гем foreman, чтобы я мог запускать процессы внутри процесса):

web: bundle exec rails server -p $PORT
worker: bundle exec foreman start -f Procfile.workers

Вот мой профиль.workers:

dj_worker: bundle exec rake update_exchanges_1
dj_worker: bundle exec rake update_exchanges_2
dj_worker: bundle exec rake update_exchanges_3

Также важно отметить, что мой работник падает через некоторое время.Любая помощь будет принята с благодарностью!

...