O briefing e as restrições

Prévia grátis 6 min de leitura

Uma mensagem do CTO chega numa terça-feira: "A Atlas Field é global agora. Desenhe uma arquitetura global para nós."

Essa frase não tem resposta. Ela não é difícil demais; ela é aberta demais, de um jeito que torna qualquer resposta igualmente defensável. Um service mesh em três regiões responde a ela. Um Postgres em Frankfurt com uma CDN na frente também responde. As duas são respostas corretas para uma pergunta que não restringe nada.

O primeiro movimento de sênior é voltar e perguntar até a pergunta ter bordas, antes de desenhar qualquer coisa.

O que é uma restrição

Uma restrição é uma afirmação que torna ilegal pelo menos um desenho que, sem ela, seria razoável. "Queremos que seja rápido" não é restrição, porque não elimina desenho nenhum. "Usuários na Austrália precisam ver a lista de serviços agendados em menos de 400 ms no percentil 95" é uma restrição. Ela torna um deploy numa região só, em Frankfurt, aritmeticamente impossível para certos tamanhos de payload e trivial para outros. A conta é a mesma que o curso de nível Sênior "Futuro: edge database" já fez você fazer.

Uma restrição tem um número, um dono e uma consequência caso ela seja violada. Se você não consegue nomear os três, o que você tem é uma preferência, e não uma restrição.

O briefing, depois de quatro dias perguntando

A Atlas Field é uma aplicação Rails para agendar técnicos de campo. Ela começou com um cliente em São Paulo. Hoje tem clientes pagantes no Brasil, na Alemanha e na Austrália. O time de engenharia tem seis pessoas. Uma fica de plantão por vez, e essa mesma pessoa entrega funcionalidades naquela semana.

Foi isto que as perguntas produziram.

Os usuários e o formato vêm primeiro. São cerca de 40.000 usuários ativos por dia. O pico é regional e escalonado: a janela de despacho da manhã de cada região é um pico próprio, e as três janelas não se sobrepõem. A carga é dominada por leitura, porque os técnicos abrem a mesma agenda várias vezes por dia e raramente a alteram.

Depois vem a reclamação de latência. Ela veio da Austrália, e era específica: "a lista de agendamentos demora uns dois segundos para aparecer." Não veio da Alemanha, embora a Alemanha também esteja longe de São Paulo: cerca de 9.800 km, contra os 13.350 da Austrália. A distância sozinha não explica uma diferença tão grande, e a lição 2 se dedica ao porquê.

Depois vem a obrigação de residência. O contrato alemão traz uma cláusula: dados pessoais de titulares na UE são armazenados e processados dentro da UE. Isso é uma cláusula contratual antes de ser um assunto de GDPR, que o curso de nível Sênior "Conformidade: GDPR a fundo" cobre. A diferença importa, porque um argumento jurídico não cumpre uma cláusula contratual. Uma linha guardada num banco específico cumpre.

Depois vem o dinheiro. O gasto com infraestrutura precisa ficar abaixo de US$ 4.000 por mês, tudo incluído, até backups e observabilidade. O curso de nível Sênior "Operações: otimização de custos" deu a você o hábito de pôr preço num desenho. Aqui o teto vem primeiro, e o desenho precisa caber nele.

Por último vem o time: seis engenheiros, um de plantão, e ninguém que já tenha operado um banco multirregião. Isso é uma restrição no sentido estrito, porque elimina desenhos. Uma topologia que exige alguém raciocinando sobre split-brain às 3 da manhã não está disponível para esse time, por mais correta que seja.

Por que o tamanho do time é uma restrição, e não uma desculpa

É tentador tratar o tamanho do time como uma entrada flexível, algo que se contorna com ferramentas melhores ou mais disciplina. O curso de nível Sênior "Design org: team topologies" dá a versão mais afiada. Um time só consegue ser dono do que cabe na cabeça dele durante um incidente, e um time de seis pessoas só segura poucas peças móveis independentes.

A superfície operacional é o que você está gastando. Cada região, cada réplica, cada backend de fila e cada camada de proxy é mais uma coisa que pode ser a causa. O custo de um componente não é a fatura mensal dele. É a fatura mais o tempo que ele acrescenta a todo diagnóstico futuro.

Uma superfície pequena, neste repositório

A aplicação em que você está lendo isto fica na ponta baixa desse espectro. Vale olhar para ela antes de desenhar algo maior, porque ela mostra como é o piso.

Ela faz deploy com Kamal, com o Postgres rodando ao lado da aplicação. A configuração de produção define SOLID_QUEUE_IN_PUMA: "true", com o comentário "No separate job container: run Solid Queue inside Puma." Em config/environments/production.rb, o cache store é :solid_cache_store e o adapter do Active Job é :solid_queue.

Essa é quase toda a superfície operacional: uma aplicação, um Postgres e um modelo de processo. Nada disso é modelo para a Atlas Field, que tem obrigações que esta aplicação não tem. É um ponto de referência para quanto custa um componente quando você acrescenta um, e é por isso que existe o curso de nível Sênior "Estratégia Solid Stack".

Como atravessar este curso

Cada lição avança o mesmo desenho. Não há desafio de código neste projeto final, pela mesma razão que o curso de nível Júnior "Projeto: Task Tracker Pro" não tinha: um projeto final é algo que você constrói, e não um enigma que você resolve. Os quizzes testam se uma decisão decorre de uma restrição, que é a única coisa que vale testar num curso de desenho.

Antes de ler a lição 2, escreva a sua própria resposta ao briefing, numa página. Você vai discordar de partes deste curso, e a discordância rende mais se estiver escrita antes.

O briefing

Desenhe a arquitetura da Atlas Field: uma aplicação Rails de agendamento com 40.000 usuários ativos por dia no Brasil, na Alemanha e na Austrália, uma carga dominada por leitura e picos regionais escalonados.

As restrições

  1. Dados pessoais de titulares na UE ficam armazenados e são processados dentro da UE. É contratual, e não uma recomendação.
  2. A lista de agendamentos renderiza em menos de 400 ms no p95 em todas as regiões.
  3. O gasto com infraestrutura fica abaixo de US$ 4.000 por mês, tudo incluído.
  4. Seis engenheiros, um de plantão, nenhum com experiência em banco multirregião.
  5. Seja o que for que você construa, uma pessoa precisa conseguir explicar os modos de falha num quadro branco em cinco minutos.

Segure as cinco ao mesmo tempo. A lição 2 começa onde a física começa: pela única restrição que não dá para negociar.

Aula 1 de 7 · grátis

Continue com a aula 2

Onde os dados moram, e o preço disso

A conta de idas e voltas mostra que a distância explica pouco do atraso, e surgem primários por região.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...