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
42 posts
Engineering01

Backpressure é um contrato que todo chamador precisa honrar, não uma configuração

Uma fila limitada em um serviço não faz nada se o chamador acima dele continuar empurrando. Estas são minhas notas sobre backpressure como um contrato ponta a ponta: o que o chamado deve, o que todo chamador deve de volta, e por que o incidente de amplificação de retries do Azure OpenAI é a cara de uma cláusula quebrada em hiperescala.

12 de ago.
Distributed Systems02

Quando uma Zona Cai, Não Deixe seu Cluster se Rebalancear até a Morte

Uma zona de disponibilidade cai e o cluster sobrevive à indisponibilidade — e então se machuca tentando se curar. Estas são minhas anotações da leitura do artigo da Uber sobre OpenSearch resiliente a zonas confrontado com a documentação de allocation awareness: por que o reflexo de re-replicação é o verdadeiro perigo, e como declarar todos os domínios de falha antecipadamente faz um cluster degradar para um amarelo estável em vez de uma tempestade de rebalanceamento.

9 de ago.
Engineering03

O Bug Que Não Compilou: Portando um Erro de Reordenação para o Hydro

Plantei um bug de ordem de chegada em uma agregação fan-in escrita à mão em Rust, reproduzi uma subcontagem de 51% com um shuffle com semente e então portei a mesma lógica para o Hydro 0.17-alpha. O merge não ordenado se recusou a compilar meu fold não comutativo — estas são minhas anotações sobre o que essa garantia é, o que o manual_proof! apenas atesta e quando vale a pena pagar os custos de emenda.

5 de ago.
Engineering04

Arquitetura como Código com Structurizr DSL: Um Workspace C4 que Tanto o Revisor Quanto o Agente Conseguem Ler

Comitei um workspace Structurizr DSL ao lado de um serviço de billing em Kotlin/Spring e plugei o ArchUnit no Gradle, de modo que o CI quebra no instante em que o código diverge do desenho C4. Aqui está o workspace.dsl, o teste que o sustenta e o que mudou quando um agente de código passou a ler os dois arquivos em vez de adivinhar a partir dos pacotes.

2 de ago.
Databases05

As Três Fases de Movimentação de Dados Online, Lidas Como Três Invariantes

Todo diagrama de migração online que vi se parece com o mesmo — três setas entre duas caixas — e pula a parte que importa: para que cada fase realmente serve. Estas são minhas anotações depois de reler os escritos da Stripe sobre DocDB junto com a documentação de cutover do gh-ost e do Vitess, destilados em três invariantes que posso plotar em gráficos e usar como portões de decisão.

29 de jul.
Engineering06

Engenharia Antes da Inferência: A Pergunta Que a Zero Token Architecture Está Realmente Fazendo

Ultimamente eu venho ouvindo uma frase que teria sido absurda três anos atrás: "não consigo fazer agora — fiquei sem tokens". Estas são minhas anotações depois de investigar a Zero Token Architecture — a ideia que Kelsey Hightower levou de um post descartável a uma keynote na PlatformCon — e o princípio que quero construir em cima dela: toda chamada de IA é uma decisão de arquitetura, e os custos que mais importam nunca foram os tokens.

26 de jul.
Distributed Systems07

Read-Your-Writes é um Contrato de Sessão, Não uma Configuração de Banco

Adicionei uma réplica de leitura e, em um dia, usuários reportaram edições que "não salvaram" — elas tinham salvado, mas as leituras correram contra o stream de replicação e perderam. Estas são minhas notas sobre por que read-your-writes é um contrato de sessão em vez de uma configuração de réplica, reproduzido com 50 ms de lag fixo em Go, e as três formas de carregá-lo — roteamento sticky, um token de versão estilo GTID e uma espera de bounded-staleness — comparadas em custo.

22 de jul.
Engineering08

Quando o SQL Basta para Streaming: O Que a Manutenção Incremental de Visões Garante — e O Que Ela Recusa

A promessa de 2026 é que um job de stream escrito à mão se resume a um único CREATE MATERIALIZED VIEW, então construí um no RisingWave e passei meu tempo de estudo tentando quebrá-lo. Estas são minhas anotações sobre a consistência que a visão realmente entrega conforme os eventos chegam, por que cada join nela é uma conta de memória permanente, e as queries que se recusam a ser incrementais — com um consumidor Node acompanhando o changefeed da visão sobre o protocolo puro do Postgres.

19 de jul.
Engineering09

Java 26 Chegou: Os Recursos para Acompanhar Antes do LTS do Java 29

A maioria das equipes de backend roda apenas as linhas LTS, então o Java 26 parece dispensável. Não é — é o preview mais claro do que o LTS do Java 29 vai conter. Estas são minhas anotações sobre o que já está finalizado (cache de objetos AOT com ZGC, um G1 mais rápido, HTTP/3), o único preview pelo qual eu reescreveria código (Lazy Constants, com um exemplo executável) e a mudança de integridade que vai quebrar builds.

15 de jul.
Engineering10

A Zona de Transição: O Backend Está Se Tornando Software Que Dorme

Vi o estado quebrar o monólito, depois os microsserviços, depois o serverless — e passei meses lendo os changelogs que me convenceram de que a terceira quebra acabou de ser resolvida. Estas são minhas anotações sobre a convergência de 2024–2026 entre compute efêmero e estado durável, por que o modelo de cobrança é o indício revelador, e o experimento A/B com o qual este post me compromete: reconstruir sobre o novo substrato um problema que já resolvi em Spring Boot, com os números publicados de qualquer forma.

12 de jul.