Netflix
Design System
Pedido: Quero um sistema parecido com a Netflix que vai exibir apenas esportes.
Dicas
Pense antes de falar, não traga algo que você não está confiante
Lembre-se que o objetivo principal é resolver um problema juntos
Você não precisa desenhar o sistema por completo
Desenhe algo
Foco
DevOps => Infra
Frontend => Componentes, estrutura e rotas
Backend => Endpoints, estrutura, rotas, modelagem, arquivos
Perguntas em aberto
Quais esportes você vai exibir? Futebol, NBA, NFL
Ao vivo ou apenas conteúdo gravado? Ambos
Quais são as categorias de cobrança: pay per view, assinatura, conteúdo de graça? Assinatura mensal
Existe a possibilidade de exibirmos, no futuro, algo além dos esportes? Não
Precisamos de suporte para vários idiomas? Se sim, qual é o padrão? Sim, o padrão é inglês. É uma empresa americana tipo ESPN.
Existem features diferentes para assinantes ou não assinantes? Não, temos apenas assinantes mensais. Quem não for assinante, não pode assistir.
Vai disponibilizar download da media? Não
Quais dispositivos serão compatíveis para exibição? Browser, Mobile App, TV, PS5, Xbox
Qual é a qualidade da resolução desejada? No mínimo 720p, no máximo 4k
O usuário terá uma sugestão com base em seu histórico? Sim, teremos um Data Engineer
Existe restrição de conteúdo de acordo com o plano? Não, teremos 1 plano mensal.
Um login poderá ser usado em mais de 1 IP diferente simultaneamente? Não pode!
Precisa seguir LGPD-GPDR? Sim e teremos um especialista nos auxiliando
Qual é a tecnologia que vai usar? Indiferente
Quantos usuários esperemos ter? 1 milhão
Quais os requisitos de acessibilidade? Neste mvp, não teremos nenhum suporte acessibilidade
Qual é o budget para investir em infra? Estamos abertos a sugestões
A partida durará no máximo 4 horas a 4k
Tamanho máximo é de 30GB cada vídeo
Usuários simultaneos? 200k em eventos normais, e 500k em eventos específicos
30GB * 200k = 6.000.000GB = 6PB
30GB * 500k = 14PB
Design
Infra
Com base nos cálculos, precisamos de um servidor com mais de 14PB de bandwidth
A melhor opção seria um AWS c5.18xlarge
Não sou um DevOps Engineer, mas a sugestão que eu daria é irmos para um AWS e usarmos microserviços para ter uma maior flexibilidade nos custos e aumentar ou diminuir microserviço específico dependendo dos requests
Também eu indicaria usarmos Kubernetes para ter este crescimento de modo mais organizado e ter maior autonomia no auto scaling
Microserviços
Billing: assinatura
User: usuário, recomendações, histórico
Streaming: passar os vídeos
Database
Users
Field
Type
Constraint
Notes
id
UUID
PK
fullname
VARCHAR(255)
email
VARCHAR(255)
password
VARCHAR(255)
Streaming
Field
Type
Constraint
Notes
id
UUID
PK
fullname
VARCHAR(255)
email
VARCHAR(255)
password
VARCHAR(255)
Backend
Node: Streaming => MS Streaming
Node:
Clean Code, Clean Architecture, TDD
Src
Entities
User.ts
App
Contracts
IUser.ts
Errors
UserNotFound.ts
InvalidRequest.ts
Use Cases
CreateUser.ts
UpdateUser.ts
Externals
Repositories
UserMySQL.ts (IUser.ts)
Http
Nest ou Express
Frontend
Browser
React: comunidade forte, libs, é fácil encontrar mão de obra
Libs que podem nos ajudar?
Clean Code, TDD
Src
components
<component>
index.tsx
<component>.test.tsx
<component>.tsx
Create-user-form
index.tsx
create-user-form.test.tsx
create-user-form.tsx
pages
tests