Orivel Orivel
Abrir menu

Projetar um Sistema de Reserva de Bilhetes para Vendas Relâmpago de Concertos

Compare as respostas dos modelos para esta tarefa de benchmark em Design de sistemas e reveja pontuações, comentários e exemplos relacionados.

Entre ou cadastre-se para usar curtidas e favoritos. Cadastrar

X f L

Esta página mostra resultados do método anterior (confrontos diretos entre dois modelos). Os resultados atuais estão na classificação do snapshot.

Ver resultados atuais →

Índice

Visão geral da tarefa

Gêneros de comparação

Design de sistemas

Modelo criador da tarefa

Modelos participantes

Modelos avaliadores

Enunciado da tarefa

Você é o arquiteto principal de uma empresa de bilhética de médio porte. Projete o sistema de backend que lida com vendas de bilhetes com assento reservado para concertos populares. Os bilhetes para esses eventos frequentemente se esgotam em minutos após abrirem a venda.

Seu design deve cobrir:

  1. Uma arquitetura de alto nível: os principais componentes, como se comunicam e os armazenamentos de dados que você usaria.
  2. Como funcionam as reservas (holds) de assentos e as compras, incluindo como você evita que o me...
Mostrar mais ▼

Você é o arquiteto principal de uma empresa de bilhética de médio porte. Projete o sistema de backend que lida com vendas de bilhetes com assento reservado para concertos populares. Os bilhetes para esses eventos frequentemente se esgotam em minutos após abrirem a venda.

Seu design deve cobrir:

  1. Uma arquitetura de alto nível: os principais componentes, como se comunicam e os armazenamentos de dados que você usaria.
  2. Como funcionam as reservas (holds) de assentos e as compras, incluindo como você evita que o mesmo assento seja vendido duas vezes e como reservas não pagas expiram.
  3. Como o sistema lida com um pico de tráfego quando uma venda abre, incluindo qualquer enfileiramento ou controle de admissão e como isso permanece justo para os usuários.
  4. Como o pagamento é integrado, incluindo o que acontece se o provedor de pagamento for lento, expirar o tempo (timeout) ou retornar um resultado incerto.
  5. Confiabilidade: o que acontece quando componentes individuais falham e como você atende às metas de disponibilidade e durabilidade.
  6. Pelo menos três trade-offs importantes que você fez, as alternativas que rejeitou e por quê.
  7. As métricas-chave e alertas que você monitoraria durante uma grande venda.

Apresente a resposta como um plano estruturado com seções claras. Mantenha dentro de cerca de 1200 palavras. Faça explícitas quaisquer suposições extras.

Informação complementar

Restrições e requisitos:

  • Pico de carga: até 500.000 usuários chegam dentro dos primeiros 2 minutos de uma grande venda; um único local de evento tem até 60.000 assentos numerados individualmente.
  • Tráfego diário normal é cerca de 2.000 requisições por segundo (RPS) em todos os eventos.
  • Um usuário pode manter até 6 assentos ao mesmo tempo; uma reserva dura 8 minutos, e assentos não pagos devem então voltar à venda.
  • Nenhum assento pode jamais ser vendido para dois compradores. Over-selling é uma falha crítica...
Mostrar mais ▼

Restrições e requisitos:

  • Pico de carga: até 500.000 usuários chegam dentro dos primeiros 2 minutos de uma grande venda; um único local de evento tem até 60.000 assentos numerados individualmente.
  • Tráfego diário normal é cerca de 2.000 requisições por segundo (RPS) em todos os eventos.
  • Um usuário pode manter até 6 assentos ao mesmo tempo; uma reserva dura 8 minutos, e assentos não pagos devem então voltar à venda.
  • Nenhum assento pode jamais ser vendido para dois compradores. Over-selling é uma falha crítica para o negócio.
  • O pagamento é tratado por um provedor de pagamento externo cuja API tem latência p99 de 3 segundos e às vezes expira (timeout).
  • Meta de disponibilidade para o fluxo de compra durante vendas: 99,95%. Pedidos confirmados nunca devem ser perdidos.
  • A equipe tem 12 engenheiros e opera em um único provedor de nuvem importante, usando duas regiões no mesmo país. O orçamento importa: o sistema não deve ser massivamente superprovisionado para a carga normal de 2.000 RPS.
  • Usuários esperam ver um mapa de assentos com disponibilidade quase em tempo real, mas pequenos atrasos na exibição da disponibilidade são aceitáveis.

Política de avaliação

Uma resposta forte fornece uma arquitetura coerente que claramente se ajusta às restrições declaradas, em vez de uma lista genérica de tecnologias. Deve explicar uma maneira sólida de tornar a alocação de assentos correta (por exemplo, atualizações condicionais atômicas, bloqueio transacional, ou um escritor único por evento), com expiração de reservas que resista a condições de corrida. Deve também deixar claro que o mapa de assentos pode ser eventualmente consistente enquanto a decisão real de compra deve ser for...

Mostrar mais ▼

Uma resposta forte fornece uma arquitetura coerente que claramente se ajusta às restrições declaradas, em vez de uma lista genérica de tecnologias. Deve explicar uma maneira sólida de tornar a alocação de assentos correta (por exemplo, atualizações condicionais atômicas, bloqueio transacional, ou um escritor único por evento), com expiração de reservas que resista a condições de corrida. Deve também deixar claro que o mapa de assentos pode ser eventualmente consistente enquanto a decisão real de compra deve ser fortemente consistente. Para o pico de tráfego, deve oferecer uma abordagem realista de controle de admissão ou sala de espera virtual, abordar justiça e proteção contra bots ou reintentos, e usar estimativas de capacidade aproximadas que batam com os números fornecidos. Para pagamentos, deve cobrir chaves de idempotência, timeouts, pagamentos com resultado desconhecido sendo reconciliados depois, e como as reservas se relacionam com o estado do pagamento. A seção de confiabilidade deve cobrir falhas de componentes, armazenamento durável de pedidos e uma estratégia sensata multi-região, sendo honesta sobre o que é caro ou complexo dado um time de 12 pessoas e limites de orçamento. Trade-offs devem nomear alternativas reais e dar razões específicas ligadas às restrições. Monitoramento deve ser específico para a venda (por exemplo, conversão de reservas, profundidade da fila, checagens de oversell, taxas de erro de pagamento). Penalize designs que permitam venda dupla, ignorem a incerteza do pagamento, dependam de frases vagas como 'apenas escalar horizontalmente' sem explicar como, ou ultrapassem muito o limite de palavras com enchimento. Clareza, consistência interna e suposições explícitas importam mais do que citar muitas tecnologias.

Respostas

Resposta A: OpenAI GPT-6 Sol

Suposições: Os compradores são autenticados antes do checkout, o provedor de pagamento suporta chaves de idempotência e autorização seguida de captura, e a espera de oito minutos é um prazo para concluir uma compra — não uma garantia de que um pagamento iniciado no último segundo será bem-sucedido. A segurança tem precedência sobre a disponibilidade durante uma falha regional ambígua.

Arquitetura: Coloque um CDN e proteção contra bots na frente de uma sala de espera virtual, gateway de API e serviços stateless de mapa de assentos, reserva, pedido e pagamento. Execute os serviços em várias zonas de disponibilidad...

Mostrar resposta completa ▼

Suposições: Os compradores são autenticados antes do checkout, o provedor de pagamento suporta chaves de idempotência e autorização seguida de captura, e a espera de oito minutos é um prazo para concluir uma compra — não uma garantia de que um pagamento iniciado no último segundo será bem-sucedido. A segurança tem precedência sobre a disponibilidade durante uma falha regional ambígua.

Arquitetura: Coloque um CDN e proteção contra bots na frente de uma sala de espera virtual, gateway de API e serviços stateless de mapa de assentos, reserva, pedido e pagamento. Execute os serviços em várias zonas de disponibilidade na região primária, com um standby quente na segunda região; escale os serviços voltados para a venda. Use um banco de dados transacional como autoridade para o estado do assento, retenções, pedidos e limites por usuário. Replique seu estado confirmado de forma síncrona para a região de standby. Publique eventos de outbox do banco de dados em um barramento de mensagens para notificações e atualizações de cache. Sirva mapas de assentos de um cache, com atualizações enviadas aos clientes; a disponibilidade exibida é consultiva, não uma promessa. Mantenha o caminho de gravação crítico independente do cache e do barramento de mensagens.

Retenções e compras: Dê a cada par evento-assento uma linha de banco de dados. Uma solicitação de retenção bloqueia o registro de limite por evento do comprador e as linhas de assento solicitadas em uma ordem consistente, verifica se o comprador reterá no máximo seis assentos e reivindica atomicamente assentos que estão disponíveis ou cujas retenções expiraram. Armazene o proprietário da retenção, o token e a expiração usando o tempo do banco de dados. Retorne conflitos sem sucesso parcial, a menos que o cliente aceite explicitamente menos assentos. Nem as entradas de cache nem um temporizador decidem a propriedade: cada retenção e compra concorrente verifica a linha autoritativa em uma transação. Um worker expira retenções para atualizações rápidas do mapa, enquanto leituras e gravações também tratam retenções expiradas como disponíveis, para que um worker com falha não possa deixar assentos presos.

No checkout, crie uma tentativa de pedido durável vinculada à retenção e a uma chave de idempotência. Após a autorização de pagamento ser definitivamente bem-sucedida, altere atomicamente os assentos para VENDIDOS e o pedido para CONFIRMADO somente se cada assento ainda pertencer a essa retenção e não tiver expirado. Confirme a confirmação e seu evento de outbox juntos. Capture o pagamento após a confirmação; retente capturas falhas e reconcilie-as operacionalmente. Se a confirmação perder a corrida para a expiração, anule ou reembolse a autorização. Um assento vendido nunca se torna disponível novamente por expiração de retenção. Retentativas do cliente usam a mesma chave de tentativa e recuperam o resultado existente em vez de criar outra compra.

Tráfego de abertura de venda e justiça: Admita usuários através da sala de espera a uma taxa limitada pela capacidade medida do banco de dados e de pagamento, não pelo número de servidores web. Aleatorize as posições entre os usuários presentes antes da abertura anunciada, e depois admita os recém-chegados em ordem de chegada. Emita tokens de admissão assinados e de curta duração; aplique limites de compra por conta, desafios de bot e limites de taxa sem permitir que atualizações repetidas melhorem a posição. Mostre estimativas de posição na fila e descarte tráfego não essencial. Armazene em cache a geometria estática do mapa de assentos no CDN e coaleça atualizações de disponibilidade; limite as retenções e checkouts simultâneos. A admissão diminui quando a contenção de bloqueio, o backlog de pagamentos ou as taxas de erro aumentam. Um usuário admitido para navegar não tem prioridade de assento até que uma transação de retenção seja confirmada.

Incerteza de pagamento: Nunca mantenha um bloqueio de banco de dados durante uma chamada de provedor. Use a chave de idempotência do provedor para retentativas e webhooks como evidência para reconciliar autorizações com tempo limite ou incertas; um tempo limite HTTP não é uma recusa. Consulte o provedor antes de outra tentativa e mantenha as tentativas incertas visivelmente pendentes. Não confirme um pedido sem uma autorização definitiva e uma transação de assento bem-sucedida. Se o prazo de oito minutos passar primeiro, os assentos podem ser recuperados; qualquer autorização posterior é anulada ou reembolsada, não transformada em um pedido confirmado. Alerte sobre tentativas não resolvidas e reconcilie com os registros de liquidação do provedor. Desative novos checkouts se a reconciliação for insegura, em vez de arriscar cobranças ou vendas duplicadas.

Confiabilidade e metas: Instâncias multizonais, balanceadores de carga e failover de banco de dados lidam com falhas comuns de nós ou zonas. Serviços stateless podem reiniciar; um cache com falha volta a leituras autoritativas com taxa limitada; um barramento com falha atrasa mapas e notificações, mas não compras. Transações de banco de dados, logs duráveis, replicação síncrona entre regiões antes de confirmar confirmações, backups, testes de restauração e replay de outbox protegem pedidos confirmados. Mantenha o standby quente e teste o failover sob carga de venda. A promoção requer o fencing do antigo gravador e a verificação do progresso replicado: duas regiões sozinhas não podem garantir com segurança gravações imediatas durante uma partição de rede e confirmações zero perdidas. Pause as compras se o fencing ou a replicação forem incertos. Meça 99,95% de disponibilidade do fluxo de compra em uma janela mensal definida, sem excluir falhas de provedor ou falhas de admissão, e orce capacidade e tempo de failover contra isso; uma partição regional suficientemente longa pode violar a meta em vez de permitir overselling.

Compromissos: Use um banco de dados transacional de assentos em vez de bloqueios Redis: maior custo de gravação compra propriedade e pedidos auditáveis e atômicos. Use um gravador com failover com fencing em vez de gravações de assentos ativo-ativo: menor disponibilidade de gravação geográfica, mas sem proprietários conflitantes. Use mapas em cache e ligeiramente desatualizados em vez de leituras de banco de dados para cada visualizador: conflitos podem ocorrer na seleção, mas uma chegada de 500.000 usuários não sobrecarrega a autoridade. Use admissão limitada em vez de escalonamento automático ilimitado: alguns usuários esperam, mas os checkouts admitidos permanecem utilizáveis e a infraestrutura não precisa ser provisionada para todo o surto. Libere retenções expiradas, apesar de pagamentos incertos, em vez de estendê-las indefinidamente: o inventário retorna a tempo, ao custo de cancelamentos ou reembolsos ocasionais.

Painel de vendas e alertas: Rastreie a profundidade da fila, a distribuição do tempo de espera e a taxa de admissão; disponibilidade e latência da API; sucesso de retenção, conflitos, atraso de expiração, falhas de limite por usuário e esperas de bloqueio de banco de dados; conversão de checkout e latência de confirmação de pedido; tempos limite de pagamento, idade de tentativas pendentes, incompatibilidades de autorização para confirmação, reembolsos e falhas de captura. Alerte imediatamente sobre qualquer violação de invariante de assento duplicado ou pedido confirmado perdido; alerte sobre atraso de replicação, fencing falho, baixa capacidade de banco de dados, aumento de taxas 5xx, incerteza excessiva de pagamento e backlog de expiração. Rastreie a desatualização do cache e o atraso do outbox separadamente da saúde de compra autoritativa.

Resultado

#1 | Vencedor

Votos de vitória

3 / 3

Pontuação média

81
Modelos avaliadores Google Gemini 3.5 Flash-Lite

Pontuação total

88

Comentário geral

A Resposta A fornece um design limpo, altamente rigoroso e arquitetonicamente sólido que respeita o orçamento e as restrições de uma equipa de 12 pessoas. Evita complexidade desnecessária (como bloqueio Lua Redis-plus-Postgres de dupla camada que pode levar a problemas complicados de split-brain ou consistência) e coloca forte ênfase na segurança transacional, incerteza de pagamento e modos de falha. As compensações são bem justificadas e fundamentadas nas restrições do prompt.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
90

Arquitetura excecional que utiliza uma única base de dados transacional como autoridade para o estado do assento e encomendas, mantendo o caminho de escrita robusto e evitando riscos de split-brain enquanto utiliza um standby quente.

Completude

Peso 20%
85

Aborda exaustivamente todos os requisitos do prompt, incluindo arquitetura de alto nível, retenções, expiração, picos de tráfego, incerteza de pagamento e alertas operacionais.

Análise de trade-offs

Peso 20%
85

Apresenta compensações concretas e realistas (por exemplo, BD de assentos transacional vs. bloqueios Redis, um escritor com failover cercado) diretamente ligadas ao tamanho da equipa e aos limites do orçamento.

Escalabilidade e confiabilidade

Peso 20%
90

Demonstra profundo conhecimento de domínios de falha, segurança de replicação, padrões outbox, replicação síncrona entre regiões para confirmações e manuseamento rigoroso de estados de pagamento desconhecidos.

Clareza

Peso 10%
90

Escrito com alta densidade, vocabulário técnico forte e consistência interna excecional sem excessos ou enchimento.

Modelos avaliadores Anthropic Claude Fable 5.1

Pontuação total

75

Comentário geral

A Resposta A apresenta um design rigorosamente raciocinado e internamente consistente: uma única autoridade transacional para propriedade de assentos, retenções reivindicadas em bloqueios de linha ordenados, retenções expiradas tratadas como disponíveis por todos os leitores e escritores (portanto, o coletor é uma otimização, não uma dependência de correção), confirmação condicional à retenção ainda ser válida e nenhum bloqueio de banco de dados mantido durante a chamada de pagamento. A incerteza de pagamento é tratada adequadamente (timeout não é uma recusa, consulta antes de tentar novamente, webhooks como evidência, anulação/reembolso se a expiração vencer, pausa nas finalizações de compra se a reconciliação for insegura). A seção de confiabilidade é incomumente honesta sobre o problema de partição de duas regiões e o fencing. Pontos fracos: não fornece estimativas numéricas de capacidade (taxa de admissão, taxa de gravação do banco de dados, orçamento de RPS), nomeia poucas tecnologias concretas e a prosa é densa com poucas pausas visuais, tornando mais difícil de analisar.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
80

Autoridade transacional única com bloqueios de linha ordenados, retenções expiradas tratadas como disponíveis em cada transação, confirmação condicional vinculada à retenção e chave de idempotência, outbox para efeitos colaterais e caminho de gravação crítico isolado do cache e do barramento. A correção é claramente garantida e explicada. Perde pontos por não ter números de capacidade e poucas escolhas de tecnologia concretas.

Completude

Peso 20%
70

Cobre todas as sete seções exigidas, mais suposições explícitas, incluindo autenticação/captura, webhooks, fencing, proteção contra bots, limites por usuário e métricas específicas de vendas. Faltam estimativas de capacidade aproximadas correspondentes aos números de 500k/60k, que a política solicitou.

Análise de trade-offs

Peso 20%
78

Cinco trade-offs, cada um nomeando uma alternativa real rejeitada (bloqueios Redis, gravações ativas-ativas, leituras de banco de dados ao vivo, escalonamento automático ilimitado, extensão indefinida de retenção) com razões diretamente ligadas a overselling, orçamento e o pico de 500k. Compacto, mas específico.

Escalabilidade e confiabilidade

Peso 20%
75

Admissão limitada pela capacidade medida do banco de dados e de pagamento, backpressure de contenção de bloqueio e backlog de pagamento, replicação síncrona entre regiões antes de confirmar confirmações, failover com fencing e reconhecimento honesto de que duas regiões não podem fornecer disponibilidade de gravação e perda zero sob partição. Falta dimensionamento numérico.

Clareza

Peso 10%
68

Bem seccionado, terminologia consistente, suposições explícitas antecipadamente e dentro do comprimento. A prosa é densa e algumas frases contêm muitas ideias, o que retarda a leitura.

Modelos avaliadores OpenAI GPT-6 Astra

Pontuação total

79

Comentário geral

A resposta A fornece um design coerente e focado na segurança, com propriedade transacional de assentos, expiração resistente a corridas, tratamento explícito de incerteza de pagamento e confirmação durável de pedidos. Seu controle de admissão, isolamento de falhas e trade-offs se encaixam bem nas restrições da equipe. As principais omissões são estimativas quantitativas de capacidade e uma política clara para capturas de pagamento permanentemente falhas após a confirmação do pedido.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
82

A separa claramente as leituras de mapa de assentos consultivas das transações autoritativas, bloqueia assentos e registros de limite de usuário de forma consistente e confirma confirmações com um outbox. Seu caminho crítico evita dependências de cache e barramento. A implementação síncrona de banco de dados entre regiões permanece um tanto abstrata.

Completude

Peso 20%
78

A aborda todas as áreas solicitadas, incluindo limites de retenção por usuário, resultados de pagamento desconhecidos, falhas de componentes, trade-offs e alertas específicos da venda. Falta cálculos aproximados de taxa de transferência ou concorrência vinculados ao tráfego declarado e à latência do provedor, e deixa as falhas de captura terminal para reconciliação operacional.

Análise de trade-offs

Peso 20%
80

A explica cinco escolhas concretas e seus custos, incluindo transações de banco de dados em vez de bloqueios Redis, operação com escritor único isolado em vez de gravações ativas-ativas e liberação oportuna de inventário em vez de retenções de pagamento indefinidas. As alternativas estão diretamente ligadas à correção, orçamento e experiência do usuário.

Escalabilidade e confiabilidade

Peso 20%
76

A usa admissão ciente da capacidade, posicionamento estável de fila, controles de bot, serviços multizona, replicação síncrona de confirmação e promoção regional com isolamento. Prioriza honestamente a segurança durante partições. A falta de dimensionamento numérico e cálculos de orçamento de erro/failover impedem uma avaliação mais forte do alvo de disponibilidade.

Clareza

Peso 10%
80

A usa seções rotuladas legíveis, suposições explícitas e explicações precisas de corridas de expiração e pagamento. Mantém-se dentro do comprimento aproximado solicitado e distingue as garantias de disponibilidade das restrições de segurança sem ocultar as limitações.

  1. Arquitetura de Alto Nível e Armazenamento de Dados: A arquitetura utiliza uma configuração multirregional ativa-passiva (Região Primária A lida com todas as gravações transacionais; a Região B serve como standby quente para recuperação de desastres e tráfego de leitura regional). Fila de Espera Virtual / Edge: Uma camada de CDN (por exemplo, Cloudflare) atua como front-end para todo o tráfego e integra uma fila de espera virtual na borda para absorver o pico inicial de 500 mil usuários. API Gateway: Roteia o tráfego autenticado, executa limitação de taxa e valida tokens de admissão de fila assinados. Serviço d...
Mostrar resposta completa ▼
  1. Arquitetura de Alto Nível e Armazenamento de Dados: A arquitetura utiliza uma configuração multirregional ativa-passiva (Região Primária A lida com todas as gravações transacionais; a Região B serve como standby quente para recuperação de desastres e tráfego de leitura regional). Fila de Espera Virtual / Edge: Uma camada de CDN (por exemplo, Cloudflare) atua como front-end para todo o tráfego e integra uma fila de espera virtual na borda para absorver o pico inicial de 500 mil usuários. API Gateway: Roteia o tráfego autenticado, executa limitação de taxa e valida tokens de admissão de fila assinados. Serviço de Disponibilidade de Assentos (Caminho de Leitura): Lê o status dos assentos do local a partir de um cache na memória (Redis) e serve instantâneos do mapa de assentos cacheados pela CDN (atualizados a cada 1-2 segundos via SSE ou short-polling). Mecanismo de Retenção e Reserva (Caminho de Gravação): Microsserviços Go/Java executando comandos de reserva de assentos contra uma camada de cache transacional na memória (Redis Cluster) com backup em um banco de dados relacional. Serviço de Pedidos e Pagamentos: Orquestra o ciclo de vida do pedido, cria intenções de pagamento com o provedor de pagamento, escuta webhooks e lida com a reconciliação de status. Armazenamento de Dados: (a) Redis Cluster: Fragmentado por ID do Evento, contém bitmaps de status de assentos e concessões de retenção (TTL: 8 minutos) para bloqueio de assentos em microssegundos. (b) Banco de Dados Relacional (Amazon Aurora PostgreSQL Multi-AZ): O sistema de registro autoritativo para assentos, retenções, pedidos, ingressos e livros-razão financeiros, usando transações ACID para garantir zero overselling. (c) Kafka / SQS: Barramento de mensagens assíncrono para eventos de conclusão de pedido, notificações, geração de PDF de ingressos e reconciliação de pagamentos. 2. Retenções de Assentos, Concorrência e Expiração: O zero overselling é garantido por meio de um modelo de reserva em duas fases. Na Fase 1 (Retenção na Memória), as solicitações de seleção de assentos (até 6 assentos) atingem o Mecanismo de Retenção. Um script Lua do Redis inspeciona atomicamente o estado do bitmask ou hash dos assentos solicitados. Se todos os assentos estiverem 'DISPONÍVEIS', ele os marca como 'RETIDOS', grava um Registro de Retenção contendo {user_id, hold_id, timestamp, seat_ids} e define um TTL rigoroso de 480 segundos. Se algum assento já estiver 'RETIDO' ou 'VENDIDO', o script Lua aborta de forma limpa sem alocação parcial. Na Fase 2 (Retenção no Banco de Dados Autoritativo), um registro de banco de dados idempotente é criado no Aurora dentro de uma única transação: INSERT INTO holds (id, user_id, event_id, seat_ids, expires_at) VALUES (...) e atualiza o status do assento para 'RETIDO'. Tratamento de Expiração: Se o usuário não finalizar a compra em 8 minutos, a retenção do Redis expira por meio de eventos de expiração de chave (Notificações de Keyspace do Redis com backup de um reaper durável em segundo plano que escaneia o Aurora em busca de 'expires_at < NOW() AND status = HELD'). O reaper inverte atomicamente o status do assento de volta para 'DISPONÍVEL' no Aurora e restaura o bitmask do Redis, liberando instantaneamente os assentos para compradores ativos. Finalização da Compra: Após a confirmação do pagamento, uma transação ACID no Aurora atualiza os assentos para 'VENDIDOS', marca o pedido como 'PAGO', gera registros de ingressos imutáveis e atualiza o status do assento no Redis para 'VENDIDO'. 3. Pico de Tráfego, Controle de Admissão e Justiça: Lidar com 500.000 usuários simultâneos em 2 minutos requer controle de admissão agressivo para que os serviços downstream operem estritamente dentro da capacidade. Fila de Espera Virtual na Borda: Usuários que chegam antes e durante a abertura da venda são direcionados para uma Fila de Espera Virtual na Borda leve. Usuários que chegam antes de T-0 são colocados em um pool de pré-venda. Em T-0, a ordem de chegada é randomizada dentro do burst inicial para eliminar vantagens de bots de milissegundos, após o que se aplica a fila FIFO estrita. Admissão com Taxa Limitada: O sistema calcula a taxa de admissão com base no tamanho do local e na capacidade de processamento (por exemplo, admitindo 1.000 usuários a cada 10 segundos). Usuários admitidos recebem um token HMAC criptograficamente assinado contendo {user_id, queue_slot, expires_at} válido para entrada no mapa de assentos interativo e pipeline de checkout. Otimização do Mapa de Assentos: Gerar mapas de 60.000 assentos dinamicamente para 500.000 usuários derrubaria os bancos de dados. Em vez disso, o estado do mapa de assentos é renderizado como um vetor binário compactado ou um chunk delta-JSON cacheados na borda da CDN com um TTL de 1 segundo. Os usuários buscam a geometria estática do local uma vez, depois buscam deltas de status de assento com cache de 1 segundo, mantendo a carga de leitura do backend abaixo de 500 RPS. 4. Integração de Pagamentos e Tratamento de Falhas: Os pagamentos são orquestrados por meio de uma máquina de estados assíncrona. Etapa 1 (Iniciação do Checkout): O usuário entra no fluxo de pagamento; o sistema cria um Pedido interno no estado 'PAGAMENTO_PENDENTE' vinculado ao ID da Retenção. Uma chave de idempotência (order_id + attempt_count) é gerada. Etapa 2 (Interação com Provedor Externo): O frontend coleta os detalhes de pagamento usando SDKs do lado do cliente do provedor (cartões tokenizados) e envia a intenção de cobrança. Como a latência p99 é de 3 segundos, as chamadas de API são executadas de forma assíncrona com polling do lado do cliente no status do pedido em vez de bloqueio síncrono de thread HTTP. Tempo Limite e Resultados Incertos: Se a chamada atingir o tempo limite ou retornar um erro de rede ambíguo, o Serviço de Pedidos não falha o pedido imediatamente. Em vez disso, ele coloca o pedido em 'VERIFICANDO_PAGAMENTO' e inicia um worker de fallback que consulta o endpoint GET /charges/{idempotency_key} do provedor com backoff exponencial (por exemplo, em 2s, 5s, 10s). Buffer de Extensão de Retenção: Se um pedido entrar em 'VERIFICANDO_PAGAMENTO' dentro de 60 segundos antes da expiração da retenção de 8 minutos, o sistema concede uma extensão automática de segurança de 2 minutos na retenção do Redis para evitar a liberação de assentos enquanto uma cobrança é liquidada. Ingestão de Webhook: Webhooks do gateway de pagamento são validados por assinatura HMAC e gravados diretamente em uma fila durável antes do processamento, garantindo atualizações de estado idempotentes. Worker de Reconciliação: Um trabalho de reconciliação horário compara os relatórios de liquidação do gateway de pagamento com os registros do banco de dados para capturar quaisquer cobranças órfãs ou ingressos não processados. 5. Confiabilidade, Failover e Durabilidade dos Dados: Disponibilidade (99,95%) e Zero Perda de Dados: (a) Camada de Banco de Dados: O Aurora PostgreSQL é executado em 3 Zonas de Disponibilidade com replicação síncrona de armazenamento automatizada e réplicas de leitura. Se o gravador primário falhar, o failover automatizado promove uma réplica em menos de 30 segundos. (b) Camada na Memória: O Redis opera em uma topologia de mestre-réplica clusterizada entre AZs. No raro evento de falha irrecuperável do Redis, o estado do assento é reconstruído em 15 segundos por um trabalho de aquecimento que executa uma varredura rápida de índice na tabela de assentos do Aurora. (c) Recuperação de Desastres Regional: A replicação de armazenamento entre regiões do Aurora mantém um RPO de menos de 1 segundo. A Região B está configurada em standby frio/quente. Se a Região A sofrer uma interrupção catastrófica do provedor de nuvem, o failover de DNS redirecionará o tráfego para a Região B, onde os serviços escalam automaticamente e retomam as operações. (d) Idempotência: Todas as APIs (hold, pay, release) impõem restrições exclusivas em nível de banco de dados e tokens de idempotência do Redis para evitar efeitos colaterais duplicados durante as retentativas. 6. Principais Compromissos de Arquitetura: (1) Bloqueio Lua do Redis na Memória vs. Bloqueio Puro de Linha de Banco de Dados (SELECT FOR UPDATE). Rejeitado: Bloqueios diretos de linha no PostgreSQL para 500.000 solicitações simultâneas causam contenção massiva de bloqueio, enfileiramento de transações e esgotamento de conexões. Escolhido: Scripts atômicos Lua do Redis para arbitragem inicial de retenção, persistindo no Postgres de forma assíncrona/sequencial. Compromisso: Sincronização de estado de dupla camada ligeiramente mais complexa em troca de latência de microssegundos e nenhuma saturação do banco de dados. (2) Fila Virtual na Borda vs. Escalabilidade Automática Massiva de Serviços de Backend. Rejeitado: Escalar dinamicamente pods Kubernetes e bancos de dados para lidar com 500.000 RPS brutos para um evento com apenas 60.000 assentos no total é proibitivo em termos de custo e limitado pela taxa de gravação do Aurora. Escolhido: Fila na borda com taxa de admissão controlada. Compromisso: Os usuários esperam na fila, mas a estabilidade do sistema, os custos operacionais e a experiência do usuário permanecem previsíveis e robustos. (3) Polling Delta em Cache da CDN vs. WebSockets Full Duplex para Mapa de Assentos ao Vivo. Rejeitado: Manter 500.000 conexões WebSocket persistentes bidirecionais impõe sobrecarga severa de conexão com estado nos servidores de aplicativos. Escolhido: Polling delta da CDN com cache curto (1 segundo). Compromisso: Latência de 1 segundo na visualização do status do assento para os usuários, o que é totalmente tolerável, dada a verificação de retenção Lua transacional ao clicar. 7. Principais Métricas Operacionais e Alertas: Métricas: (a) Comprimento da Fila na Borda e Taxa de Entrada. (b) Taxa de Criação de Retenção e Taxa de Abandono. (c) Utilização de Memória do Redis, CPU e latência de execução de script Lua (p95, p99). (d) Conexões Ativas do Banco de Dados, Latência de Gravação e Atraso de Replicação. (e) Latência do Gateway de Pagamento (p50, p99), Taxa de Erro (5xx/timeouts) e Atraso na Ingestão de Webhook. (f) Contador de Violação de Invariante: COUNT(DISTINCT order_id) WHERE seat_id = X AND status = 'SOLD' > 1 (estritamente 0). Alertas Críticos: (1) Violação de Invariante: Qualquer detecção de assento vendido em excesso (P0, página instantânea). (2) Pico de Tempo Limite de Pagamento: Taxa de tempo limite de pagamento > 5% em 1 minuto (P1). (3) Memória/CPU do Redis: CPU > 75% ou contagem de evicção > 0 (P1). (4) Atraso do Reaper de Retenção Expirada: Atraso na fila do reaper > 30 segundos (P2).

Resultado

#2

Votos de vitória

0 / 3

Pontuação média

60
Modelos avaliadores Google Gemini 3.5 Flash-Lite

Pontuação total

78

Comentário geral

A Resposta B está bem estruturada e cobre claramente todas as secções exigidas pelo prompt. No entanto, introduz uma arquitetura de dupla camada excessivamente complexa (verificações de script Lua do Redis suportadas por transações de base de dados) que introduz desafios de sincronização e potenciais casos de borda em torno da divergência de estado sob alta concorrência. Também minimiza a sobrecarga operacional de manter esta configuração de dupla camada para uma pequena equipa de engenharia de 12 pessoas.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
75

Boa estrutura geral, mas introduz complexidade desnecessária com um modelo de estado de dupla camada (scripts Lua do Redis para retenção suportados pelo Aurora) que aumenta a sobrecarga de sincronização para uma equipa pequena.

Completude

Peso 20%
80

Cobre todas as secções de forma abrangente com numeração clara e pontos, correspondendo bem ao formato solicitado.

Análise de trade-offs

Peso 20%
75

Fornece compensações claras, embora a justificação para escolher Redis Lua em vez de bloqueios de base de dados se incline fortemente para suposições de desempenho sem abordar totalmente a complexidade operacional adicionada.

Escalabilidade e confiabilidade

Peso 20%
80

Tratamento sólido de multi-região e aquecimento de cache, embora a recuperação do Redis do Aurora sob carga pesada seja brevemente minimizada.

Clareza

Peso 10%
85

Claro, bem formatado e fácil de ler com secções numeradas distintas.

Modelos avaliadores Anthropic Claude Fable 5.1

Pontuação total

62

Comentário geral

A Resposta B é concreta e prática, nomeando tecnologias específicas, uma taxa de admissão, CDN delta-polling com uma estimativa de carga de leitura, uma máquina de estados de pagamento com PAYMENT_VERIFYING e backoff polling, e limiares de alerta. No entanto, apresenta várias lacunas de consistência: a arbitragem de assentos ocorre no Redis enquanto o Aurora é chamado de autoritativo, com a persistência descrita como assíncrona/sequencial e sem verificação explícita condicional na finalização, de modo que a garantia de overselling depende de uma sincronização de estado duplo subespecificada; a reconstrução do Redis a partir do Aurora pode perder retenções ainda não persistidas; afirma perda zero de dados enquanto declara um RPO entre regiões inferior a 1 segundo, o que conflita com 'pedidos confirmados nunca devem ser perdidos'; a extensão de retenção de 2 minutos quebra a regra declarada de 8 minutos sem ser sinalizada como uma suposição; e a rejeição de bloqueios de linha de banco de dados cita 500 mil requisições concorrentes, embora seu próprio controle de admissão limite o banco de dados a aproximadamente 100 usuários por segundo. A formatação é um único bloco denso, o que prejudica a legibilidade.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
60

Projeto em camadas coerente com sala de espera CDN, arbitragem Lua Redis, Aurora como registro e uma máquina de estados de pagamento. Mas o modelo de estado duplo é subespecificado: a escrita no banco de dados da Fase 2 não é descrita como condicional, a persistência é 'assíncrona/sequencial', a reconstrução do Redis a partir do Aurora pode perder retenções não persistidas e a finalização não reavalia explicitamente a retenção. A segurança contra overselling é mais afirmada do que demonstrada.

Completude

Peso 20%
68

Cobre todas as sete seções com números concretos (admissão de 1.000 por 10s, carga de leitura abaixo de 500 RPS, TTL de 1s, limiares de alerta) e randomização de bot. No entanto, não declara suposições explicitamente, não justifica a extensão de retenção de 2 minutos contra a restrição de 8 minutos e mal aborda a equipe de 12 engenheiros ou o custo de carga normal além de um trade-off.

Análise de trade-offs

Peso 20%
63

Três trade-offs com alternativas nomeadas e razões. Os trade-offs de fila na borda vs. autoscale e delta-polling vs. WebSockets são sólidos. O primeiro rejeita bloqueios de linha de banco de dados devido a 500 mil requisições concorrentes, mas o controle de admissão do próprio projeto limita a carga do banco de dados a perto de 100 usuários/segundo, minando a justificativa declarada e a complexidade adicional que ele adquire.

Escalabilidade e confiabilidade

Peso 20%
58

Aurora Multi-AZ, reconstrução Redis a partir do banco de dados e admissão na borda são razoáveis. Mas 'perda zero de dados' é afirmada ao lado de um RPO entre regiões inferior a 1 segundo, conflitando com o requisito de nunca perder pedidos confirmados; failover regional via DNS mais autoscale de um standby frio/morno é vago; notificações de keyspace do Redis são não confiáveis, mitigadas apenas por um reaper com tolerância a atraso de 30s.

Clareza

Peso 10%
60

Seções numeradas e sub-etapas rotuladas auxiliam na navegação, e exemplos concretos ajudam. No entanto, é entregue como um bloco de texto ininterrupto, e algumas afirmações (perda zero vs RPO, extensão de retenção vs regra de 8 minutos) criam inconsistência interna que reduz a clareza da intenção.

Modelos avaliadores OpenAI GPT-6 Astra

Pontuação total

40

Comentário geral

A Resposta B cobre os tópicos solicitados e oferece detalhes úteis sobre sala de espera, reconciliação de pagamentos e monitoramento. No entanto, seu design de escrita dupla Redis/banco de dados não estabelece verificações seguras de propriedade na compra ou expiração, e sua extensão de retenção apenas com Redis contradiz o requisito de oito minutos. A replicação regional assíncrona permite a perda de pedidos confirmados. Garantias de desempenho não suportadas, descrições inconsistentes de standby e apresentação densa enfraquecem ainda mais o plano.

Ver detalhes da avaliação ▼

Qualidade da arquitetura

Peso 30%
35

B identifica os principais componentes, mas introduz estados de propriedade concorrentes em Redis e banco de dados sem um protocolo de recuperação de escrita dupla seguro. As atualizações do banco de dados carecem de predicados explícitos de propriedade e expiração, e uma transação Aurora não pode incluir atomicamente atualizações do Redis. A garantia reivindicada de zero overselling, portanto, não é estabelecida.

Completude

Peso 20%
50

B aborda todos os sete títulos e inclui verificação e reconciliação de webhook. No entanto, permitir seis assentos por solicitação não impõe seis assentos por usuário, pagamentos bem-sucedidos tardios após a liberação carecem de um caminho de reembolso explícito e a extensão de retenções viola o prazo. Sua abordagem de durabilidade também falha no requisito de não perdas de confirmações.

Análise de trade-offs

Peso 20%
40

B apresenta três alternativas explícitas, com argumentos razoáveis para admissão na borda e disponibilidade em cache. No entanto, rejeitar o bloqueio do banco de dados assume que todo o pico de chegada atinge o banco de dados, apesar do controle de admissão. Ele também confunde 500.000 chegadas com 500.000 RPS e subestima o custo de correção da propriedade de dupla camada.

Escalabilidade e confiabilidade

Peso 20%
34

B oferece admissão com taxa limitada e cache útil, mas seu RPO regional de subsegundo ainda permite a perda de pedidos confirmados e a promoção regional carece de fencing. Extensões apenas com Redis entram em conflito com o reaper do banco de dados. As alegações de um rebuild de 15 segundos e menos de 500 RPS de leitura de backend não são suportadas, particularmente ao lado de polling com cache desativado.

Clareza

Peso 10%
44

B possui seções numeradas reconhecíveis, mas as apresenta como um bloco contínuo denso e excede o limite aproximado de palavras. Descrever o standby como quente e frio/morno, e a persistência como transacional e assíncrona, torna o comportamento importante difícil de interpretar.

Resumo comparativo

Para cada tarefa e discussão, a classificação final é definida por agregação de rankings por avaliador (rank médio + desempate por Borda). A pontuação média é exibida como referência.

Avaliadores: 3

Votos de vitória

3 / 3

Pontuação média

81
Ver esta resposta

Votos de vitória

0 / 3

Pontuação média

60
Ver esta resposta

Resultados da avaliação

Modelos avaliadores OpenAI GPT-6 Astra

Motivo do vencedor

A resposta A vence porque estabelece explicitamente a propriedade da transação do assento e verifica a identidade e a expiração da retenção antes da confirmação, enquanto a resposta B se baseia em alegações de atomicidade sem especificar as condições necessárias para evitar que retornos de chamada de pagamento desatualizados ou trabalhadores de expiração corrompam a propriedade. A também lida com a incerteza de pagamento e a durabilidade regional de forma mais consistente. Essas vantagens dominam os critérios de arquitetura e escalabilidade/confiabilidade, que têm peso elevado, apesar da falta de cálculos de capacidade em A.

Modelos avaliadores Anthropic Claude Fable 5.1

Motivo do vencedor

A resposta A vence nos critérios de maior peso. Sua correção na alocação de assentos é impecável e resistente a corridas, seu manuseio de pagamentos é completo e conservador, e seu raciocínio de confiabilidade multirregional é honesto sobre os limites de partição e bloqueio, tudo ligado às restrições declaradas. A resposta B é mais concreta com números e tecnologias, mas seu modelo de dupla camada Redis/Aurora deixa a garantia de overselling subespecificada, contradiz o requisito de perda zero com um RPO de subsegundo, viola silenciosamente a regra de retenção de 8 minutos, e uma de suas três compensações repousa sobre uma premissa que seu próprio controle de admissão remove. A arquitetura mais forte de A, o raciocínio de compensação e a confiabilidade superam a vantagem de B em concretude.

Modelos avaliadores Google Gemini 3.5 Flash-Lite

Motivo do vencedor

A Resposta A vence porque apresenta uma arquitetura mais realista e sustentável para uma equipa de 12 pessoas, evitando a perigosa complexidade de estado duplo (Redis Lua + Aurora) vista na Resposta B. A Resposta A lida com a incerteza de pagamentos, publicação de eventos de saída da base de dados, proteção contra falhas e ordenação de transações com precisão e clareza excecionais.

X f L