Найти тему
ИТ разнообразно

Журналы Docker Compose: Руководство и лучшие практики. Часть 8.

Пример потоковой передачи журналов с использованием celery, socket.IO и контейнеров

В этом примере мы предоставляем пример приложения, демонстрирующий потоковую передачу журналов между контейнерами и почему это важно. У нас есть два компонента:

  1. Сервер, принимающий запросы HTTP POST.
  2. Клиент, который отправляет запросы HTTP POST.

Клиент отправляет POST-запрос на сервер для расчёта последовательности Фибоначчи. Затем сервер вычисляет последовательность и отправляет ответ. Эту простую модель можно расширить для распределения всех видов рабочих нагрузок в виде микросервисов.

Следующий файл docker-compose.yml представляет описанную выше настройку.

version: "3"
services:
redis:
image: redis:5
ports:

- "6379:6379"

web:

build: ./server

command: flask run --host=0.0.0.0 --port=5001

volumes:

- "./server:/code"

ports:

- "5001:5001"

environment:

FLASK_APP=app_server.py

FLASK_RUN_HOST=0.0.0.0

CELERY_BROKER_URL=redis://redis:6379/0

CELERY_RESULT_BACKEND=redis://redis:6379/1

depends_on:

- redis

worker:

build: ./server #

command: celery -A tasks.celery worker --loglevel=info

command: celery -A tasks worker --loglevel=info

volumes:

- "./server:/code"

environment:

CELERY_BROKER_URL=redis://redis:6379/0

CELERY_RESULT_BACKEND=redis://redis:6379/1

depends_on:

- web

client:

build: context: ./client

dockerfile: Dockerfile

volumes:

- "./client:/code"

depends_on:

- worker

Приведённый выше файл docker-compose.yml создаёт четыре контейнера: redis, worker и web составляют серверный компонент, а client — отдельный компонент. Для простоты, чтобы избежать ошибки '404 not found', мы добавили ключ depend_on в образ клиента, чтобы клиент отправлял запрос только после полной загрузки сервера. Как только все контейнеры готовы, клиент отправляет POST-запрос с одним параметром n для вычисления последовательности Фибоначчи до n чисел Фибоначчи. Например, если параметр n равен 10, последовательность будет такой: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]. Каждое число Фибоначчи, вычисленное сервером, отправляется клиенту в виде журнала. Такое поведение полезно, когда клиент отправляет серверу длительную команду, и вместо ожидания пустого экрана сервер может отправлять журналы обратной связи. Рабочие процессы Celery используются для передачи ресурсоемких или длительных задач, которые могут обрабатываться асинхронно. Celery требуется брокер сообщений — в данном случае Redis — для облегчения связи между производителем задачи (клиентским приложением) и потребителем задачи (работником). Полный код приложения выше доступен по адресу:

GitHub - ashaik4/distributed_task_framework

Заключение

Docker Compose позволяет настраивать, создавать и запускать многоконтейнерные приложения Docker с помощью файла конфигурации YAML docker-compose.yml. Разработчики могут отслеживать приложения, отображая журналы всех определённых служб с помощью команды docker-compose logs. Docker поддерживает различные драйверы журналирования, которые обрабатывают и хранят журналы контейнера. Режимы доставки журналов Docker, "блокирующий" и "неблокирующий", влияют на то, как журналы передаются из контейнеров в указанный драйвер журнала.

Перевод с некоторыми авторскими правками.

Автор оригинала: Squadcast.