Pular para o conteúdo

Conceitos

Operações tentativas e reservas

Intuição

Pense em reservar uma mesa num restaurante: o restaurante separa a mesa para você sem saber se você vai aparecer, e você mantém o direito de desistir. Enquanto isso, os dois lados convivem com uma incerteza combinada, até que a reserva seja confirmada ou cancelada. Ninguém precisa travar o restaurante inteiro, nem os dois lados decidirem tudo no mesmo instante, para que o combinado funcione.

Como funciona

O paper de Helland parte de uma abstração chamada entidade: uma coleção de dados com chave única, dentro de um único escopo de serializabilidade (uma máquina ou um pequeno cluster). Dentro de uma entidade é possível fazer transações atômicas; entre entidades, não, porque a camada de baixo pode colocá-las em máquinas diferentes e movê-las ao reparticionar. A ligação entre entidades é então uma mensagem, entregue pelo menos uma vez, o que obriga a aplicação a processar tudo de forma idempotente. Sem atomicidade entre entidades, chegar a um acordo implica aceitar incerteza por um tempo, e é aí que entra a operação tentativa: uma entidade pede à outra, por mensagem, que assuma um compromisso que deixa aberta a possibilidade de cancelamento. Quem aceita concorda em deixar o solicitante decidir o resultado; se o solicitante libera o direito de cancelar ocorre uma confirmação, e se desiste ocorre um cancelamento, de modo que toda operação tentativa eventualmente confirma ou cancela. Cada entidade registra esse estado por parceiro numa atividade, por exemplo uma atividade por pedido dentro de cada item de um armazém. Em transações distribuídas essa incerteza aparece como locks do gerenciador de transações; aqui ela passa para a semântica do negócio, e o autor a resume como workflow de granularidade fina com entidades como participantes.

Na prática

No exemplo do paper, o armazém aloca estoque para um pedido sem saber se ele será usado e só depois descobre se é necessário; o autor indica que a incerteza vira conceitos de negócio como estoque reservado ou alocação contra linha de crédito. Escolher esse desenho faz sentido quando a escala obriga a abrir mão de transações distribuídas: cada entidade continua com transações locais, e a coordenação entre elas vira reserva, confirmação ou cancelamento. O custo é que a aplicação precisa modelar o estado intermediário e tolerar mensagens repetidas.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.