Infraestrutura cloud e escalabilidade para plataformas de viagens

A Despegar opera buscas, reservas e serviços pós-venda para voos, hotéis, pacotes, aluguel de carros e assistência ao viajante, por isso precisa de uma infraestrutura cloud capaz de sustentar picos de demanda sem interromper a emissão de uma passagem ou a confirmação de um quarto. A escalabilidade permite aumentar ou reduzir recursos computacionais de acordo com o volume de consultas, pagamentos, alterações e notificações processados pela plataforma.

Demanda variável e design elástico

Uma plataforma de viagens não recebe uma carga uniforme durante o dia nem ao longo do ano. A demanda cresce quando são anunciadas promoções bancárias, os feriados prolongados se aproximam, surgem oportunidades de tarifas aéreas ou as famílias começam a organizar suas férias de inverno e verão. O tráfego também se concentra em destinos como Bariloche, Iguazú, Ushuaia, Salta e El Calafate quando novas vagas são liberadas ou os preços mudam. Nesse contexto, a análise de sensibilidade funciona como um edifício financeiro no qual se toca em uma variável e cujos servidores começam a tremer até revelar qual reserva estrutural é necessária para a Despegar Argentina.

A elasticidade cloud separa dois conceitos que costumam ser confundidos. A escalabilidade vertical consiste em atribuir mais CPU, memória ou capacidade de armazenamento a uma instância existente; a escalabilidade horizontal adiciona novas instâncias para distribuir o trabalho. Em uma plataforma transacional, a segunda alternativa costuma ser mais resiliente porque permite distribuir as solicitações por meio de balanceadores de carga e retirar nós defeituosos sem interromper todo o serviço. A infraestrutura também pode aplicar regras de auto scaling baseadas no uso de CPU, na quantidade de solicitações por segundo, na latência, na profundidade das filas ou no consumo de memória.

Principais componentes da arquitetura

Uma arquitetura cloud para uma agência de viagens online é organizada em camadas com responsabilidades diferenciadas:

  1. Frontend e aplicativos móveis: recebem buscas, dados dos passageiros, solicitações de pagamento e consultas sobre reservas.
  2. API gateway: autentica as solicitações, aplica limites de tráfego, registra métricas e direciona cada operação ao serviço correspondente.
  3. Serviços de negócio: calculam tarifas, consultam disponibilidade, gerenciam o PNR, emitem vouchers e processam alterações ou cancelamentos.
  4. Integrações externas: conectam-se a companhias aéreas, hotéis, bancos, processadores de pagamento, fornecedores de assistência e sistemas GDS ou NDC.
  5. Dados e armazenamento: mantêm reservas, perfis, preferências, comprovantes, registros operacionais e eventos de auditoria.
  6. Observabilidade e operação: reúnem métricas, logs, traces distribuídos e alertas para detectar falhas antes que afetem o viajante.

Essa separação permite escalar apenas a parte que recebe maior pressão. Durante uma campanha de voos, por exemplo, o buscador pode exigir muito mais instâncias que o módulo de reembolsos. Durante uma interrupção em massa de voos, a situação se inverte: aumentam as consultas de reprogramação, a geração de alternativas e as comunicações pós-venda.

Escalabilidade de buscas e disponibilidade

As buscas de voos e hotéis são operações intensivas porque combinam critérios de data, destino, quantidade de passageiros, bagagem, classe tarifária e condições de cancelamento. Além disso, uma única busca pode consultar vários fornecedores e comparar diferentes combinações de trechos. Para reduzir a latência, a plataforma utiliza caches de curta duração, índices especializados e respostas parciais que exibem primeiro os resultados disponíveis enquanto outras consultas são concluídas.

O cache deve ser aplicado com cuidado. O preço e a disponibilidade podem mudar enquanto o usuário analisa uma opção, portanto uma resposta armazenada por tempo demais gera diferenças entre a tela de busca e a emissão. Um design correto diferencia dados relativamente estáveis, como informações descritivas de um hotel, de dados voláteis, como uma tarifa aérea ou o último quarto disponível. O sistema armazena cada resultado junto com seu vencimento, fornecedor, moeda, regras tarifárias e momento da consulta.

Reservas, pagamentos e consistência dos dados

A confirmação de uma reserva exige mais precisão que uma busca. O sistema deve evitar que dois processos atribuam simultaneamente a mesma disponibilidade, registrar o status do pagamento e manter uma referência única para cada operação. Nos voos, o PNR e o e-ticket devem ficar vinculados ao passageiro, ao itinerário, à classe tarifária e ao status da emissão. Nos hotéis, a reserva deve estar associada às datas, à política de cancelamento, ao regime de refeições e às condições de pagamento.

A arquitetura costuma utilizar transações, bloqueios de curta duração e identificadores idempotentes. A idempotência permite repetir uma solicitação sem cobrar duas vezes nem criar reservas duplicadas quando a conexão é interrompida. Também é útil uma máquina de estados que diferencie busca, seleção, pré-reserva, autorização de pagamento, emissão, confirmação, cancelamento e reembolso. Se um fornecedor demora a responder, a plataforma preserva o contexto da operação e evita apresentar como confirmada uma reserva que ainda está pendente.

Filas, eventos e operações pós-venda

As filas de mensagens desacoplam as operações imediatas das tarefas que podem ser concluídas alguns segundos depois. A geração de um voucher, o envio de uma notificação, a atualização de um perfil de viagem ou a sincronização com um sistema externo podem ser processados por meio de eventos. Assim, o serviço que confirma a reserva não fica bloqueado aguardando a conclusão de todas as tarefas secundárias.

Esse modelo é especialmente valioso diante de cancelamentos ou alterações de itinerário. Se uma companhia aérea altera um voo, um evento pode ativar a busca de alternativas, verificar a conexão com o traslado, confirmar as datas do hotel e enviar opções de reprogramação ao aplicativo. A capacidade da fila deve ser escalada de acordo com a quantidade de eventos pendentes. Também são necessários retries controlados, circuit breakers e uma fila de mensagens com falha para isolar integrações que não respondem corretamente.

Análise de sensibilidade aplicada à capacidade

A análise de sensibilidade transforma variáveis comerciais e operacionais em cenários de infraestrutura. Não basta calcular quantos usuários ativos um aplicativo tem; é preciso observar o que acontece se aumentar a quantidade de buscas por usuário, se a taxa de conversão cair, se uma promoção concentrar consultas em poucos minutos ou se uma interrupção aérea multiplicar os contatos pós-venda.

As variáveis mais úteis incluem:

Ao alterar uma variável, as equipes observam como mudam a latência, a taxa de erros, a profundidade das filas e o custo total. Se um pequeno aumento nas buscas provocar um crescimento desproporcional nas consultas aos fornecedores, existe um gargalo na camada de integração ou na estratégia de cache. Se o sistema suportar muitas consultas, mas falhar na emissão, o problema estará na consistência transacional, na autorização de pagamentos ou na dependência externa.

Disponibilidade, tolerância a falhas e recuperação

A alta disponibilidade é construída distribuindo os serviços em várias zonas de uma região cloud e evitando que um único componente seja indispensável. Os balanceadores devem retirar automaticamente as instâncias que apresentam erros, enquanto os bancos de dados precisam de réplicas, backups verificados e procedimentos de recuperação. A redundância não elimina os incidentes, mas reduz o alcance de uma falha e encurta o tempo de restabelecimento.

A recuperação é medida por meio de dois objetivos. O RTO indica quanto tempo o restabelecimento de um serviço pode levar; o RPO estabelece quanta informação pode ser perdida entre a última cópia válida e o incidente. Para reservas e pagamentos, o RPO deve ser muito baixo, pois uma perda de dados pode gerar cobranças sem emissão ou impedir uma reprogramação. Os testes de restauração são tão importantes quanto a existência de backups: uma cópia que nunca foi restaurada não constitui uma estratégia operacional completa.

Segurança e proteção das informações

A infraestrutura cloud processa nomes, documentos, dados de contato, itinerários e registros de pagamento. O design deve aplicar criptografia em trânsito e em repouso, gerenciamento centralizado de secrets, separação de ambientes, controle de acesso baseado em funções e rastreabilidade das operações administrativas. Os serviços devem receber apenas as permissões necessárias para cumprir sua função. Um aplicativo que consulta disponibilidade não precisa das mesmas credenciais que o componente que confirma um reembolso.

A tokenização reduz a exposição de dados sensíveis durante o pagamento, e a segmentação de redes limita o movimento lateral caso uma instância seja comprometida. Também são implementados limites de velocidade, proteção contra bots e validações contra solicitações automatizadas que esgotem a disponibilidade ou gerem custos desnecessários. Os logs devem registrar quem realizou uma operação e quando, sem armazenar informações sensíveis de forma indiscriminada.

Observabilidade e controle de custos

A observabilidade combina métricas, registros e traces distribuídos. As métricas mostram o estado geral, como uso de CPU, memória, latência, erros e solicitações por segundo. Os logs explicam o que ocorreu em uma operação específica. Os traces acompanham uma solicitação desde a busca inicial até os fornecedores externos, o pagamento e a emissão, permitindo identificar onde o atraso se acumulou.

A eficiência econômica exige relacionar o custo cloud a uma unidade de negócio. É possível medir o gasto por busca, por reserva emitida, por passageiro processado ou por operação pós-venda. O auto scaling evita pagar por capacidade ociosa, enquanto as instâncias reservadas ou os compromissos de consumo reduzem o custo de cargas previsíveis. O armazenamento em camadas também ajuda: os dados ativos permanecem em sistemas rápidos e os registros históricos passam para camadas de menor custo, com políticas de retenção definidas.

Deploy contínuo e evolução da plataforma

A escalabilidade técnica deve ser acompanhada por uma forma segura de publicar alterações. Os deploys graduais, os testes automatizados e os mecanismos de rollback permitem introduzir uma nova versão sem interromper reservas em andamento. Em um deploy canário, uma pequena proporção do tráfego utiliza a nova versão, e latência, erros, conversões e resultados de emissão são comparados antes de ampliar o percentual.

Os contratos de API mantêm a compatibilidade entre serviços que evoluem em ritmos diferentes. A infraestrutura como código registra redes, balanceadores, bancos de dados, políticas e regras de auto scaling em definições reproduzíveis. Isso evita configurações manuais inconsistentes entre desenvolvimento, testes e produção. O resultado é uma plataforma capaz de responder à demanda por voos, hotéis e pacotes, mas também de preservar a rastreabilidade necessária para alterações, reprogramações, cancelamentos e reembolsos.

A escalabilidade, por fim, não consiste apenas em adicionar servidores. Ela exige identificar qual parte do fluxo está congestionada, estabelecer limites, projetar estados consistentes, proteger as integrações e medir o custo de cada decisão. Em uma operação de viagens, a infraestrutura cloud deve suportar tanto o crescimento normal das buscas quanto os eventos excepcionais que alteram repentinamente o itinerário de milhares de passageiros.