Conteúdo original em https://twitter.com/zanfranceschi/status/1638232577646669824
Ei dev,
Quando falamos sobre System Design é comum pensarmos em soluções complexas, escalas enormes, etc. Só que a maioria das empresas precisa de soluções simples.
Nessa thread, vou propor 10 desafios de System Design mais simples e triviais pra você praticar.
Segue o fio. ↓
Disclaimer: Não são desafios completos no sentido de apresentarem requisitos detalhados, domínios de negócio, restrições, etc. São mais ideias gerais pra você elaborar um problema/solução – são ideias pra talvez te inspirar a criar seu próprio desafio.
Bora lá!
Desafio 0: Separar um Banco de Dados em Dois
Como você separaria um banco de dados relacional legado em dois de forma que mantivesse apenas registros de até 6 meses num banco e registros mais antigos em outro?
Considere coisas como paginação, busca, usabilidade, etc.
Desafio 1: Integração via Arquivos
Esse é um clássico. Você é responsável por definir como será feita a integração via arquivos (~10GB arquivo/dia) entre duas empresas. Qual tecnologia você usaria? FTP, VPN, GCS, S3, etc.? Os arquivos só podem ser expurgados após 3 anos.
Desafio 2: Processamento Idempotente de Arquivos
Desenhe um solução de processamento idempotente de arquivos grandes (~10GB). A idempotência será do arquivo como um todo ou registro a registro? Cabe tudo na memória ou será um processamento via fluxo (streaming)?
Desafio 3: Transformar um Processamento Síncrono de uma API em Assíncrono
Esse é um clássico também. Como transformar uma API que tem um processamento síncrono em assíncrono? Pense em questões de status code de retorno, garantia de processamento, usabilidade da API, etc.
Desafio 4: Instrumentar Serviços para Métricas de Negócio em Tempo Real
Por incrível que pareça, me parece que apesar de ferramentas disponíveis muitas empresas não fazem isso ou fazem de maneira muito rudimentar. Como você resolveria isso? Dica: não use logs, use métricas!
Desafio 5: Integração com Eventos via Webhook
Elabore uma solução de uma API que receba notificações de eventos via webhook. Pense em tolerância à falhas, rapidez de processamento, etc. Questione se quem invoca o webhook faz retentativas, quais status codes são aceitos, etc.
Desafio 6: Expor Serviços Internos para Parceiros
Você possui uma API interna, mas o negócio decidiu que irá expô-la para outras empresas (algumas dezenas). Como você exporia um serviço que está numa rede privada para empresas parceiras? (cont.)
Considere aspectos de infraestrutura de rede (disponibilizar numa rede pública e controlar via firewall/ACL ou via conexão privada), autenticação/autorização/tokens de acesso, limites de requisições (throttling), etc.
Desafio 7: Alterar o Hash de Senhas num Banco de Dados
Você tem um banco de dados legado que possui registros de senhas criptografadas com MD5. Desenhe uma solução de migração de senhas para que sejam armazenadas com outro algoritmo (p.ex: Argon2 ou Bcrypt)?
Desafio 8: Migração de Banco de Dados para Nuvem
Sua empresa vai migrar pra nuvem. Desenhe uma solução para manter os bancos de dados on premise e nuvem sincronizados para que seja possível usar um ambiente ou outro com uma simples configuração e de maneira rápida? (cont.)
Geralmente, a parte mais difícil de migrar para nuvem são os componentes que possuem estado – 90% das vezes, os bancos de dados. Aplicações web stateless ou com estado volátil são mais fáceis de migrar, na maioria das vezes. Uma estratégia de fallback de bancos pode ser uma boa.
Desafio 9: Tokens Opacos de Acesso
Desenhe um solução de autenticação/autorização em que seja possível usar tokens opacos de acesso em mais de um serviço. A emissão e invalidação/expiração do token precisa ser centralizada.
São esses os 10 desafios!
Todos que propus aqui são desafios que já enfrentei. Alguns são um pouco menos triviais, mas nenhum é coisa somente de empresas gigantes/referência e muitos são bem comuns de encontrarmos por aí.
Espero que tenha gostado da thread. ❤️
Top comments (4)
Muito bom!
sensacional, gostei demais!
Obrigado, amigo!
Excelente!