Все проекты

File Backup System

RPA-инструмент для аварийного восстановления файлов из облачного сервиса. Java (API) + Go (воркеры). Корректная браузерная автоматизация.

4 Playwright-воркераФайлы до 1GB+FOR UPDATE SKIP LOCKED

Бизнес-задача

Public API облачного сервиса не поддерживает экспорт нативных файлов. Команда из сотен человек рискует потерять работу при сбоях или блокировках аккаунта. Playwright эмулирует действия пользователя: открывает файл → экспортирует → стримит в S3. Ограничение частоты (1 файл/воркер), паузы как у человека. Инструмент для собственного контента компании.

Ключевая задача

Изолировать процессы Playwright с тяжёлым потреблением памяти от основного API, обработать большие файлы (1GB+) потоковой передачей в S3, избежать гонок данных при выборе задач из очереди.

Почему Java + Go

Изоляция ресурсов: Headless Chrome потребляет 500MB+ RAM на сессию и может утечь. OOM в браузере не должен убивать админку.
  • Java Backend: REST API, OAuth2, JPA ORM, сложная бизнес-логика (лицензии, роли, синхронизация)
  • Go-воркеры: изолированные процессы с Playwright. Падение воркера не влияет на API
  • Горизонтальное масштабирование: 1 API-сервер + N воркеров. Воркеры без состояния

Сервис загрузки (Go)

Пул воркеров с очередью задач на PostgreSQL.
  • 4 воркера: каждый со своей Playwright-сессией
  • Очередь задач: SELECT ... FOR UPDATE SKIP LOCKED для атомарного захвата без гонок
  • Приоритеты: SCHEDULED → ERROR (повтор через 12 мин) → NONE/UPDATE
  • Стриминг в S3: файлы стримятся напрямую без загрузки в память (для файлов 1GB+)
  • Обработка ошибок: таймаут → повтор с экспоненциальной задержкой, лимит → адаптивная пауза

Java Backend

  • Синхронизация: импорт teams/projects/files через Public API + Browser для приватных данных
  • Управление лицензиями: массовый CSV-импорт, назначение ролей (Editor/Viewer), отслеживание сроков
  • Два аккаунта: обычный для чтения, admin для управления лицензиями (разделение обязанностей)
  • Пакетная обработка: Hibernate batch_size=250 для синхронизации сотен файлов

Технологии

Java Backend

Java 21Spring Boot 3.4Spring Security OAuth2Spring Data JPA

Go Workers

Go 1.23Playwright-gopgx/v5 (PostgreSQL)Viper (config)Logrus (logging)

Data

PostgreSQL 16LiquibaseS3 / Yandex Object Storage

Infra

Docker (multi-stage)Keycloak (OAuth2)GitHub ActionsYandex Container Registry

Моя роль

  • Архитектура polyglot-системы с изоляцией ресурсов (Java API + Go-воркеры)
  • RPA через Playwright с корректным обращением к сервису и ограничением частоты
  • Очередь задач на PostgreSQL (FOR UPDATE SKIP LOCKED) без гонок
  • Потоковая загрузка в S3 для больших файлов