Visão Geral da Infraestrutura

Este artigo fornece uma visão abrangente da infraestrutura que alimenta o site público da Thinvent. Vamos cobrir a pilha tecnológica completa, desde o servidor web até a camada de banco de dados, e explicar como todos os componentes trabalham juntos para oferecer uma experiência de e-commerce rápida, confiável e escalável.

Pilha da Aplicação Web

Flask - A Base

Nosso site é construído sobre o Flask, um framework web Python leve e flexível. O Flask fornece o sistema de roteamento central, o tratamento de requisições/respostas e o sistema de blueprints que organiza nossa aplicação em componentes modulares.

Principais recursos do Flask que utilizamos:

  • Blueprints: Organizam a aplicação em módulos lógicos (web, api, cart, product, etc.)

  • Modelagem Jinja2: Geração de HTML no lado do servidor com herança de templates

  • Contexto de requisição: Tratamento automático de requisições HTTP e sessões

  • Werkzeug: Servidor de desenvolvimento e funções utilitárias

A aplicação Flask é inicializada no módulo web onde nós:

  • Criamos o blueprint web

  • Inicializamos o Babel para internacionalização

  • Configuramos o armazenamento de sessão Valkey

  • Configuramos processadores de contexto para variáveis de template

Gunicorn - Servidor de Produção

Para produção, usamos o Gunicorn (Green Unicorn), um servidor HTTP WSGI para Python. O Gunicorn executa nossa aplicação Flask com múltiplos processos de trabalho.

O Gunicorn é gerenciado pelo systemd, que garante que ele reinicie automaticamente se falhar ou se o servidor for reiniciado. Isso nos dá alta disponibilidade sem intervenção manual.

Nginx - Proxy Reverso & Balanceador de Carga

O Nginx atua como nosso proxy reverso e balanceador de carga. Ele fica na frente do Gunicorn e lida com:

  • Terminação SSL/TLS: Criptografia/descriptografia HTTPS

  • Serviço de arquivos estáticos: CSS, JavaScript, imagens (servidos diretamente do disco)

  • Proxy reverso: Encaminha requisições dinâmicas para o Gunicorn

  • Limitação de taxa: Protege contra abuso

  • Compressão de requisições: Compressão Gzip para transferências mais rápidas

Ubuntu - Sistema Operacional

Todas as instâncias EC2 executam o Ubuntu, nossa distribuição Linux escolhida. Preferimos usar pacotes Python do Ubuntu quando disponíveis, em vez do pip.

O fluxo típico de uma requisição é:

flowchart LR
    A[Navegador do Cliente] -->|Requisição HTTPS| B[Nginx]
    B -->|Proxy para| C[Gunicorn]
    C -->|WSGI| D[Aplicação Flask]
    D -->|Consulta| E[Cache Valkey]
    E -->|Miss| F[DynamoDB]
    F -->|Resposta| E
    E -->|Hit| G[Resposta]
    G --> B
    B -->|Resposta| A

CloudFront - Rede de Distribuição de Conteúdo

O CloudFront é nossa CDN, fornecendo:

  • Proteção DDoS: Proteção integrada contra ataques distribuídos

  • Escudo de origem: Protege nossos servidores de origem de picos de tráfego

Nossa distribuição CloudFront tem duas origens:

  • Servidor backend: Aplicação Flask backend

  • S3: Bucket S3 para ativos estáticos

Comportamentos de cache configurados:

  • /s/* - Ativos estáticos (CSS, JS, imagens) com TTL de 24 horas

  • /ds/*.pdf - Fichas técnicas com TTL de 24 horas

  • /api/* - Endpoints da API sem cache

  • /cart - Carrinho com TTL de 24 horas

  • /set-language - Sem cache (dinâmico)

Camada de Dados

DynamoDB - Banco de Dados Primário

Usamos o Amazon DynamoDB como nosso banco de dados primário. O DynamoDB é um banco de dados NoSQL.

Nossas tabelas do DynamoDB incluem:

  • Recommendations: Recomendações de produtos geradas por IA

  • Product descriptions: Descrições de produtos em múltiplos idiomas

  • Query pages: Páginas de consulta analisadas para SEO

Usamos o PynamoDB, um ORM Pythonico para DynamoDB, que fornece:

  • Definições de modelo: Classes Python para tabelas do banco de dados

Valkey - Cache em Memória

O Valkey (um fork do Redis) é nossa camada de cache em memória, fornecendo:

  • Armazenamento de sessão: Sessões de usuário com expiração deslizante de 30 dias

  • Dados acessados frequentemente: Contagens de produtos, consultas populares

  • Cache de autocompletar: Sugestões de pesquisa

  • Manifesto de imagens: Localizações de imagens de produtos

O Valkey oferece benefícios significativos de desempenho:

  • 100x mais rápido que o DynamoDB para operações de leitura

  • Carga reduzida no banco de dados: Acertos no cache evitam consultas ao DynamoDB

  • Persistência de sessão: Sessões apoiadas pelo Valkey entre requisições

Usamos o Valkey para:

  • Sessões: Estado de login do usuário, dados do carrinho

  • Cache: Consultas populares, sugestões de autocompletar

  • Contadores: Contagens de estoque de produtos (em cache para desempenho)

  • Filas: Processamento de trabalhos em segundo plano

S3 - Armazenamento de Objetos

O Amazon S3 é nosso serviço de armazenamento de objetos.

Usamos o S3 para:

  • Imagens de produtos: Fotos de produtos em alta resolução

  • Fichas técnicas: Especificações de produtos em PDF

  • Ativos estáticos: CSS, JS, imagens

DNS & Roteamento

Route53 - Gerenciamento de Domínio

O Route53 cuida do nosso gerenciamento de DNS:

  • Registro de domínio: thinvent.in e domínios relacionados

Roteamento Nginx

O Nginx roteia requisições com base em padrões de URL:

  • / → Aplicação Flask (início, produtos, carrinho, checkout)

  • /q/ → Aplicação Flask (páginas de consulta, resultados de busca)

  • /api/ → Aplicação Flask (endpoints da API)

  • /static/ → CloudFront/S3 (ativos estáticos)

Infraestrutura de Busca & IA

Serviço de Busca

Executamos uma aplicação Flask independente para funcionalidade de busca. Este serviço fornece:

  • Busca vetorial: Similaridade semântica para consultas relacionadas

  • Autocompletar: Sugestões de busca baseadas em prefixo

  • Consultas populares: Termos mais pesquisados

  • Extração de filtros: Analisa consultas de busca para facetas

O serviço de busca usa:

  • Valkey RediSearch: Busca por similaridade vetorial

  • SentenceTransformer: Geração de embeddings

  • Mapeamentos de frase: Extração de filtros via correspondência de substring

Provedores de IA

Usamos múltiplos provedores de IA para diferentes tarefas:

DeepSeek

  • Modelo: deepseek-chat

  • Casos de uso: Descrições de produtos, conteúdo de páginas de consulta, tradução

  • API: API DeepSeek com fallback da Together.ai

  • Cache: Prompts do sistema para eficiência de cache de prompts

Gemini

  • Modelo: Gemini (modelo específico)

  • Casos de uso: Geração de conteúdo

  • Integração: Chamadas diretas à API

Amazon Bedrock

  • Modelos: Nova Pro

  • Casos de uso: Chat interno

  • Integração: SDK boto3

Amazon Bedrock

  • Modelos: Nova Lite

  • Casos de uso: Chatbot para clientes

  • Integração: SDK boto3

Fluxo Completo de uma Requisição

Veja como uma requisição típica flui através de nossa infraestrutura:

flowchart TD
    A[Navegador do Cliente] -->|Consulta DNS| B[Route53]
    B -->|Endereço IP| C[CloudFront]
    C -->|Verificação de Cache| D{Cache Hit?}
    D -->|Sim| E[Retorna Conteúdo em Cache]
    D -->|Não| F[Nginx]
    F -->|Proxy| G[Gunicorn]
    G -->|WSGI| H[Aplicação Flask]
    H -->|Verificação de Cache| I[Valkey]
    I -->|Hit| J[Retorna Dados em Cache]
    I -->|Miss| K[DynamoDB]
    K -->|Consulta| L[Retorna Dados]
    L --> I
    J --> M[Constrói Resposta]
    E --> M
    M --> N[Envia para o Cliente]

Monitoramento & Saúde

UptimeRobot - Monitoramento Externo

Usamos o UptimeRobot para monitoramento externo de todos os endpoints públicos:

  • Servidor backend: Site backend

  • www.thinvent.in: Site público

Verificações de Saúde

  • Gunicorn: O systemd gerencia reinicializações

  • Flask: O endpoint /health retorna o status

  • Valkey: Saúde da conexão monitorada

  • DynamoDB: Latência e taxa de transferência monitoradas

Registro de Logs

  • Logs da aplicação: Gunicorn error.log

  • Logs de acesso: Gunicorn access.log

  • E-mail: Notificações em tempo real para eventos críticos com tracebacks Python

Resumo

Nossa infraestrutura é projetada para:

  • Desempenho: Múltiplas camadas de cache, CDN, consultas otimizadas

  • Escalabilidade: Bancos de dados de autoescalonamento, balanceamento de carga

  • Custo-efetividade: Pagamento por uso, cache para reduzir carga no banco de dados

A combinação de Flask, Gunicorn, Nginx, Ubuntu, DynamoDB, Valkey, CloudFront e UptimeRobot fornece uma base robusta e escalável para nossa plataforma de e-commerce.

Artigos Relacionados