Indexium/docs/adr/002-async-indexer.md

1.5 KiB
Raw Blame History

ADR-002: Асинхронный событийный индексатор поверх GitHub Releases

Дата: 2026-09-06 Статус: Принято

Контекст

Нужен дешёвый и устойчивый к лимитам GitHub способ индексировать моды. Хранить .jar у себя дорого, проксировать трафик - упрёмся в bandwidth и rate limits.

Решение

Бэкенд не хранит артефакты. GitHub Releases CDN - источник правды для файлов. Мы только:

  • принимаем webhook release.published (HMAC + queue + 202),
  • воркер читает zip central directory через Range Request,
  • парсит манифест (fabric.mod.json и т.д.),
  • пишет метаданные в Postgres,
  • отдаёт прямые download_url на objects.githubusercontent.com.

Подробнее в docs/architecture.md.

Последствия

  • Плюс: минимальный storage, нет egress costs, +5k–12.5k RPH через GitHub App.
  • Минус: зависимость от доступности GitHub CDN (приемлемо - моды и так там).
  • Вынесен malware-скан и SHA-256 сверка как обязательные.

Альтернативы

  • Хранить файлы у себя (S3) - отклонено: дорого, дублирование.
  • Полный pull .jar на каждый релиз - отклонено: трафик, медленно.