Что нужно не забыть сделать в распределенной системе?
02 March 2015
Нужно обязательно синхронизировать время. Нужно на все сервера установить ntp, чтобы часы постоянно синхронизировались с любым доступным сервером.
Это нужно для того, чтобы не повторить моей ошибки. Вот код:
my_model.save
MyWorker.perform_in(5.minutes, my_model.id)
Всё выглядит обычным и правильным. Через 5 минут после сохранения должна запуститься джоба и что-то сделать. Но в логах sidekiq я заметил, что слишком часто воркер не находил MyModel
с нужным id
. Есть известная проблема, что sidekiq настолько быстрый, что запускается до тех пор, пока не закоммитится транзакция. Но ведь вряд ли она висит 5 минут?
Конечно нет. Просто в моем случае на сервере, исполняющем код, время на 7 минут отставало от сервера с sidekiq, соответственно джоба моментально выполнялась, не ожидая 5 минут.
comments powered by HyperComments