File Backup System
RPA для аварийного восстановления файлов. Java API + Go воркеры, S3 стриминг, Playwright.
1GB+ файлы без RAMFOR UPDATE SKIP LOCKEDJava + Go polyglot
Бизнес-задача
Public API облачного сервиса не поддерживает экспорт нативных файлов. Команда из сотен человек рискует потерять работу при сбоях. Решение: RPA через Playwright.
Ключевая задача
Headless Chrome потребляет 500MB+ RAM на сессию. OOM в браузере не должен убивать админку. Go-воркеры работают как изолированные процессы. Очередь задач на PostgreSQL (FOR UPDATE SKIP LOCKED). Потоковая загрузка в S3 для файлов 1GB+.
Почему Java + Go
Java Backend: REST API, OAuth2, JPA ORM, сложная бизнес-логика. Go-воркеры: изолированные процессы с Playwright. Падение воркера не влияет на API. Горизонтальное масштабирование: 1 API-сервер + N воркеров.
Сервис загрузки (Go)
Пул воркеров с очередью задач на PostgreSQL.
- •4 воркера: каждый со своей Playwright-сессией
- •Очередь задач: SELECT ... FOR UPDATE SKIP LOCKED
- •Приоритеты: SCHEDULED → ERROR → NONE/UPDATE
- •Стриминг в S3 без загрузки в память
Технологии
Java Backend
Java 21Spring Boot 3.4Spring Security OAuth2Spring Data JPA
Go Workers
Go 1.23Playwright-gopgx/v5Viper
Data
PostgreSQL 16LiquibaseS3 / Yandex Object Storage
Infra
DockerKeycloakGitHub Actions
Наша роль
- Архитектура polyglot-системы с изоляцией ресурсов (Java + Go)
- RPA через Playwright с ограничением частоты
- Очередь задач на PostgreSQL без гонок