Масштабируемый сервис фоновой обработки изображений на основе Apache Kafka, предназначенный для автоматической генерации миниатюр, изменения размера и добавления водяных знаков.
ImageProcessor — асинхронная система обработки изображений, построенная на микросервисной архитектуре. Сервис решает задачу быстрой и масштабируемой обработки пользовательских изображений без блокировки основного потока запросов. Используется в сценариях, где требуется создание множественных версий изображений: соцсети, маркетплейсы, фотогалереи, блоги и визуальные редакторы.
- Асинхронная обработка изображений через очередь Kafka
- REST API для загрузки, получения и удаления изображений
- Простой веб-интерфейс для управления изображениями
- Отслеживание статуса обработки в реальном времени
Проект использует следующий стек технологий:
- Backend: Golang с Gin
- Message Broker: Apache Kafka для очереди задач обработки
- Database: PostgreSQL для хранения метаданных и статусов обработки
- Object Storage: MinIO с публичным бакетом для хранения изображений
- Reverse Proxy: Nginx для проксирования API и статических файлов
- Frontend: HTML + JavaScript
- Пользователь загружает изображение через веб-интерфейс
- Backend сохраняет исходное изображение в MinIO и создает запись в PostgreSQL
- Задача на обработку отправляется в очередь Kafka
- Consumer забирает задачу из Kafka и обрабатывает изображение
- Обработанное изображение сохраняется в MinIO, статус обновляется в PostgreSQL
- Nginx проксирует запросы к API (
/api/*) на backend и раздает изображения из MinIO
Создать файл .env по примеру .env.example, запустить команду:
sudo docker-compose up -d
Бд поднимается отдельном контейнере
HTTP методы:
- POST /upload - загрузка изображения на обработку
- GET /image/{id} - получение обработанного изображения
- DELETE /image/{id} - удаление изображения
- GET /images?last_created_at=&last_id=&mode= - получение изображений с пагинацией