O serviço All File Converter foi projetado como um sistema SaaS distribuído e escalável baseado no stack assíncrono moderno do Python 3.12. A arquitetura é dividida em camadas independentes: recepção de eventos de rede, orquestração de tarefas, execução isolada de processos binários pesados e o circuito analítico.

1. Stack tecnológico geral e arquitetura do sistema

A plataforma é baseada em princípios de alto rendimento (high-throughput), consumo mínimo de memória e proteção contra falhas:

  • Telegram Bot Framework: Aiogram 3.13, operando em modo Webhook com validação de tokens secretos e filtros personalizados de ciclo de vida de mensagens.
  • Gateway web e REST API: FastAPI baseado no servidor ASGI Uvicorn com entrega assíncrona em streaming de arquivos binários (FileResponse) e limpeza em segundo plano via BackgroundTasks.
  • Broker de filas e cache: Redis 7 (gerenciamento de tarefas do Celery, bloqueios contra condições de corrida, proteção contra brute-force, cache de sessões).
  • Executor em segundo plano (Task Queue): Celery 5.4 com um pool dedicado de workers em um container isolado converter_worker.
  • Banco de dados: PostgreSQL 16 com a camada ORM SQLAlchemy 2.0 (asyncpg), pool de conexões persistentes (20+10 overflow) e nova tentativa automática para transações com falha (@db_retry).
  • Circuito de rede: Tunelamento via Cloudflare Zero Trust com bloqueio de acesso direto por IP ao servidor através de Middleware.

2. Filas assíncronas e isolamento de computação pesada (Celery + Redis)

A conversão de arquivos de mídia e pacotes de escritório cria cargas de pico na CPU e RAM. Para garantir que o processo de processamento de mensagens recebidas no Telegram não seja bloqueado durante operações pesadas, foi implementado um isolamento rigoroso:

  • Delegação de tarefas para o Redis: Ao selecionar um formato, o manipulador do Telegram registra a tarefa no banco de dados com o status PROCESSING e coloca a tarefa na fila tasks.execute_conversion via Celery.
  • Container worker isolado: A execução dos utilitários de conversão ocorre em um container Linux separado com seu próprio limite de tempo de processador e memória.
  • Controle de travamentos e timeouts: As chamadas para utilitários externos são envolvidas em um contexto assíncrono com rigoroso controle de tempo (conversion_timeout_sec = 180). Se o limite for excedido, o processo é encerrado à força via proc.kill(), liberando recursos.
  • Fallback resiliente: Em caso de indisponibilidade temporária do broker Redis, a tarefa é interceptada automaticamente pelo despachante assíncrono local e executada diretamente sem falhas para o usuário.

3. Pipeline de engines de conversão especializados

Utilitários e bibliotecas nativos altamente especializados são utilizados para cada tipo de dados:

  • Documentos e planilhas (LibreOffice): Pacote de escritório sem interface gráfica (soffice --headless) para renderização precisa de DOCX, XLSX, PPTX, RTF, ODT em formato PDF ou arquivos de texto.
  • Áudio e vídeo em streaming (FFmpeg): Transcodificação multi-thread de codecs de vídeo (H.264), codecs de áudio (MP3, OGG Opus), extração de trilhas sonoras, geração de GIF (filtro Lanczos) e enquadramento quadrado (1:1) de mensagens de vídeo do Telegram.
  • Processamento de PDF de alta velocidade (Poppler Utils): Utilitários pdftotext (extração instantânea de texto formatado em UTF-8) e pdftoppm (renderização página por página de PDFs em imagens rasterizadas sem overhead do LibreOffice).
  • Reconhecimento óptico de caracteres (Tesseract OCR): Extração baseada em rede neural de texto impresso de digitalizações e fotos em mais de 40 idiomas.
  • Gráficos raster e vetoriais: Bibliotecas Pillow (incluindo suporte para formatos HEIC e AVIF), CairoSVG para imagens vetoriais e lottie para figurinhas animadas do Telegram (.TGS).
  • Livros, legendas e fontes: Engine Calibre (ebook-convert), o parser de legendas pysubs2 (SRT, VTT, ASS, SSA) e o compilador de fontes fonttools (compressão Brotli em WOFF2).

4. Proteção preventiva de recursos (System Guard)

Para proteger contra quedas do servidor devido à falta de memória (OOM Killer), foi implementado o serviço de diagnóstico preventivo System Guard. Antes de aceitar um arquivo para processamento, o sistema verifica as principais métricas do host:

  • Memória RAM livre: Mínimo de 500 MB de volume livre (guard_min_free_ram_mb).
  • Espaço em disco: Mínimo de 2 GB de espaço livre no diretório /tmp (guard_min_free_disk_mb).
  • Fila de tarefas: Limitação do comprimento da fila do Celery (não mais que 20 tarefas pendentes).

Se os limites forem excedidos, o serviço ativa temporariamente a proteção (HTTP 503 / mensagem no chat), evitando a sobrecarga do servidor e enviando um alerta instantâneo aos administradores no Telegram.

5. Ciclo de vida dos arquivos e segurança (GDPR)

A arquitetura foi projetada com o modelo Zero-Data-Footprint:

  • Os arquivos dos usuários são carregados no volume seguro tmp/conversions/ com prefixos exclusivos baseados em identificadores de tarefas.
  • Os arquivos permanecem acessíveis estritamente dentro da sessão de trabalho — por no máximo 15 minutos (900 segundos).
  • O coletor de lixo automático apaga os arquivos originais e prontos imediatamente após a confirmação do envio bem-sucedido para o chat ou após o término do timeout da sessão.
  • O banco de dados PostgreSQL não armazena arquivos binários ou textos pessoais de documentos — apenas metadados técnicos anonimizados são registrados nas tabelas (formatos, tamanhos em bytes, tempo de processamento, status).

6. REST API universal para serviços web externos

O serviço foi inicialmente projetado como um backend multiplataforma. Juntamente com o bot, opera uma interface de programação segura completa para sites (por exemplo, em Django) e bots de terceiros:

  • GET /api/v1/formats — matriz JSON dinâmica de direções de conversão disponíveis, sincronizada com as configurações do Google Sheets.
  • POST /api/v1/convert — endpoint universal que aceita multipart/form-data (arquivo, formato de destino, ID do cliente externo) e retorna o fluxo de bytes pronto como um download direto.
  • Autorização por Bearer tokens (WEBHOOK_REFRESH_TOKEN) com proteção contra ataques de tempo via secrets.compare_digest.

7. Painel de controle e Observability (NiceGUI + AG Grid)

O monitoramento de indicadores de negócios e do estado do sistema foi movido para um painel de controle Single-Page nativo baseado em NiceGUI 2.x:

  • Tabelas interativas AG Grid (v32+) com filtros de caixa de seleção personalizados estilo Excel (aggrid_filters.js).
  • Monitoramento em tempo real de filas, atrasos de provedores de API e ping do PostgreSQL / Redis.
  • Filtragem abrangente por datas com integração perfeita do dashboard de BI Metabase através de JWT tokens assinados.