Questões e Respostas
Para o System Design, algumas premissas são importantes. Dentre as apresentadas, temos as seguintes:
- Ter qualidade de experiência para o usuário; em grande escala, tudo vai falhar; não armazenar nada desnecessário.
- Priorizar o uso de energia verde; ter cuidado com a latência em regiões distintas; o hardware não perde performance.
- Em grande escala, tudo vai falhar; foco em custo das clouds; priorizar o uso de energia verde.
- Foco em custo das clouds; não armazenar nada desnecessário; acompanhar a mudanças nas concorrentes.
Armazenar dados tem um custo baixo, mas a consulta tende a ter um custo maior porque o data transfer out precisa ter um baixo tempo de resposta.
O Teorema CAP (Consistência, Disponibilidade e Tolerância de partição) defende que:
- É impossível obter simultaneamente mais de duas das três garantias.
- As três garantias podem ser obtidas ao mesmo tempo.
- A consistência sempre será mais necessária que as outras duas garantias.
- A disponibilidade só pode ser obtida com a consistência e nunca com a tolerância de partição.
O aumento da consistência e da disponibilidade não implica num aumento de custo.
Em relação aos recursos utilizados para o System Design:
- O tempo de resposta não deve ser considerado dentro do System Design.
- É importante realizar o design usando a abordagem de middle-out, buscando o cerne da arquitetura, considerando o tempo, dinheiro e pessoas disponíveis.
- A perda de dados é considerara crítica em todos os cenários.
- O custo de downtime tem a mesma importância em qualquer sistema que será projetado.
As estimativas dos recursos necessários para o desenvolvimento de um sistema precisam ser precisos. Desta forma, evita-se aumentos de custo e tempo durante o desenvolvimento do projeto.
O Critical User Journey (CUJ) pode ser definido como:
- São as interações mais importantes entre o usuário e o produto.
- É uma medida usada para verificar o downtime do serviço.
- CUJ é a stack de linguagens e frameworks usados para construir o sistema.
- É o tipo de observabilidade usado para analisar os principais índices do sistema.