Sobre o programa que ele usa para desenhar, fazer o rascunho no vídeo: Excalidraw, é gratuito... pode ser acessado via navegador ou até mesmo como um plugin dentro do software Obsidian
Opa, excelente video! Para galera que ainda não passou por um processo seletivo de TI, esse conteúdo dá um norte muito bom. Só alguns detalhes que acho importante comentar: - AWS S3 não é um blob storage, mas sim um object storage. Há semelhanças, porém são serviços distintos que lidam de forma diferente com os objetos. - Faltou mencionar o protocolo de comunicação entre o cliente e o LB. UDP ou TCP? - Não é correto colocar um loadbalancer como camada de comunicação com o cliente. Loadbalancer é um simples serviço de distribuição de carga, e não possui recursos avançados de controle de tráfego. Por exemplo, vc não consegue setar request rate limit no loadbalancer, por isso o ideal seria colocar um API Gateway entre o cliente e o LB. - AWS WAF para controle de tráfego por região.
Em relação ao penúltimo tópico, sobre LB, teria algum cenário específico que o LB ficaria antes do Gateway, invertendo a ordem que você propôs? Eu estava com essa exata dúvida e praticamente todas fontes de informações dizia que dependia da situação
@@gusta4353 De fato depende. Acho que fui muito incisivo no meu comentário. haha Por exemplo, se vc tem sua infra na AWS e quer utilizar o AWS Certificate Manager (ACM) para gerenciar seus certificados, provavelmente vc vai ter que colocar um AWS LB na frente do seu API Gateway. Dessa forma vc consegue associar os certificados do ACM no seu LB e fazer o SSL termination ali mesmo. Então nesse caso o seu API Gateway ficaria depois do LB.
@@sr.cenora Incorreto. Vc pode (e é até importante) que o api gateway seja a porta de entrada. Ele permite associar certificados e fazer o upstream pra um load balancer. Eu ainda colocaria o lb com ip privado, garantindo que ele não seja acessível sem passar pelo api gateway. Aproveitando o ponto do api gateway, a autenticação já poderia ser colocada lá, com um cognito.
@@tkrafael Eu acho que vc não entendeu meu ponto. Eu disse que se vc quiser utilizar o AWS Certificate Manager como serviço de gerenciamento de certificados, vc poderia colocar um load balancer na frente do API Gateway (não estou falando do serviço AWS API Gateway aqui). Vc não consegue associar certificados gerenciados pela AWS à serviços não gerenciados pela AWS, tipo um Kong stand-alone.
Top!! Exatas perguntas que eu me fiz aqui ele acabou não abordando. Único ponto é que para controle de trágedo por região é por Route 53 com geolocation. WAF é uma camada de segurança a mais.
Não acredito que assisti uma entrevista de 45 minutos para Dev Senior hahah, não sou desenvolvedora, sou designer, e quando ele começou a falar de System Design pensei que ia falar de Design System e fiquei confusa. No mais, que assertividade esse cara têm, baita vídeo igual o Lucas Montano comentou!
Valeu, irmão! 🔥 Gosto principalmente de como você diz "eu não sei" várias vezes - só porque a vaga é pra Sênior, não quer dizer wue você precisa saber tudo. Aliás, pra mim, um dos indicadores de senioridade é justamente saber dizer "não sei" quando necessário.
Aprendi demais assistindo, parabéns pelo conteúdo de grande valor para nós desenvolvedores. Este material é sem dúvida um ponto de destaque porque me trouxe uma visão ampla e até simples de perceber as nuances entre entrevistador-entrevistado que no final vai ser o ponto de decisão da empresa para contratação do candidato.
Legal , no geral. Faltou do lado do entrevistar, uns "Olha, essa decisão é sua, não minha". Isso é classico, para adicionar um nervosismo ao entrevistado e ver como ele se sai nesse ponto. Ficou muito friendly.
Gostei muito, você é realmente absurdo nos conteúdos. Assim, vendo de longe eu adicionaria WAF para as validações de países e regras de redirecionamento (o WAF já tem ambas features). No quesito do Cache, eu utilizaria CDN sim, no caso da AWS, Cloudfront, ele faz o papel de guardar o conteúdo estático de algumas rotas, incluindo vídeos e assim você não precisa se preocupar, em segundo caso configurar o Nginx (que você vai usar mesmo que indiretamente lá no load balancer) pra realizar cache também seria uma boa. Agora, ao quesito do autoscaling, acho que sua ideia de alterar na mão é o certo, eu faria o seguinte, caso você use EKS, nesse tipo de sistema acredito que seja até o recomendável, em segundo caso, ECS. Criar um autoscaling por nodes acho que seria o mais correto, eu alteraria a quantidade minimas de nodes para maxima e deixaria a quantidade atual (desire size) no mínimo e aumentaria bastante a quantidade de nodes, pra que escalassem automaticamente e no Autoscaling você pode configurar % de node pra escalar
Obrigado pela dica, irmão. - Precisa replicar toda a infra numa nova região para servir múltiplos países? Só o CDN cacheando os vídeos, e esse cache estando em diferentes regiões, é suficiente, certo? - Sobre o WAF - ele consegue acessar os metadados no DB e validar se aquele vídeo pode ou não ser reproduzido naquela região? Eu pensei em algo diferente - provavelmente em algum momento da infra, o país (country code) é injetado no request. De repente o próprio service pode fazer essa validação?
@@StanleySathler WAF é uma camada de segurança, não para redirecionamento, balanceamento ou divisão de trafego. Para isso pode-se utilizar o Route53 com regras como Geolocation ou Geoproximity ou até mesmo Latency. Ambas regras no Route53 podem ter verificações de integridade, por exemplo. O WAF (Web Application Firewall) é uma ferramenta poderosa que adiciona uma camada a mais de proteção. Embora ele possibilite criar regras baseadas em Geolocalização o objetivo com a regra é bloquear ou permitir o trafego dentro da rede.
Sobre a parte de garantir que no máximo 4 devices façam streaming, esse serviço pode usar um streaming socket pra manter as conexões abertas e mandar os chuncks, essa conexão pode estar atrelada ao usuário ao invés da sessão, e que pode contar quantos sockets estão abertos para cada usuário e evitar um session forging. Eu sei que o objetivo é manter a visualização em um nível mais alto, mas alguns requisitos exigem ir um pouco mais baixo nível, e esse acho que é um bom exemplo.
Minhas considerações pra essa solução são sobre escala e sobre custo. Talvez usar uma solução mais simples (uma espécie de lock num redis) que não deixa mais de 4 acessos na mesma conta, mas só na api de resolução de url dos chunks, resolveria. Como não vai existir solução perfeita, a ideia desses bloqueios é tornar "caro" pra pessoa que está forjando a ponto de não valer a pena, ou seja, é mais fácil ela criar novas contas (ou mudar o plano).
Acho que o maior desafio foi - como decidir quais conexões são do "mesmo usuário, mas dispositivos diferentes"? O IP não serve porque todos podem estar na mesma rede doméstica, certo? Qual outra informação pode ser usada para identificar o device e saber que dois devices são distintos?
O algoritmo do youtube pode ser uma merda as vezes mas dessa vez ele acertou. Vídeo muito top mesmo não sou DEV mas curtir muito a entrevista deu pra ter uma noção de como é e o tanto que o entrevistado é inteligente, parabéns pelo vídeo.
Cara, acho que depois do Fábio Akita, o teu conteúdo é o melhor conteúdo sobre computação do RUclips. Tem muito conteúdo por aí muito raso, que não agrega quase nada, mas o tipo de coisa que você oferece aqui é SENSACIONAL!
Para limitar a 4 dispositivos você pode controlar de algumas formas. Uma delas seria pelo próprio conteúdo. Não faz sentido todos os dispositivos estarem baixando exatamente o mesmo chunk ao exato mesmo tempo. Então, em teoria, estariam baixando chunks diferentes. Dessa forma você contabiliza quantos estão sendo baixados e determina o número de dispositivos. Outra forma seria pelo uso da banda. Se tiver um cap de 5MB/s ( resultado de estudos anteriores, pode variar muito ), e aquele login está usando 50MB, em teoria tem 10 devices baixando. Existem outras maneiras também, de complementar essa segurança. Sobre a escolha do blob, ao invés de randômico, eu provavelmente sugeriria escolher o blob pela % de uso atual. O mais "leve" recebe o próximo chunk. Dessa forma o balanceamento é íntegro. Sobre a geolocalização, na minha opinião, isso tem que estar na mão do dispositivo/OS. Por exemplo, o app do celular pode já puxar a localização e o idioma do dispositivo. Num 2o momento somente uma validação deveria ocorrer no ambiente externo, frequentemente ou não, a depender do volume de problema que isso vai gerar, e se isso afeta ou não o core do produto.
A questão do streaming em mais dispositivos não precisa ser redesenhada. Existem soluções prontas (widevine por exemplo) que já fazem isso. Porém eu faria o streaming diretamente do S3 usando uma url gerada com expiração um pouco maior que o tempo do arquivo. E um banco de controle com expiração dessas urls, garantindo que não seja possível hvar mais de 4 urls ativas. Usar o widevine talvez seria uma opção, porém vejo que seria mais caro. Sobre a geolocalização, é possível usar o route53 pra resolver endereços diferentes com base na origem. É uma opção. E por fim, eu não concordo em replicar o ambiente pra múltiplas regiões se não é um requisito de alta disponibilidade. Um endpoint colocado em us-east-1 por exemplo, tem um roundtrip razoável em praticamente todas as regiões principais dos continentes. E colocaria o CDN (ou talvez um haproxy/nginx nas regiões mais usadas) pra esconder o S3 e tornar o acesso mais rápido (também cortar custo de egress entre regiões)
no minuto : 33:15 um Cassandra resolveria seu problema de rebalanceamento, e escala. Em vez de voce usar round robin pra balancear os nodes (que nao iria escalar como voce queria), voce deveria usar Consistent Hashing pra implementar e distribuicao via hash em topologia Anel.
Uma coisa que acho que faltou, seria, por exemplo, verificar quantos chunks diferentes o usuário está recebendo, se é maior ou igual a 4, além das checagens básicas.
A CDN pode ficar à frente do LB. Caso encontre o recurso desejado, ele nem cairia no LB. Para dividir conteúdo por geolocalizacao, poderia ter uma WAF antes do LB onde seria feito a pesquisa originária do IP vindo do request para uma localidade, adicionando essa informação. Sabemos que VPNs podem forjar localização mas é o mundo como é. Uma boa ideia também, na minha opinião, seria um service discovery onde cada serviço que sobe no seu cluster, registraria nesse discovery, qual é o serviço e uma API gateway para servir à política de serviços. Assim ficaria melhor para saber no API gateway, qual serviço chamar.
O WAF é importante colocar antes do alb ou do api gateway, concordo. Porém sobre o waf fazer o streaming do vídeo, a conta não vai fechar, o waf é bem caro
Esta falando do AWS WAF? Se sim o WAF é uma camada de segurança, não para redirecionamento. Para isso pode-se utilizar o Route53 com regras como Geolocation ou Geoproximity ou até mesmo Latency. Ambas regras no Route53 podem ter verificações de integridade, por exemplo. O WAF (Web Application Firewall) é uma ferramenta poderosa que adiciona uma camada a mais de proteção. Embora ele possibilite criar regras baseadas em Geolocalização o objetivo com a regra é bloquear ou permitir o trafego dentro da rede.
Achei foda quando ele dizia diversas vezes q não sabia de algo ou q não sabia de algo, como um iniciante na programação eu tinha muito medo de dizer dizer q não sabia de algo e perder a minha credibilidade por exemplo.
E melhor dizer que não sabe e conseguir entrar na empresa sabendo das limitações. Se entrar dizendo que sabe e depois não dar conta, é pior. Em empresas mais organizadas, a união faz a força. As pessoas acabam se complementando.
Acho que o cache dos chunks deveriam ficar em um redis cluster, onde o cache seria provisionado conforme demanda de forma independente do servidor. De forma que um filme muito visualizado seria fornecido para todas as instancias do mesmo cache. Estagiário falando rapaziada. kk
Acredito que dar para resolver de uma forma mais simplificada, Usuário tem uma conta, com isso e possível controlar o número de acessos, como são dados leves e possível ter um servidor único para todo o mundo, dando possibilidade de acesso em qualquer lugar, a sessão e armazenada localmente e para acesso teria o log de IP + Nome da máquina, assim vai limitar o número de acessos mesmo sendo realizado no mesmo IP. Teria um LB ou um serviço tipo o Cloudflare para controlar o país ou estado que o usuário vai fazer o acesso, teria 1 servidor CND por pais ou estado com todos os vídeos armazenados, o banco de dados seria apenas para armazenar o caminho dos vídeos para não consumir o banco, usuário faz a requisição do vídeo, o LB decide de qual servidor buscar a informação, o vídeo e solicitado e neste momento vai fazer o Streaming do vídeo, precisa de um serviço para replicar os vídeos de vários servidores.
Você pode utilizar do "zero knowledge" criar um algoritmo no cliente e no back que gera uma chave privada com base em determinadas informações do usuário para criar um base64 que guarda todas as informações necessárias do lado do cliente e enviar para o servidor. Assim você consegue levar informações do front para o back e para modificar a pessoa deveria conhecer do algoritmo.
@@eliseumds o JWT iria ficar com a chave privada exposta, isso não é muito interessante, o atacante poderia modificar as informações. A ideia era validar o conteúdo da informação se é verdadeiro, igual o cartão chave do bradesco. Pra isso o usuário deveria conhecer do algoritmo para modificar a informação.
Mas e aí, o Augusto passou ou não? Qual seria a proposta para esse nível de entrevista? 150k/yr? :D Brincadeiras à parte, é possível aprender sobre esse tipo de arquitetura sem ter experiência desenvolvendo produtos deste tipo? Eu consigo aprender a como montar um serviço/produto de streaming de videos apenas com conteúdo teórico, como livros? Caso contrário, como aprender isso de forma sólida?
11:32 Eu faria o seguinte, UUID com de cada device que o usuário está usando no momento, grava no redis, caso existam mais de 4 no redis retorna um erro, se não, continua e segue a vida, na hora que o usuário parar de consumir esse UUID, seja por que fechou a aplicação, seja por que parou de clicar e entrou naquela tela de "Você está assistindo ainda?" vai ser retirado esse UUID do redis.
@@gustavolol3 você não entendeu, independente de quais são os devices, pode ser o mesmo 4 vezes, se existir um quinto vai dar erro, é o que a netflix faz, você toma um erro mesmo se tiver usando 2 abas no mesmo dispositivo
Eu como frontend me senti totalmente largado, o frontend vai segurar esse tanto de acesso sem nenhuma estrutura? Kkkk Eu pensei em várias coisas de como o frontend deveria se portar pra entregar isso, pra algo como o Cloudfront limitar acessos regionais e mais. Mas queria ter visto isso ser falado.
Isso foi uma entrevista? Pareceu uma consultoria de projeto, lembra a galera querendo o projeto elétrico para poder "cotar" com a concorrência hahahah Isso parece o briefing inicial de um projeto onde dois chefes de equipe estão debatendo os alinhamentos. Quando será a próxima entrevista? Bora criar uma playlist de "auto ajuda" para os outros ahahhah
Oitmo video, eu fiquei com uma duvida no auth apontando pro load balancer, voces falaram que precisariam de algo para verificar as permissões do usuario, como que voces fariam para ter controle disso tudo?? voces conseguiriam colocar todas essas informacoes no banco de dados do oAuth??
Métrica de auto scale definiria por quantidade de request fazendo uma estimativa antes de quanto uma request gasta e quanto tem nossa maquina custo-beneficio e deixaria sempre 1 sobrando, exemplo: bateu 80% das requests, teria outro servidores um a 3 eu acho, já ligados esperando a entrada das requests ou então usava lambda pra tudo msm mas só cuidado com o DDOS by um deb mobile kkkkkkkkk
baita video, System Design ficou muito completo! A dica no minuto 44:00 é top
Lucas Montano do Canal Lucas Montano!
@@joaoviniciuscode O próprio!
I love you!
Conteúdo excelente! É um tipo de conteúdo que está em falta nos canais de dev brasileiros.
Sobre o programa que ele usa para desenhar, fazer o rascunho no vídeo:
Excalidraw, é gratuito... pode ser acessado via navegador ou até mesmo como um plugin dentro do software Obsidian
Cara, nem sei como te agradecer, procurava por esse programa há tempos!
Muito obrigado.
@@ThekingCr4ft Pode me agradecer fazendo o bem ao próximo.
Opa, excelente video! Para galera que ainda não passou por um processo seletivo de TI, esse conteúdo dá um norte muito bom.
Só alguns detalhes que acho importante comentar:
- AWS S3 não é um blob storage, mas sim um object storage. Há semelhanças, porém são serviços distintos que lidam de forma diferente com os objetos.
- Faltou mencionar o protocolo de comunicação entre o cliente e o LB. UDP ou TCP?
- Não é correto colocar um loadbalancer como camada de comunicação com o cliente. Loadbalancer é um simples serviço de distribuição de carga, e não possui recursos avançados de controle de tráfego. Por exemplo, vc não consegue setar request rate limit no loadbalancer, por isso o ideal seria colocar um API Gateway entre o cliente e o LB.
- AWS WAF para controle de tráfego por região.
Em relação ao penúltimo tópico, sobre LB, teria algum cenário específico que o LB ficaria antes do Gateway, invertendo a ordem que você propôs? Eu estava com essa exata dúvida e praticamente todas fontes de informações dizia que dependia da situação
@@gusta4353 De fato depende. Acho que fui muito incisivo no meu comentário. haha
Por exemplo, se vc tem sua infra na AWS e quer utilizar o AWS Certificate Manager (ACM) para gerenciar seus certificados, provavelmente vc vai ter que colocar um AWS LB na frente do seu API Gateway. Dessa forma vc consegue associar os certificados do ACM no seu LB e fazer o SSL termination ali mesmo. Então nesse caso o seu API Gateway ficaria depois do LB.
@@sr.cenora Incorreto.
Vc pode (e é até importante) que o api gateway seja a porta de entrada. Ele permite associar certificados e fazer o upstream pra um load balancer. Eu ainda colocaria o lb com ip privado, garantindo que ele não seja acessível sem passar pelo api gateway.
Aproveitando o ponto do api gateway, a autenticação já poderia ser colocada lá, com um cognito.
@@tkrafael Eu acho que vc não entendeu meu ponto. Eu disse que se vc quiser utilizar o AWS Certificate Manager como serviço de gerenciamento de certificados, vc poderia colocar um load balancer na frente do API Gateway (não estou falando do serviço AWS API Gateway aqui). Vc não consegue associar certificados gerenciados pela AWS à serviços não gerenciados pela AWS, tipo um Kong stand-alone.
Top!! Exatas perguntas que eu me fiz aqui ele acabou não abordando. Único ponto é que para controle de trágedo por região é por Route 53 com geolocation. WAF é uma camada de segurança a mais.
Ótimo vídeo!
O algoritmo de recomendações acertou em cheio hoje
Não acredito que assisti uma entrevista de 45 minutos para Dev Senior hahah, não sou desenvolvedora, sou designer, e quando ele começou a falar de System Design pensei que ia falar de Design System e fiquei confusa. No mais, que assertividade esse cara têm, baita vídeo igual o Lucas Montano comentou!
Valeu, irmão! 🔥 Gosto principalmente de como você diz "eu não sei" várias vezes - só porque a vaga é pra Sênior, não quer dizer wue você precisa saber tudo. Aliás, pra mim, um dos indicadores de senioridade é justamente saber dizer "não sei" quando necessário.
Aprendi demais assistindo, parabéns pelo conteúdo de grande valor para nós desenvolvedores. Este material é sem dúvida um ponto de destaque porque me trouxe uma visão ampla e até simples de perceber as nuances entre entrevistador-entrevistado que no final vai ser o ponto de decisão da empresa para contratação do candidato.
Excelente vídeo!! Gostaria de ver mais desse tipo com vcs dois!! Parabéns..
Legal , no geral.
Faltou do lado do entrevistar, uns "Olha, essa decisão é sua, não minha".
Isso é classico, para adicionar um nervosismo ao entrevistado e ver como ele se sai nesse ponto.
Ficou muito friendly.
Estou chegando... Falta muito ainda mas... Estou chegando nesse nível.
Espetacular esse conteúdo e uma demostração pratica SHOW !!!
conteúdo excelente! deu até pra ver a "realidade" pois voce nunca lidou com streaming então foi bem honesto. muito legal!
Gostei muito, você é realmente absurdo nos conteúdos. Assim, vendo de longe eu adicionaria WAF para as validações de países e regras de redirecionamento (o WAF já tem ambas features).
No quesito do Cache, eu utilizaria CDN sim, no caso da AWS, Cloudfront, ele faz o papel de guardar o conteúdo estático de algumas rotas, incluindo vídeos e assim você não precisa se preocupar, em segundo caso configurar o Nginx (que você vai usar mesmo que indiretamente lá no load balancer) pra realizar cache também seria uma boa.
Agora, ao quesito do autoscaling, acho que sua ideia de alterar na mão é o certo, eu faria o seguinte, caso você use EKS, nesse tipo de sistema acredito que seja até o recomendável, em segundo caso, ECS. Criar um autoscaling por nodes acho que seria o mais correto, eu alteraria a quantidade minimas de nodes para maxima e deixaria a quantidade atual (desire size) no mínimo e aumentaria bastante a quantidade de nodes, pra que escalassem automaticamente e no Autoscaling você pode configurar % de node pra escalar
Obrigado pela dica, irmão.
- Precisa replicar toda a infra numa nova região para servir múltiplos países? Só o CDN cacheando os vídeos, e esse cache estando em diferentes regiões, é suficiente, certo?
- Sobre o WAF - ele consegue acessar os metadados no DB e validar se aquele vídeo pode ou não ser reproduzido naquela região? Eu pensei em algo diferente - provavelmente em algum momento da infra, o país (country code) é injetado no request. De repente o próprio service pode fazer essa validação?
@@StanleySathler WAF é uma camada de segurança, não para redirecionamento, balanceamento ou divisão de trafego. Para isso pode-se utilizar o Route53 com regras como Geolocation ou Geoproximity ou até mesmo Latency. Ambas regras no Route53 podem ter verificações de integridade, por exemplo.
O WAF (Web Application Firewall) é uma ferramenta poderosa que adiciona uma camada a mais de proteção. Embora ele possibilite criar regras baseadas em Geolocalização o objetivo com a regra é bloquear ou permitir o trafego dentro da rede.
Adorei o video, gostaria de ver mais desse tipo de video, vale ouro
Sobre a parte de garantir que no máximo 4 devices façam streaming, esse serviço pode usar um streaming socket pra manter as conexões abertas e mandar os chuncks, essa conexão pode estar atrelada ao usuário ao invés da sessão, e que pode contar quantos sockets estão abertos para cada usuário e evitar um session forging.
Eu sei que o objetivo é manter a visualização em um nível mais alto, mas alguns requisitos exigem ir um pouco mais baixo nível, e esse acho que é um bom exemplo.
Minhas considerações pra essa solução são sobre escala e sobre custo. Talvez usar uma solução mais simples (uma espécie de lock num redis) que não deixa mais de 4 acessos na mesma conta, mas só na api de resolução de url dos chunks, resolveria.
Como não vai existir solução perfeita, a ideia desses bloqueios é tornar "caro" pra pessoa que está forjando a ponto de não valer a pena, ou seja, é mais fácil ela criar novas contas (ou mudar o plano).
Acho que o maior desafio foi - como decidir quais conexões são do "mesmo usuário, mas dispositivos diferentes"? O IP não serve porque todos podem estar na mesma rede doméstica, certo? Qual outra informação pode ser usada para identificar o device e saber que dois devices são distintos?
Vídeo muitooooo massa, valeu mesmo. Faz mais vídeos de entrevista para outros cenários, nesta mesma pegada. Tanks👍🏽
O algoritmo do youtube pode ser uma merda as vezes mas dessa vez ele acertou. Vídeo muito top mesmo não sou DEV mas curtir muito a entrevista deu pra ter uma noção de como é e o tanto que o entrevistado é inteligente, parabéns pelo vídeo.
excelente o video. vou usar e pensar nesses pequenos detalhes. Realmente e bom passar o raciocionio para o entrevistador.
Incrível ,que dupla !! realmente vocês desmistificaram sytem design.Pensem em trazer mais conteúdos assim como este, mas também qualquer outros kkk.
cara, parabéns pelo vídeo!
Muito enriquecedor, sem dúvidas
Ainda não terminei o vídeo e é foda!!!! Continue trazendo vídeos assim.
Muito bom. Se conseguir trazer mais vídeos nessa pegada, iria ajudar muito.
Otimo conteúdo, valeu por trazer isso
Obrigado pelos videos, augusto. Ótimo conteúdo sempre ! Sucesso...
Muuuuito show mesmo. Obrigada pelo conteúdo
Ótimo vídeo, gostei muito da parte de feedbacks boas dicas pra lembrar!
Show de bola o conteúdo!
Totalmente hands-on, técnico e informativo.
Deixei me like e abs.
Cara, acho que depois do Fábio Akita, o teu conteúdo é o melhor conteúdo sobre computação do RUclips. Tem muito conteúdo por aí muito raso, que não agrega quase nada, mas o tipo de coisa que você oferece aqui é SENSACIONAL!
É bem legal esse vídeo, a Laís Lima fez uma playlist de como trabalhar com streaming da para controlar bastante coisa no nginx
Estou me preparando pra algumas entrevistas e os videos do seu canal são excelentes.
Parabéns pela dinâmica! Seria legal se fizessem uma em inglês pra quem está tentando vaga no exterior…
Para limitar a 4 dispositivos você pode controlar de algumas formas.
Uma delas seria pelo próprio conteúdo. Não faz sentido todos os dispositivos estarem baixando exatamente o mesmo chunk ao exato mesmo tempo. Então, em teoria, estariam baixando chunks diferentes. Dessa forma você contabiliza quantos estão sendo baixados e determina o número de dispositivos.
Outra forma seria pelo uso da banda. Se tiver um cap de 5MB/s ( resultado de estudos anteriores, pode variar muito ), e aquele login está usando 50MB, em teoria tem 10 devices baixando.
Existem outras maneiras também, de complementar essa segurança.
Sobre a escolha do blob, ao invés de randômico, eu provavelmente sugeriria escolher o blob pela % de uso atual. O mais "leve" recebe o próximo chunk. Dessa forma o balanceamento é íntegro.
Sobre a geolocalização, na minha opinião, isso tem que estar na mão do dispositivo/OS. Por exemplo, o app do celular pode já puxar a localização e o idioma do dispositivo. Num 2o momento somente uma validação deveria ocorrer no ambiente externo, frequentemente ou não, a depender do volume de problema que isso vai gerar, e se isso afeta ou não o core do produto.
A questão do streaming em mais dispositivos não precisa ser redesenhada. Existem soluções prontas (widevine por exemplo) que já fazem isso.
Porém eu faria o streaming diretamente do S3 usando uma url gerada com expiração um pouco maior que o tempo do arquivo. E um banco de controle com expiração dessas urls, garantindo que não seja possível hvar mais de 4 urls ativas. Usar o widevine talvez seria uma opção, porém vejo que seria mais caro.
Sobre a geolocalização, é possível usar o route53 pra resolver endereços diferentes com base na origem. É uma opção.
E por fim, eu não concordo em replicar o ambiente pra múltiplas regiões se não é um requisito de alta disponibilidade. Um endpoint colocado em us-east-1 por exemplo, tem um roundtrip razoável em praticamente todas as regiões principais dos continentes. E colocaria o CDN (ou talvez um haproxy/nginx nas regiões mais usadas) pra esconder o S3 e tornar o acesso mais rápido (também cortar custo de egress entre regiões)
Sugestão: Adicione "System Desing" no titulo ou descrição do video, pois esse termo é muito buscado, porem existe pouco conteúdo em pt-br.
no minuto : 33:15 um Cassandra resolveria seu problema de rebalanceamento, e escala. Em vez de voce usar round robin pra balancear os nodes (que nao iria escalar como voce queria), voce deveria usar Consistent Hashing pra implementar e distribuicao via hash em topologia Anel.
Uma coisa que acho que faltou, seria, por exemplo, verificar quantos chunks diferentes o usuário está recebendo, se é maior ou igual a 4, além das checagens básicas.
Top demais esse conteudo, ultima intrevista foi muito boa também!
Gostei do Galego, nessa mock interview... ele consegue enrolar bem, montou um frankenstein e tudo pra ele é "razoável"
A CDN pode ficar à frente do LB. Caso encontre o recurso desejado, ele nem cairia no LB. Para dividir conteúdo por geolocalizacao, poderia ter uma WAF antes do LB onde seria feito a pesquisa originária do IP vindo do request para uma localidade, adicionando essa informação. Sabemos que VPNs podem forjar localização mas é o mundo como é. Uma boa ideia também, na minha opinião, seria um service discovery onde cada serviço que sobe no seu cluster, registraria nesse discovery, qual é o serviço e uma API gateway para servir à política de serviços. Assim ficaria melhor para saber no API gateway, qual serviço chamar.
O WAF é importante colocar antes do alb ou do api gateway, concordo. Porém sobre o waf fazer o streaming do vídeo, a conta não vai fechar, o waf é bem caro
Esta falando do AWS WAF? Se sim o WAF é uma camada de segurança, não para redirecionamento. Para isso pode-se utilizar o Route53 com regras como Geolocation ou Geoproximity ou até mesmo Latency. Ambas regras no Route53 podem ter verificações de integridade, por exemplo.
O WAF (Web Application Firewall) é uma ferramenta poderosa que adiciona uma camada a mais de proteção. Embora ele possibilite criar regras baseadas em Geolocalização o objetivo com a regra é bloquear ou permitir o trafego dentro da rede.
Parabéns pela didática.
Que vídeo sensacional !!
Obrigado pelo conteúdo!
Vi no linkedin e procurei aqui. Top
Show de bola man, concerteza passou
Video muito brabo, um dia chego nesse nivel!
Galego, melhor conteúdo obg
Que conteúdo incrível!
Traga mais conteúdos desse tipo
Mtt top o conteúdo!! Ganhou um inscrito!
O engraçado foi eu ouvir a problematica da entrevista e ja de cara imaginar toda a solução automaticamente kkk Experiência é um negócio incrível kkkk
Conteúdo top!!!
Obrigado por compartilhar!
Excelente conteúdo, poderia me falar qual o software utilizado para as anotações durante a live?
Muito massa e informativo!
Ótimo vídeo! Então um Dev Senior precisa manjar bastante de arquitetura de software ? Ou a vaga é realmente para arquiteto de software?
Cara isso é muito bom.
Fico nervoso no começo mas dps que viu que era o S3 ja era, gg
porque tipo, o Blob não seria o responsável por enviar o vídeo pro cliente, quem enviará pro client seria o cdn...
Achei foda quando ele dizia diversas vezes q não sabia de algo ou q não sabia de algo, como um iniciante na programação eu tinha muito medo de dizer dizer q não sabia de algo e perder a minha credibilidade por exemplo.
E melhor dizer que não sabe e conseguir entrar na empresa sabendo das limitações. Se entrar dizendo que sabe e depois não dar conta, é pior.
Em empresas mais organizadas, a união faz a força. As pessoas acabam se complementando.
Excelente vídeo, Galego. Obrigado por compartilhar
Gostei muito do vídeo, qual o nome do soft que usam para criar esses mapas inteligentes?
alguem sabe qual sofware é esse que utiliza para fazer os diagramas
Da pra saber pra qual região manda os dados deixando o endpoint no client dynamic tbm haha pegando pela geolocalização dele no momento
Faz conteúdo sobre Round-Robin, nunca nem vi
Que programa é esse que você usa para os desenhos?
Acredito que seja o site excalidraw
Acho que o cache dos chunks deveriam ficar em um redis cluster, onde o cache seria provisionado conforme demanda de forma independente do servidor. De forma que um filme muito visualizado seria fornecido para todas as instancias do mesmo cache. Estagiário falando rapaziada. kk
Acredito que dar para resolver de uma forma mais simplificada, Usuário tem uma conta, com isso e possível controlar o número de acessos, como são dados leves e possível ter um servidor único para todo o mundo, dando possibilidade de acesso em qualquer lugar, a sessão e armazenada localmente e para acesso teria o log de IP + Nome da máquina, assim vai limitar o número de acessos mesmo sendo realizado no mesmo IP. Teria um LB ou um serviço tipo o Cloudflare para controlar o país ou estado que o usuário vai fazer o acesso, teria 1 servidor CND por pais ou estado com todos os vídeos armazenados, o banco de dados seria apenas para armazenar o caminho dos vídeos para não consumir o banco, usuário faz a requisição do vídeo, o LB decide de qual servidor buscar a informação, o vídeo e solicitado e neste momento vai fazer o Streaming do vídeo, precisa de um serviço para replicar os vídeos de vários servidores.
Você pode utilizar do "zero knowledge" criar um algoritmo no cliente e no back que gera uma chave privada com base em determinadas informações do usuário para criar um base64 que guarda todas as informações necessárias do lado do cliente e enviar para o servidor. Assim você consegue levar informações do front para o back e para modificar a pessoa deveria conhecer do algoritmo.
JWT?
@@eliseumds o JWT iria ficar com a chave privada exposta, isso não é muito interessante, o atacante poderia modificar as informações. A ideia era validar o conteúdo da informação se é verdadeiro, igual o cartão chave do bradesco. Pra isso o usuário deveria conhecer do algoritmo para modificar a informação.
Massa demais!!
Valeu!
Alguém saberia dizer qual software ele utiliza para fazer esses desenho?
também estou querendo saber
excalidraw
conteúdo excelente
Alguem sabe o nome dessa ferramenta utilizada pra desenhar ?
excalidraw
conteúdo brabo man! qual app tu ta usando pra desenhar o fluxograma?
.
@@Victor-qy6lc achei um comentário em outro video que salvou, é o Excalidraw 😅
.
excalidraw
é no proprio navegador
Muito bom
Caraca, morrendo pra achar o nome deste app! SHOW.
O video ja ta favoritado na minha playlist! Tesouro!
Mas e aí, o Augusto passou ou não? Qual seria a proposta para esse nível de entrevista? 150k/yr? :D
Brincadeiras à parte, é possível aprender sobre esse tipo de arquitetura sem ter experiência desenvolvendo produtos deste tipo?
Eu consigo aprender a como montar um serviço/produto de streaming de videos apenas com conteúdo teórico, como livros?
Caso contrário, como aprender isso de forma sólida?
11:32 Eu faria o seguinte, UUID com de cada device que o usuário está usando no momento, grava no redis, caso existam mais de 4 no redis retorna um erro, se não, continua e segue a vida, na hora que o usuário parar de consumir esse UUID, seja por que fechou a aplicação, seja por que parou de clicar e entrou naquela tela de "Você está assistindo ainda?" vai ser retirado esse UUID do redis.
usuário pode forjar info do device dele, dizendo que 8 devices diferentes são 4. Esse tipo de info n pode ser determinada pelo user
@@gustavolol3 você não entendeu, independente de quais são os devices, pode ser o mesmo 4 vezes, se existir um quinto vai dar erro, é o que a netflix faz, você toma um erro mesmo se tiver usando 2 abas no mesmo dispositivo
Eu como frontend me senti totalmente largado, o frontend vai segurar esse tanto de acesso sem nenhuma estrutura? Kkkk
Eu pensei em várias coisas de como o frontend deveria se portar pra entregar isso, pra algo como o Cloudfront limitar acessos regionais e mais. Mas queria ter visto isso ser falado.
a proxima poderia ser em ingles, otimo video!
Cada client pode ver um vídeo por vez, na netflix da pra abrir 2 abas e ver os 2 videos? se sim F mas no mobile da pra segurar
Ótimo vídeo, ajudou bastante a ter uma noção de onde me encontro hoje no mercado.
Por curiosidade, qual ferramenta foi usada no design?
acho que seja o Excalidraw
@@guilhermeandrade2317 Fui validar, é esse mesmo.
Muito obrigado!
Isso foi uma entrevista? Pareceu uma consultoria de projeto, lembra a galera querendo o projeto elétrico para poder "cotar" com a concorrência hahahah
Isso parece o briefing inicial de um projeto onde dois chefes de equipe estão debatendo os alinhamentos.
Quando será a próxima entrevista? Bora criar uma playlist de "auto ajuda" para os outros ahahhah
Qual é este aplicativo para desenhar os esquemas e fluxograma?
Qual o nome do Software usado para ilustração ?
Miro
errata: é no excalidraw
A proposito é um video otimo!! Gostaria de saber qual esse programa usado nos exemplos?
também gostaria de saber, achei excelente!
Oitmo video, eu fiquei com uma duvida no auth apontando pro load balancer, voces falaram que precisariam de algo para verificar as permissões do usuario, como que voces fariam para ter controle disso tudo?? voces conseguiriam colocar todas essas informacoes no banco de dados do oAuth??
Usaria new relic para saber qual os gargalos no servidor antes de fazer um k6 Performance testing da vida eu botaria o new relic
qual aplicativo ele ultilizou pra fazer essa apresentação
Conteúdo top
qual é definição de metadados? qual a diferença entre eles e dados que salvamos no postgres tipo email, senhas, playlists, etc?
Metadados são dados sobre os dados. No caso o dado seria o vídeo e os metadados seriam duração, formato.
Métrica de auto scale definiria por quantidade de request fazendo uma estimativa antes de quanto uma request gasta e quanto tem nossa maquina custo-beneficio e deixaria sempre 1 sobrando, exemplo: bateu 80% das requests, teria outro servidores um a 3 eu acho, já ligados esperando a entrada das requests ou então usava lambda pra tudo msm mas só cuidado com o DDOS by um deb mobile kkkkkkkkk
Qual é o nome desse app que vc faz o desenho?
Excalidraw, é gratuito... pode ser acessado via navegador ou até mesmo como um plugin dentro do software Obsidian
o problema do bloc escala eu achava que upa no blob e fazer uma função pra ele criar um cdn resolveria qq caso kkkkkkkk
Excelente vídeo. Desculpe a pergunta, mas que app é esse que usam para fazer os desenhos?
excalidraw
que aplicativo é esse que usaram pra ilustrar?
Muito bom! Algué pode me dizer o nome dassa plataforma onde estão criando esses gráficos e formas? É excelente para aula interativa.
excalidraw
qual software vcs tao usando? figma?
Como chama esse app de notaçõs que ele esta usando?
Parece uma partida de rpg o cara dá uma solução o mestre arruma outro problema 😂
Qual o nome da ferramenta que ele está desenhando?
excalidraw
Não entendi nada, volto quando avançar na faculdade.