Conexão · Interrompida

Algo não carregou

Parte desta página não chegou até você. Recarregue para tentar novamente — se persistir, verifique sua conexão.

Pular para o conteúdo principal
Escritos · № 03

Todos posts

Notas longas sobre software, sistemas distribuídos e a arte de construir. Publicando uma por semana.

Todos os Posts
25 posts
Distributed Systems01

Convergência É uma Propriedade da Sua Função de Merge, Não da Rede

Uma vez vi uma tarde inteira de edições offline desaparecer sob um sync last-writer-wins, e a correção não foi uma rede melhor — foi uma função de merge melhor. Estas são minhas notas sobre por que réplicas CRDT convergem: um merge que é comutativo, associativo e idempotente. Reconstruo um OR-Set add-wins mínimo em TypeScript, executo o código e avalio o que a garantia custa em tombstones e memória.

14 de jun.
Engineering02

Kotlin 2.4: As Três Mudanças que Moveram Minha Mão no Teclado

O Kotlin 2.4.0 chegou com um changelog extenso, mas apenas três recursos mudaram a forma como eu realmente digito: context parameters estáveis, explicit backing fields e (ainda atrás de uma flag) name-based destructuring. Este é o meu recorte de engenheiro backend, verificado contra o compilador 2.4.0, mais a remoção do K1 que tive que colocar no calendário.

8 de jun.
Backend03

Capturando uma Race Condition de Retry com Uma Seed: Simulação Determinística em Rust usando turmoil

Eu tinha três testes de retry flaky que ninguém conseguia reproduzir em um laptop. Reescrevi um deles em Rust em cima do turmoil, o simulador determinístico do Tokio, e uma única seed de 8 bytes fixou a race condition de partição byte por byte. Estas são minhas anotações sobre o que a seed realmente controla, o que escapa dela e quando o teste de simulação determinística vale a pena.

4 de jun.
AI04

Lendo AG-UI como um protocolo de fio, não um framework

Eu ficava reconstruindo o mesmo envelope SSE toda vez que escrevia uma UI de agente. AG-UI é a primeira tentativa séria que vi de padronizar esse envelope. Neste post eu desnudo o protocolo até seu formato de fio e reconstruo um endpoint mínimo em Spring WebFlux que fala o protocolo sem um SDK.

2 de jun.
Distributed Systems05

Two-Phase Commit na JVM: O Problema de Bloqueio Que Ninguém Coloca no Diagrama

Eu derrubei de propósito um coordenador de Two-Phase Commit em uma pequena simulação Kotlin para medir por quanto tempo os participantes ficam travados quando o coordenador desaparece entre as fases. O resultado é a parte do 2PC que os diagramas nunca mostram — e a razão pela qual eu modelaria a maior parte das escritas cross-service como uma saga em vez disso.

30 de mai.
Distributed Systems06

Descarte Primeiro as Requisições Certas: Load Shedding Baseado em Prioridade sob Sobrecarga

Limites estáticos de RPS descartam o tráfego errado. Concorrência é o que satura um serviço, não a taxa de requisições. A partir das minhas anotações após ler o artigo do InfoQ sobre proteção contra sobrecarga, o post de janeiro da Uber sobre o Cinnamon e a palestra da Netflix no QCon SF sobre load shedding priorizado em nível de serviço, eis por que latência é o sinal de controle correto — e como uma pequena taxonomia de prioridades aliada a um limite adaptativo de concorrência mantém o tráfego mais barato sendo descartado primeiro.

28 de mai.
Distributed Systems07

Actor-per-Entity vs Bloqueio Otimista no Postgres: Um Comparativo em Reserva de Assentos

Executei a mesma carga de trabalho de reserva de assentos com hot key de duas formas: Postgres com coluna de versão e retries, e um único actor por assento. O design com actor não escalou melhor — ele moveu o problema difícil do controle de concorrência para a corretude de roteamento e rebalanceamento, e essa troca foi a mais fácil de raciocinar sob hot keys.

26 de mai.
Distributed Systems08

Auditando um serviço Scala contra as quatro restrições regenerativas de Chad Fowler

Levei um serviço Scala de processamento de pedidos das minhas anotações pelas quatro restrições regenerativas de Chad Fowler. Duas passaram de graça, duas forçariam um redesign de verdade. Aqui está o que aprendi sobre onde "módulo fracamente acoplado" termina e "componente regenerativo" começa, e quais partes do redesign eu de fato pagaria.

23 de mai.
Research09

Pré-registrando o Experimento #1: Quão Frágeis São os Prompts de Extração de JSON em Produção?

O primeiro experimento concreto da linha de pesquisa de precisão — comprometido em público antes da coleta dos dados. Cinco classes de perturbação, quinze variantes, quatro métricas, quatro hipóteses falsificáveis e um repositório companion executável com testes.

21 de mai.
Backend10

Execução Durável Não É Sobre Agentes — É Sobre Workflows de Backend com Replay

Cheguei aos runtimes de execução durável pela hype dos agentes, mas a restrição que surpreende todo mundo é o determinismo no replay. Estas são minhas anotações trabalhando uma reconciliação de pagamentos de seis passos como um workflow do Restate em TypeScript — a linha que quebrou o replay, o modelo mental que consertou, e os trade-offs que vêm com o padrão.

19 de mai.