Catálogo de Concorrência
Cenários Canônicos & Mitigações
Explore 10 cenários de falhas de concorrência baseados em pesquisas acadêmicas de isolamento e casos reais de sistemas financeiros e distribuídos.
Informação Circular em Arbitragem Cripto
Loop de arbitragem cross-exchange observa arestas de dependência cíclicas, levando à execução de lucros fantasmas.
Loop de arbitragem cross-exchange observa arestas de dependência cíclicas, levando à execução de lucros fantasmas.
Schema e dados iniciais
-- Schema
CREATE TABLE orderbooks (
id INT PRIMARY KEY,
exchange TEXT NOT NULL,
pair TEXT NOT NULL,
ask_price INT NOT NULL,
version INT NOT NULL
);
-- Seed
INSERT INTO orderbooks VALUES (1, 'Binance', 'BTC/USDT', 64000, 1), (2, 'Coinbase', 'BTC/USDT', 64200, 1);Carga concorrente (chaos.yaml)
version: "1.0"
name: "crypto_arbitrage_circular"
operations:
- name: "arb_bot_1"
steps:
- "SELECT ask_price FROM orderbooks WHERE id = 1 -> p1"
- "UPDATE orderbooks SET ask_price = {p1 + 50}, version = version + 1 WHERE id = 2"
- name: "arb_bot_2"
steps:
- "SELECT ask_price FROM orderbooks WHERE id = 2 -> p2"
- "UPDATE orderbooks SET ask_price = {p2 - 50}, version = version + 1 WHERE id = 1"
invariants:
- name: "monotonic_versioning"
query: "SELECT sum(version) AS total_ver FROM orderbooks;"
assert: "total_ver <= 100"Por que a invariante quebra
O Bot 1 lê o preço da Binance e altera a Coinbase. Concorrentemente, o Bot 2 lê o preço da Coinbase e altera a Binance. O fluxo circular de informação cria um ciclo G1c violando a ordem causal.
T1 ──(wr)──► T2 ──(wr)──► T1Delta debugging reduz 30 operações às 2 que causam a falha.
Correção em produção
Optimistic Concurrency Control (OCC) com Versionamento ou Oráculo Serializado
A anomalia G1c demonstra fluxos cíclicos de leitura-escrita entre pares distribuídos. Para assegurar linearizabilidade global e evitar cálculos baseados em spreads defasados, emprega-se OCC com número de versão atômico ou bloqueio explícito FOR UPDATE em ordem canônica das chaves primárias dos livros antes da validação e execução da ordem de arbitragem.
PostgreSQL, MySQL (InnoDB), CockroachDB
-- Controle Otimista de Concorrência (OCC) com Versionamento Monotônico
BEGIN;
SELECT id, ask_price, version FROM orderbooks WHERE id IN (1, 2) FOR UPDATE;
-- Validar spread de lucro e atualizar com incremento estrito:
UPDATE orderbooks
SET ask_price = :novo_preco, version = version + 1
WHERE id = :exchange_id AND version = :versao_esperada;
COMMIT;