Bem-vindo ao backend do projeto Nexa! Este servidor é o núcleo inteligente do sistema de classificação de partnumbers, projetado para alta performance, escalabilidade e integração transparente com sistemas de IA.
- Documentação
- O que este servidor faz
- Arquitetura e Justificativa Técnica
- Tecnologias Utilizadas
- Como rodar localmente
- Como fazer deploy
- Estrutura do Projeto
O Nexa API é responsável por:
- Receber requisições de classificação de partnumbers (partnumbers individuais ou em pdf) via HTTP REST.
- Extrair partnumbers de PDF enviado para classificação.
- Orquestrar o processamento assíncrono dessas tarefas, integrando-se a um servidor de IA externo.
- Gerenciar e notificar o progresso e o resultado final para o frontend em tempo real via WebSocket (Socket.IO).
- Manter a persistência dos dados encontrados e das classificações geradas pelo servidor de IA.
- Garantir rastreabilidade, robustez e escalabilidade em todo o fluxo de classificação.
Em resumo:
O Nexa API transforma pedidos de classificação em experiências rápidas, confiáveis e integradas, conectando o usuário final à inteligência artificial de forma transparente.
O Nexa API adota uma arquitetura híbrida e orientada a eventos, combinando comunicação síncrona (HTTP/REST) e assíncrona (WebSocket e Pub/Sub) para oferecer baixa latência e alta escalabilidade:
- Flask + Flask-RESTful + Flask-SocketIO: Servem API REST e API WebSocket no mesmo backend, permitindo operações CRUD tradicionais e comunicação em tempo real (notificações, streaming de dados) sem duplicação de infraestrutura.
- Celery + Redis: Gerenciam tarefas assíncronas de alto custo computacional, garantindo que o processamento pesado não bloqueie as respostas ao usuário.
- Redis Pub/Sub: Atua como barramento de mensagens entre o backend e o microsserviço de IA, propagando eventos de progresso e resultados em tempo real de maneira eficiente e tolerante a falhas.
- Pydantic: Fornece validação e tipagem robusta para os dados de entrada/saída, aumentando a segurança e a confiabilidade em toda a aplicação.
Por que essa arquitetura?
-
Feedback em Tempo Real: Para evitar travamentos ou timeouts em chamadas HTTP convencionais, a comunicação de resultados e progresso é feita via WebSocket.Ela garante que o cliente receba atualizações contínuas (streaming) sem precisar reabrir conexões.
-
Baixa latência e comunicação em tempo real: ideal para aplicações que exigem feedback instantâneo.
-
Desacoplamento e tolerância a falhas: Pub/Sub garante que mensagens não dependam de disponibilidade simultânea dos serviços.
-
Manutenção e evolução facilitadas: componentes bem definidos e independentes permitem evolução incremental.
- Python 3.11+
- Flask & Flask-RESTful
- Flask-SocketIO
- SQLAlchemy
- PostgreSQL
- Celery
- Redis (broker, cache e Pub/Sub)
- PDFPlumber
- Pydantic
- Docker & Docker Compose
- Gunicorn (produção)
- Python 3.11+
- pip
- Redis (local ou em container)
# Crie e ative o ambiente virtual
python -m venv venv
# Linux/macOS:
source venv/bin/activate
# Windows:
venv\Scripts\activate
# Instale as dependências
pip install --upgrade pip
pip install -r requirements.txt
# (Opcional) Dê permissão à pasta de logs
chmod -R 777 logs- Copie o arquivo
.env.examplepara.enve ajuste as variáveis conforme necessário. - Certifique-se de que o Redis está rodando e acessível.
python run.pyO backend estará disponível em http://localhost:5000
# Build da imagem
docker build -t nexa-backend .
# Rodar em modo desenvolvimento
docker run -it --rm --env-file .env -p 5000:5000 -v $(pwd):/app nexa-backend python run.py
# Rodar em modo produção (Gunicorn)
docker run -it --rm --env-file .env -p 5000:5000 nexa-backenddocker compose up -d --buildPara logs e gerenciamento:
docker compose logs -f
docker compose stop
docker compose down
docker compose start