ChaosSQL

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.

G1c

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.sql & seed.sql
-- 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)

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)──► T1

Delta 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

PostgreSQL, MySQL (InnoDB), CockroachDB

remediation_fix.sql
-- 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;