gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Docker / PHP — Как организовать воркеры?

По большей части я не люблю докер, потому что субьективно мне было проще поднять сервер и установить туда nginx/php/mysql/supervisor, а далее обычным образом запускать воркеры через proc_open из главного воркера.

Сегодня мне лид сказал, что докер сам по себе супервайзер, и потому один файл Dockerfile чем-то похож на файл конфига supervisor. То есть как он сказал "нет возможности из процесса, поднятого в докере запускать под-процессы" - то есть когда работаешь с докером вопрос поднятия нескольких обработчиков для очередей - это проблема в плане создания множества dockerfile и тд.

Может кто-то пояснить простейший способ организовать чтение очереди в несколько стримов и обработка сообщений подымая пхп скрипты, чтобы выполнить консольную команду, и обеспечивая, разумеется, "если неудача, то получить сообщение из очереди заново и опять поднять процесс и сделать по новой" позже.
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
Vamp
@Vamp
"нет возможности из процесса, поднятого в докере запускать под-процессы"

Это неправда. Те же самые nginx и php-fpm запускают мастер процесс и стартуют кучу своих воркеров как отдельные процессы.

Простейший способ сделать то что вы хотите - запустить скрипт внутри контейнера

docker run -d -v /home/project:/var/www php:8.1-cli php /var/www/worker.php

В дальнейшем если воркер упадет, докер его перезапустит. И таких docker run команд выполняете столько, сколько хотите одновременно работающих воркеров.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Нет никакой проблемы в создании N контейнеров с воркерами, балансировке между ними и масштабировании количества воркеров в зависимости от нагрузки - это называется уже не особо даже модным термином "оркестрация". Понятно, что "субьективно вам проще" - но добро пожаловать в 2022 год.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы