Devlog #7 · Persistência
Até aqui, o mundo existia só na memória. Um restart apagava tudo. Essa fase mudou isso.
Persistência em MMO tem uma regra simples: memória é falível, banco de dados é a verdade. Tudo que importa tem uma linha em Postgres. Redis é cache — útil, rápido, mas nunca o dono da verdade. Se o Redis perder dados, o sistema reconstrói a partir do Postgres.
Arquitetura de save
O servidor salva estado de mundo periodicamente como snapshot comprimido. Off-tick: um canal alimenta uma task assíncrona que drena para o Postgres. O tick nunca bloqueia em I/O de banco.
Schema versionado com migrations. Toda mudança na estrutura de dados passa por uma migration aplicada em ordem — sem SQL manual em produção, sem schema que diverge entre ambientes.
O teste que prova a continuidade
O gate mais importante dessa fase: soak de 1h com 100k entidades, restart forçado na metade, reload do snapshot, continuação sem perda de entidade. Zero delta.
Para um MMO, o mundo não pode desaparecer quando o servidor reinicia. Esse teste prova que não desaparece.
Bench / validação
— Soak: 1h / 100k entidades / restart no meio / recuperação completa / zero perda
— Restore de 100k entidades após restart: < 10 s
— Save de snapshot: < 1 s para 100k entidades
— Load a partir do Postgres frio: < 2 s
— Redis p99: < 1 ms (operações de cache)
— Postgres query p99: < 5 ms (loopback)
— RSS após segundo trecho do soak: +3.6% (dentro do limite de 10%)
Próximo: auth server — a porta de entrada do jogador.