Respostas na ordem dos milissegundosCache de altíssimo volume (>1.5M chaves)Autenticação AWS SigV4 Nativa

Motor de Busca OpenSearch: Navegação Facetada em Larga Escala

Compartilho detalhes técnicos da implementação de um motor de pesquisa avançada para uma plataforma de larga escala, substituindo infraestrutura legada por uma arquitetura distribuída e de alta performance.

Cliente: Questões MaisDuração: Escala EnterpriseData: 2026-03-24
NestJS
Amazon OpenSearch Serverless
Redis (ElastiCache)
Aurora PostgreSQL
Prisma ORM

Contexto

Substituição da infraestrutura legada de um motor de busca de questões do Questões Mais por uma solução moderna baseada em Amazon OpenSearch Service. O objetivo era trazer a experiência ágil de navegação facetada padrão e-commerce para a busca de questões educacionais educacionais em larga escala.

A solução core foi construída em NestJS, orquestrando requisições entre Amazon OpenSearch Serverless (AOSS), Redis e Aurora PostgreSQL através do Prisma ORM.

Desafios Arquiteturais e Soluções Aplicadas

01
🛍️E-commerce

Navegação Facetada

Uso de per-facet filter aggregations para reatividade na contagem de filtros, com composite aggregations e match_phrase_prefix para paginação e busca fuzzy ativa.

02
Hard TTL 24h

Resiliência & Cache

Cache distribuído no Redis via Pipeline. A volumetria (>1.5M) ditou o Hard TTL e um fallback de 3s para o Aurora PostgreSQL para prevenir timer leaks.

03
📈Hacker News Decay

Algoritmo de Trending

Decaimento exponencial cruzando engajamento numérico (visualizações) e tempo para destacar conteúdos genuinamente relevantes (c/ cache SWR).

04
⚙️JsonB + GIN

Filtros e Presets

CRUD de presets com indexação por colunas JsonB e GIN no PostgreSQL para assegurar schemas complexos sem gargalos de deserialização.

05
🔒AWS SigV4

Segurança AWS

Autenticação nativa e dinâmica com Amazon OpenSearch Serverless, assinando requisições e suportando Roles IAM e credenciais temporárias.

Resultado

O resultado: um ecossistema de pesquisa escalável, com respostas sustentadas na ordem dos milissegundos e preparado, em nível de arquitetura, para suportar o crescimento orgânico contínuo da plataforma de modo resiliente e seguro.


Blueprint Técnico

Abaixo, os detalhes da arquitetura implementados neste case de alta complexidade.

1. Visão Geral da Arquitetura

O módulo de buscas avançadas do Questões Mais contempla uma rota híbrida, unindo os poderes textuais do OpenSearch com as entidades de negócio via Prisma, e distribuindo o processamento com Redis.

2. Módulo OpenSearch e Autenticação Dinâmica (SigV4)

A orquestração do serviço detecta dinamicamente a presença de credenciais da AWS para aplicar a autenticação com proteção de acessos rigorosa, assinando os cabeçalhos (Authorization, x-amz-date e x-amz-security-token):

  • Ambiente AWS Provisionado (AOSS): Utiliza @aws-sdk/signature-v4 e @aws-crypto/sha256-js para assinar via IAM Roles de leitura (os-read-questoes-mais).
  • Ambiente Local: Adota Basic Auth standard.

3. Rotas da Busca Avançada e Motor de Facets

1Busca Híbrida
Prisma Hydration

Hydration de entidades via Prisma (excesso de restrições ou 'minhas_questoes=resolvidas') na API antes de gerar IPs e inclusões para a Query final ao Elastic.

2Padrão E-commerce
Per-facet Filter

O motor processa os post_filters dos search hits, e para as aggregations, garante que o facet selecione desconsiderando a própria restrição (mantendo o discovery de vizinhos ativo).

3Paginação de Facets
Composite Aggs

Modal 'Ver todos' implementa Composite Aggregations com Cursor contínuo (after key), embutindo uma camada extra textual (should match_phrase_prefix).

Desafio técnico: Conciliar as agregações super complexas do OpenSearch — necessárias na UX de E-commerce — com as permissões dinâmicas do usuário que residem no banco relacional (ex: esconder questões que o aluno já resolveu localmente).

4. Resiliência do Pipeline de Redis

A proteção dos dados e performance do acesso em lotes segue a topologia:

  1. Pipeline Batch GET: Requisição massiva das alternativas das listagens num único roundtrip, com tolerância estrita (timeout 3s e clearTimeout).
  2. Fallback DB: Dados não cacheados caem pro Prisma recuperar as alternativas diretamente do Aurora PostgreSQL via subconsulta in: missingIds.
  3. Pipeline Batch SET: Retroalimenta o Redis com Hard TTL 24h evitando expansões catastróficas.

Tem um desafio parecido?

Vamos conversar sobre como posso ajudar no seu projeto.

Entrar em contato