Pular para o conteúdo

apps/architecture/actor-model

046 · Arquiteturas de Alto Nível (Macro-Architecture) · ≈ 6 min de estudo

Actor Model

Cada entidade de negócio é um ator com uma caixa de mensagens processada uma de cada vez. Operações concorrentes sobre a mesma entidade nunca se sobrepõem — sem lock nem semáforo — e entidades diferentes seguem em paralelo. É como Akka e Erlang/OTP serializam acesso a estado compartilhado.

passos
6
arquivos
5
teste
1
tecnologias
3
Lógica puraTypeScriptBunElysia
Baixar cartão

Cenário

Uma conta corrente recebe cinco débitos de R$ 100,00 ao mesmo tempo. O ledger lê o saldo, espera o round trip do banco e grava o novo valor. Sem serialização, os cinco leem R$ 1.000,00 e o saldo final fica R$ 900,00 — quatro débitos que o cliente fez nunca foram descontados. Com um ator por conta, os cinco passam um de cada vez e o saldo termina em R$ 500,00.

Planta

Fluxo
7/7
Débito 1Registro: umator por contaDébito 2Débito 3Mailbox CC-2002Mailbox CC-3003Ledger HTTP: lê,espera, gravauma mensagem por vezem paralelo coma outra conta
7

7 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Atores isolados trocam mensagens assíncronas.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    AbstractActor guarda uma fila de mensagens e um único laço drain() que executa uma mensagem até o fim antes da próxima

  2. 02

    ActorAccount passa todo débito pela fila: o próximo débito lê o que o anterior gravou

  3. 03

    O registro devolve sempre o mesmo ator para a mesma conta — dois atores para a mesma conta quebrariam a serialização

  4. 04

    Contas diferentes têm atores diferentes e rodam em paralelo; a serialização é por entidade, não global

  5. 05

    Com a ordem garantida, a checagem de saldo do ledger fica exata: o débito que não cabe é recusado, não vira saldo negativo

  6. 06

    Mensagem que falha rejeita só o próprio chamador; a fila continua

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Sem lock nem deadlock

  • Operação inteira serializada, não só a linha

  • Contas diferentes em paralelo

Custos

  • Mensagem lenta atrasa a fila daquela conta

  • Serialização vale dentro de um processo; entre réplicas, roteie a conta para o mesmo nó

  • Estado do ator não sobrevive a reinício sem persistência

apps/architecture/actor-model

5 arquivos

src/

  • actor_abstract.tsMailbox e laço de drenagem sequencial
  • actor_account.tsAtor da conta e registro de um ator por identidade
  • api_ledger.tsLedger HTTP com a janela entre ler e gravar o saldo
  • demo.tsdemoCinco débitos concorrentes sem e com ator
  • actor_account.test.tstesteUpdate perdido, débitos serializados, recusa exata, paralelismo por conta e falha isolada

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário
  3. bun run test# testes unitários
Requisitos
Bun

Por que se relacionam

Teste rápido

Qual destes combina com Actor Model?

Próximo projeto · Arquiteturas de Alto Nível (Macro-Architecture)Cell-Based Architecture
Esc

↑ ↓ navegarEnter abrir191 resultados