Design clássico · Staff
Carteira digital (com paralelo com o Pix)
Projeto de entrevista clássico. Pontos centrais: ledger e conciliação.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: ledger e conciliação. No relato do Square, disparar uma liquidação bancária exigia calcular o saldo do comerciante, o que significava uma agregação group-by cara por comerciante. Além disso, por ser apenas um banco SQL, nada impedia que os pagamentos ficassem inconsistentes.
01 · CONTEXTO
Do saldo agregado ao razão
No relato do Square, disparar uma liquidação bancária exigia calcular o saldo do comerciante, o que significava uma agregação group-by cara por comerciante. Além disso, por ser apenas um banco SQL, nada impedia que os pagamentos ficassem inconsistentes.
O Stripe, por sua vez, construiu o Ledger, um log imutável e auditável, como sistema de registro de seus dados financeiros.
02 · PARTIDAS DOBRADAS
Lançamentos que fecham em zero
A contabilidade de partidas dobradas obriga a declarar não só qual mudança de estado financeiro ocorreu, mas também por quê. Pela equação contábil usada pelo Square, cada transação, chamada de lançamento (journal entry), precisa fechar em zero: cada centavo perdido é compensado por um centavo ganho.
O requisito declarado é de consistência: não deve ser possível transacionar com o banco de um modo que resulte numa transação financeira ilógica.
| Tabela do Square Books | Papel |
|---|---|
| books | Uma linha por livro; guarda um saldo e pode ter tipo, dono e identificador único. |
| journal_entries | Uma linha é adicionada cada vez que os livros mudam de valor numa transação contábil. |
| book_entries | Cada linha tem chaves estrangeiras para um lançamento e para um livro e guarda um débito (+) ou um crédito (-). |
Cada livro guarda um saldo que resume as mudanças daquele livro. No exemplo do Square, o cálculo de quanto pagar a um comerciante é uma única linha no banco e dispensa agrupamento ou agregação complexos.
O diagrama começa no aplicativo da carteira, ligado ao serviço de carteira.
O diagrama destaca o serviço e o armazenamento de lançamentos: cada lançamento declara o que mudou e por quê, e uma linha é adicionada cada vez que os livros mudam de valor.
Os lançamentos e as entradas de débito e crédito só recebem inserções.
O livro guarda um saldo que resume as mudanças dele, e esse saldo atual é atualizado a cada operação.
03 · IMUTABILIDADE
Corrigir sem apagar
No Square, os conjuntos de lançamentos e de entradas de livro são efetivamente append-only e imutáveis depois de gravados.
No Stripe, o Ledger é, no núcleo, um log imutável de eventos. Transações já publicadas não podem ser apagadas nem modificadas, e o estado passado pode ser reconstruído processando os eventos até aquele ponto.
Diante de um erro, o Square não atualiza o dado: grava um novo lançamento que corrige o anterior. O saldo do livro é ajustado, mas sempre resta um rastro do que aconteceu no sistema.
| Aspecto | Square Books | Stripe Ledger |
|---|---|---|
| Dado já gravado | Efetivamente append-only e imutável depois de gravado. | Transações publicadas não podem ser apagadas nem modificadas. |
| Correção de erro | Grava um novo lançamento que corrige o anterior. | Reverte e reprocessa operações anteriores. |
04 · CONCILIAÇÃO
Verificar que os saldos fecham
O Stripe representa os sistemas produtores como máquinas de estado e descreve o comportamento deles como um fluxo lógico de fundos, o movimento de saldos (eventos) entre contas (estados). O Ledger se baseia em partidas dobradas, método padrão para garantir que todo o dinheiro de um sistema está contabilizado ao equilibrar créditos e débitos.
O diagrama mostra um serviço produtor com seu banco e o ledger de eventos.
Os sistemas produtores são modelados como máquinas de estado, e o Ledger descreve o comportamento deles como fluxo de fundos.
A métrica de clearing mede a fração do ledger que está zerada como deveria em regime estável.
A verificação de completude garante que todo ID no banco do produtor tem um evento correspondente no ledger.
Na pontualidade, mede-se a diferença entre a entrada do dado na plataforma e a chegada ao ledger.
O Ledger depende de alertas proativos para trazer à tona problemas e soluções propostas.
| Métrica do Stripe | Pergunta que responde |
|---|---|
| Clearing | O fluxo de fundos completou corretamente? |
| Timeliness | Os dados chegaram a tempo? |
| Completeness | Temos uma representação completa do sistema de dados subjacente? |
Se o evento de liberação nunca é publicado ou tem id errado, o Ledger não compensa o saldo da conta associada. Mesmo com bilhões de transações, uma única transação ausente, atrasada ou incorreta cria de imediato um problema de exatidão detectável por uma consulta simples.
05 · ESCALA E ENTREVISTA
Armazenamento e escala do razão
O Square relata esforço considerável num esquema de sharding do banco SQL e conta que precisou lidar com transações entre shards, em que dois comerciantes podiam trocar valor.
Para o Books, o Square escolheu o Google Cloud Spanner, um banco SQL totalmente gerenciado e distribuído globalmente, que o dispensou de se preocupar com sharding e com o ônus de manter um banco.
Perguntas frequentes
O que é Carteira digital (com paralelo com o Pix)?
Projeto de entrevista clássico. Pontos centrais: ledger e conciliação.
O que o design de Carteira digital (com paralelo com o Pix) cobre?
Ele está organizado nestas seções: Do saldo agregado ao razão, Lançamentos que fecham em zero, Corrigir sem apagar, Verificar que os saldos fecham e Armazenamento e escala do razão.
Quanto tempo leva Carteira digital (com paralelo com o Pix) e qual é o nível?
Leva cerca de 17 minutos para ler e tem nível Staff.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.