Наше приложение Rails (5.1.7) работает внутри контейнера docker -swarm (Ruby 2.6.5, PostgreSQL 10).
Мы пробовали веб-сервер Puma, и это не было он достаточно хорош при большой нагрузке, поэтому мы используем Unicorn (5.5.2).
И мы сталкиваемся с большой проблемой.
После запуска контейнера каждая страница загружается очень медленно для первой время до одной минуты. Все последующие запросы на те же страницы отвечают быстро.
Похоже, что это не проблема Unicorn, потому что после сигналов HUP
(перезапуск) или QUIT
(выключение) (+ запуск) страницы загружаются достаточно быстро.
Эта проблема возникает после развертывания (docker stack deploy ...
) или обновления (docker service update ...
).
Docker схема:
- два отдельных сервера
- два стека (staging + demo);
- оба стека используют один и тот же контейнер Nginx (+ создана внешняя сеть для их соединения)
- каждый стек включает в себя:
- PostgreSQL контейнер
- контейнер приложения Rails
- контейнер Redis
- контейнер RabbitMQ
- фоновый рабочий контейнер
Возможно, стоит отметить, что все промежуточные контейнеры работают на сервер 1 (кроме Nginx), и демонстрационные контейнеры распределяются между двумя rvers: на сервере 1 у нас есть демо PostgreSQL, Redis и RabbitMQ, а на сервере 2 у нас есть приложение Rails, фоновые рабочие и Nginx. И проблема воспроизводится на обоих стеках.
Есть идеи, как решить проблему? Заранее спасибо.
ОБНОВЛЕНИЕ (2020.02.24)
Кажется, есть проблема в кэшировании слоя вида. Я не могу показать полные журналы, но они почти идентичны, за исключением этой строки:
# SLOW request
I, [2020-02-24T09:47:55.634574 #464] INFO -- : Completed 200 OK in 57087ms (Views: 56624.1ms | ActiveRecord: 104.7ms)
# FAST request
I, [2020-02-24T09:48:21.101165 #461] INFO -- : Completed 200 OK in 993ms (Views: 486.6ms | ActiveRecord: 110.1ms)