Все проекты

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 без гонок
1 слот свободен
Написать