quer aprender a escalar um serviço para 1 milhão de usuários Bora lá a gente tem usuário onde que ele acessa no we browser ap. meusite pcom o DNS é feito retorno o IP pro browser o browser encaminha chamada PCP vai pro Web Server o Web Server retorna O HTML pro usuário beleza muito simples que a gente tem que fazer 1 milhão de usuários a gente tem que guardar esses dados em algum lugar então a gente vai lá e adiciona um banco de dados nesse sistema ok tá feito Qual que é o problema agora nesse sistema
a gente tem somente um Web Server para 1 milhão de usuários esse o Web Server receber um overload alguns usuários vão ter delay ou até mesmo não vão conseguir acessar o serviço então o que que a gente faz a gente aumenta a quantidade de web servers e adiciona um load balancer Por que que a gente tem que adicionar um load balancer a gente precisa saber quais serviços e para onde encaminhar a chamada o load balancer ele tem o service Discovery ele faz o balanceamento de carga e ele sabe para onde encaminhar as chamadas caso um
dos Servidores Caia com isso a gente tira o acesso direto do usuário a gente deixa somente um Public IP do load balancer e o load balancer encaminha a chamada pros Private IPS que seri os servidores Mas e o banco de dados o banco de dados a gente pode adicionar uma técnica chamada mestre slave o mestre slave consiste em ter vários bancos de dados um recebe o wres e outros recebem os reads por quê Porque se todos recebessem os wres a gente teria um problema de consistência como que a gente faria a sincronização de dados desses
bancos de dados como que a gente preveniria o Race condition várias web servers acessando o mesmo Record alterando o mesmo Record A gente pode acabar sobrepondo um tipo de dado então para isso a gente tem um mestre slave caso o mestre caia a gente elege um dos slaves E caso um dos slaves caia a gente faz um spinup de outro slave e tá tudo certo beleza então com isso o nosso serviço agora tá mais ou menos assim a gente tem ali o load balancer tem vários servidores E tem também o mestre e o slave Ok
bom agora a gente começa a pensar como que a gente melhora a performance desse sistema banco de dados a gente pode adicionar um cche que que o cche faz se o dado existe no cche a gente lê o dado do cche se não a gente lê do banco de dados é uma camada a mais caso a gente tenha um dado que é frequentemente acessado beleza resolvemos um problema a gente tem mais performance bom a gente pode também adicionar um CDN que que o CDN faz para que que serve um CDN é um servidor estrategicamente localizado
em algum lugar que é mais perto do cliente então é o Cash de coisas estáticas do serviço então a gente pode adicionar algumas imagens do site a gente pode qualquer coisa estática do serviço no CDN algumas considerações quando a gente tá usando o CDN é praticamente a mesma coisa que um cche Beleza então a gente pega as imagens por exemplo do CDN se não tiver no CDN a gente pega do Servidor a gente tem que considerar também o custo Quando que a gente vai expirar os dados que estão no CDN Se for muito curto a
gente faz mais chamadas pro server Se for muito longo a gente pode ter algum tipo de imagem obsoleta ali no CDN ou algum tipo de dado e assim ficaria o nosso sistema né a gente tem ali o CDN a gente tem o load balancer tem os servidores a gente tem agora o Cash também e também tem o banco de dados como que a gente pode escalar mais ainda esse sistema a gente percebe que a gente mantém o estado dos usuários ou por exemplo as sessões dos usuários nos servidores Então a gente tem um stateful web
Tier para escalar mais ainda a gente tem que mover o nosso sistema para um stateless então a gente tira o estado do usuário do Servidor e adiciona em algum lugar e esse lugar poderia ser até mesmo um no seo ou algum tipo de banco de dados por exemplo a gente tem aqui a sessão do usuário no servidor um e esse usuário acessa o servidor 2 o que que acontece a gente já não tem mais a sessão do usuário isso seria um problema a gente pode resolver esse problema com stick sessions no load balancer Mas isso
é um tópico para outro vídeo mas para resolver esse problema a gente teria que adicionar um tipo de shared Storage então qualquer usuário que acessar o Web Server a gente vai pegar essa sessão do usuário desse shared Storage que poderia ser nada mais nada menos que um no ciclo então o nosso sistema ficaria dessa forma a gente tem agora vários servidores que eles podem escalar com al scale pegam as sessões dos usuários de um no Cico então seria um stateless web Tier outra coisa que a gente pode adicionar por exemplo se o nosso site viralizasse
ou ficasse famoso internacionalmente a gente poderia adicionar mais de um data center com esses data Centers a gente pode ter algum tipo de algoritmo para fazer o Ge route ou seja ele faz o DNS Verifica o IP do usuário e envia o usuário para um data center mais perto dele então diminui a latência também E caso um dos data Centers caia a gente envia o usuário pro outro data center mais ou menos do que a gente tinha antes mas agora a gente mantém o serviço mais perto do usuário ok a gente tem o nosso sistema
tá bonito tem Cash Tem banco de dados tem noci tem CDN como que a gente faz para desacoplar mais ainda o nosso sistema ok a gente tem o nosso sistema tá bonito tem banco de dados tem Cash tem nosco como que a gente pode desacoplar mais ainda o nosso serviço pensando em uma arquitetura de microservices a gente pode pensar em algum tipo de serviço ou função que o nosso sistema faça e desacoplar essa função para isso a gente poderia adicionar uma message queue por exemplo Então vamos supor que o nosso site ele tenha um processamento
de foto para isso a gente tem um producer onde que ele produz uma mensagem ou uma request para processar aquela foto e a gente tem também um consumer onde ele consome e processa aquela foto por que isso é bom caso a gente tenha uma demanda da alta desse dessa função no sistema a gente pode adicionar mais produtos e a gente pode adicionar mais consumos conforme a gente precisa e ainda mais a gente Adiciona uma camada de segurança Porque caso o consumer que seria um por exemplo um serviço de processar fotos ele caia a gente continua
com as chamadas que a gente fez ali pr pra message kill Então a gente tem ali as message kills estão fazendo Storage dessas dessas chamadas dessas requests então caso o consumer caia a próxima vez que ele subir ele vai receber essas mensagens que Estão guardadas ali na na Message queue com isso o nosso sistema fica dessa forma agora a gente tem um sistema complexo a gente tem load balance a gente tem message queue a gente tem serviços diferentes a gente tem Cash banco de dados no CIC ou CDN para isso a gente precisa manter a
segurança e precisa monitorar esse sistema então a gente pode adicionar logs a gente pode adicionar métricas a gente monitora esse sistema e a gente pode fazer automações com pipelines de cicd justamente para prevenir problemas na hora de subir esse sistema com isso a gente tem um sistema completo não é mesmo talvez não aí agora a gente tem um serviço gigantesco como que a gente pegaria esses dados do banco de dados porque agora tem tem muito dado né ficaria lento no banco de dados só lógico a gente fez a replicação mas isso só adicionou redundância a
gente tem mais banc de dados com os mesmos tipos de dados com a mesma quantidade de dados Lembrando que vertical scaling é aumentar o CPU A Ram e o disco horizontal scaling é aumentar a quantidade de servidores para fazer isso em um banco de dados a gente pode adicionar um método chamado sharding Como que funciona esse sharding bom vamos pegar um exemplo aqui que a gente usa a sharding aqui como o user ID vamos supor que a gente tem quatro chards se a gente fazer o módulo do user Ed por 4 a gente vai acabar
caindo em um desses chards por exemplo se eu adicionar aqui se eu abrir a calculadora e mostrar isso vamos supor que a gente tenha aqui 35 módulo de 4 a gente tem o 3 33 1 32 0 35 3 por esse exemplo a gente percebe que sempre vai cair em um desses quatro então é basicamente por exemplo vamos supor que a gente tem um livro de 400 páginas a gente precisa procurar uma frase dentro desse livro é mais fácil a gente achar a frase em 100 páginas do que achar em 400 então é a mesma
lógica que a gente tá usando aqui então a gente teria quatro shards onde alguns dos usuários seriam distribuídos Entre esses shards então a gente saberia Aonde achar esse usuário e onde também fazer o Storage desses usuários agora a gente tem um serviço completo que a gente consegue suportar 1 milhão de usuários por quê Porque a gente Manteve o Web cheer stateless a gente desacoplado algumas das funções do Web Server a gente adicionou no cle cche a gente fez o charing da Database a gente adicionou o message queue para justamente diminuir o overload e também ter
mais disponibilidade a gente adicionou o CDN e fez o horizontal scaling conforme a necessidade Óbvio tem diversas perguntas que a gente não fez aqui por exemplo como que a gente faz o recharging como que a gente aumenta os chards considerações na hora de usar o cach ou CDN Por que a gente escolheu o no sequel qual que é as vantagens da message kill Como que o load balancer funciona então tem diversas perguntas que eu vou responder nos próximos vídeos se tu curtiu esse vídeo isso foi só uma introdução de System design se quer saber mais
sobre esse assunto mantém aí no canal eu vou continuar uma série vou falar sobre os building Blocks e quando eu digo building Blocks eu digo cada uma dessas ferramentas que a gente utiliza para fazer o System design por exemplo banco de dados cash no squel load balancer CDN isso tudo são blocos que ajudam a gente construir esse sistema Beleza então é isso fica com esse vídeo aí curtiu deixa o like e tamo junto valiu