Sistema lento? (Chegou a hora de escalar) // Palestra

Sistema lento? (Chegou a hora de escalar) // Palestra

Introdução

Visão Geral da Seção: Nesta seção, o palestrante introduz o tema da estabilidade em sistemas de software e a importância de evitar quedas e interrupções.

Estabilidade em Sistemas de Software

  • A importância da estabilidade em sistemas de software.
  • Exemplos de situações em que sistemas instáveis podem causar problemas.
  • Desafios enfrentados por empresas em crescimento na implantação e manutenção de sistemas estáveis.

Amadurecimento Prematuro

Visão Geral da Seção: Nesta seção, o palestrante discute os desafios enfrentados por startups e empresas em crescimento que lidam com problemas de estabilidade prematura.

Desafios do Amadurecimento Prematuro

  • Problemas enfrentados por startups que crescem rapidamente.
  • Dificuldade em lidar com aumento repentino no número de clientes.
  • Impacto na qualidade do sistema quando não há tempo suficiente para implementar melhorias.

Incerteza e Paranóia

Visão Geral da Seção: Nesta seção, o palestrante aborda a incerteza e a paranóia associadas à estabilidade dos sistemas, destacando como isso pode afetar a percepção dos usuários.

Incerteza e Paranóia na Estabilidade dos Sistemas

  • A sensação constante de incerteza sobre o funcionamento do sistema.
  • O medo de quedas repentinas ou problemas técnicos.
  • A dificuldade em ter certeza se o sistema está realmente fora do ar ou se há outros fatores envolvidos.

Sinais de Queda do Sistema

Visão Geral da Seção: Nesta seção, o palestrante descreve os sinais comuns que indicam uma queda do sistema e como isso afeta a equipe de operações.

Sinais de Queda do Sistema

  • O telefone tocando em diferentes setores da empresa.
  • Mentiras comuns contadas para ganhar tempo.
  • A culpa sendo atribuída à internet ou a outros elementos externos.

Técnicas para Evitar Quedas

Visão Geral da Seção: Nesta seção, o palestrante compartilha técnicas e estratégias para evitar quedas e melhorar a estabilidade dos sistemas.

Técnicas para Melhorar a Estabilidade

  • Análise das telas de erro e mensagens de falha.
  • Identificação e resolução de problemas no load balancer.
  • Troca de mensagens enganosas por informações mais claras.
  • Escalonamento adequado do sistema para lidar com aumento na demanda.

Conclusão

Visão Geral da Seção: Nesta seção final, o palestrante conclui sua apresentação sobre estabilidade em sistemas de software e destaca a importância de implementar medidas preventivas.

Importância das Medidas Preventivas

  • A necessidade de adotar medidas preventivas para evitar quedas do sistema.
  • A importância de analisar as causas raiz dos problemas e implementar soluções duradouras.

Confiabilidade e Monitoramento

Visão Geral da Seção: Nesta seção, o palestrante discute a importância da confiabilidade e do monitoramento adequado dos sistemas desenvolvidos pelas empresas. Ele destaca que a falta de confiabilidade pode levar à perda de contratos e notificações judiciais. O palestrante também enfatiza a frase "não se gerencia o que não se mede", ressaltando a necessidade de um processo de gerenciamento e monitoramento eficaz.

A importância do monitoramento adequado

  • Sem um monitoramento adequado, é difícil saber o que está acontecendo nos sistemas.
  • O monitoramento não deve ser apenas reativo, mas também proativo, fornecendo alertas antes que ocorram problemas graves.
  • É importante ter uma plataforma ou ferramenta para coletar métricas e acompanhar o desempenho diário dos sistemas.
  • O objetivo do monitoramento é descobrir onde estão os gargalos e identificar as causas raiz dos problemas.

Escalando verticalmente vs. horizontalmente

  • Ao lidar com picos de tráfego em diferentes horários, é necessário decidir entre escalonar verticalmente (adicionando mais recursos à máquina existente) ou horizontalmente (adicionando mais máquinas).
  • A escalabilidade vertical envolve aumentar os recursos em uma única máquina, como processadores, memória e disco.
  • A escalabilidade horizontal envolve adicionar mais máquinas para distribuir a carga, como servidores de aplicação e bancos de dados.
  • Ambas as abordagens têm impactos positivos e negativos, e é importante considerar o cenário específico antes de tomar uma decisão.

Análise do volume de tráfego e otimização

  • Antes de escalar horizontalmente, é importante analisar o volume de tráfego da aplicação.
  • É necessário avaliar se há versões modificadas ou bibliotecas desnecessárias que podem ser removidas para melhorar o desempenho.
  • Mover recursos estáticos para fora do servidor de aplicação pode ajudar a reduzir a carga no processamento das requisições.
  • A compactação dos dados pode diminuir significativamente o tempo de transferência.

Considerações Finais

Visão Geral da Seção: Nesta seção final, o palestrante destaca a importância de pensar cuidadosamente na estrutura e escalabilidade dos sistemas antes de tomar decisões. Ele enfatiza que entender o volume do tráfego, otimizar o código e escolher a abordagem correta (vertical ou horizontal) são fundamentais para garantir um sistema eficiente.

Planejando a estrutura adequada

  • Antes de escalar horizontalmente, é importante analisar o volume do tráfego da aplicação e realizar otimizações no código existente.
  • Decidir entre escalonamento vertical ou horizontal depende das necessidades específicas do sistema e das demandas de tráfego.
  • A estrutura escolhida deve levar em consideração fatores como custo, eficiência e utilização adequada dos recursos disponíveis.

Conclusão

  • O monitoramento adequado e a escalabilidade correta são fundamentais para garantir a confiabilidade e o desempenho dos sistemas desenvolvidos pelas empresas.
  • É importante ter processos de gerenciamento e monitoramento eficazes para identificar problemas antes que eles se tornem graves.
  • Ao tomar decisões sobre escalabilidade, é necessário considerar o volume do tráfego, otimizar o código existente e escolher a abordagem mais adequada (vertical ou horizontal).

Fim da Transcrição

Conexões TCP e Relacionamentos no HTTP/2

Visão Geral da Seção: Nesta seção, o palestrante discute a abertura de conexões TCP para cada solicitação no HTTP/1. Ele menciona que isso pode ser resolvido ou atenuado no HTTP/2, onde as conexões podem ser mantidas abertas e reutilizadas.

Abertura de Conexões TCP no HTTP/1

  • No HTTP/1, é necessário abrir uma nova conexão TCP para cada solicitação.
  • Isso resulta em um grande número de conexões sendo estabelecidas e encerradas constantemente.
  • O palestrante destaca que isso pode afetar o desempenho e a eficiência do sistema.

Solução no HTTP/2

  • No HTTP/2, as conexões TCP podem ser mantidas abertas e reutilizadas para várias solicitações.
  • Isso reduz a sobrecarga de abrir e fechar conexões repetidamente.
  • O relacionamento entre os clientes e servidores também se torna mais maduro, saudável e feliz.

Benefícios do HTTP/2

  • Com o uso do HTTP/2, é possível economizar recursos ao evitar a necessidade de abrir múltiplas conexões TCP.
  • Isso melhora o desempenho geral do sistema e otimiza o tráfego na rede.

Retorno de Dados em Serviços

Visão Geral da Seção: Nesta seção, o palestrante discute como retornar dados em serviços eficientemente. Ele destaca a importância de retornar apenas os dados necessários para evitar sobrecarga na rede.

Retorno de Dados Completo

  • Em alguns casos, os serviços retornam todos os campos de uma entidade, mesmo que apenas alguns sejam necessários.
  • Isso pode resultar em um grande volume de dados sendo transferidos pela rede.
  • O palestrante menciona que isso é especialmente problemático quando o serviço retorna grandes quantidades de dados desnecessários.

Otimização do Retorno de Dados

  • É recomendado retornar apenas os campos necessários para cada solicitação.
  • Por exemplo, ao invés de retornar todos os 98 campos de uma entidade, é possível retornar apenas o campo "nome".
  • Isso economiza recursos e melhora a eficiência da comunicação entre cliente e servidor.

Análise do Retorno dos Serviços

Visão Geral da Seção: Nesta seção, o palestrante discute a importância de analisar o retorno dos serviços para identificar possíveis otimizações. Ele destaca a necessidade de entender quais dados estão sendo retornados e como isso afeta o desempenho do sistema.

Análise do Retorno dos Serviços

  • É importante analisar o que está sendo retornado pelos serviços.
  • Ao entender quais dados estão sendo retornados, é possível identificar oportunidades de otimização.
  • O palestrante enfatiza a importância de analisar o tráfego e identificar possíveis gargalos ou ineficiências.

Migração para Gráfico

  • Para aqueles que estão migrando para gráficos, é essencial compreender o impacto do retorno dos dados nesse contexto.
  • Analisar o que está sendo retornado na equipe gráfica pode ajudar a identificar possíveis melhorias e otimizações.

Flexibilidade na Definição de Dados

Visão Geral da Seção: Nesta seção, o palestrante discute a flexibilidade na definição de dados em serviços. Ele destaca que não é necessário definir todos os campos de uma entidade e que isso pode ser feito de forma mais dinâmica.

Não Obrigação de Definir Todos os Campos

  • Ao definir uma entidade, não é obrigatório especificar todos os campos.
  • Por exemplo, ao invés de definir que uma pessoa tem nome, telefone e endereço, é possível usar um esquema mais flexível como o "macau stream".
  • Isso permite retornar apenas os campos necessários em cada solicitação.

Economia de Recursos

  • Ao retornar apenas os campos necessários, é possível economizar recursos.
  • Isso é especialmente importante quando o sistema é acessado por um grande número de pessoas.
  • A redução do tráfego resulta em melhor desempenho e eficiência geral do sistema.

Otimização do Tráfego com Paginação

Visão Geral da Seção: Nesta seção, o palestrante discute a otimização do tráfego utilizando técnicas de paginação. Ele destaca como essa abordagem pode economizar recursos e melhorar o desempenho do sistema.

Paginação para Reduzir Tráfego

  • Utilizar técnicas de paginação pode ajudar a reduzir o tráfego entre cliente e servidor.
  • Em vez de retornar todos os registros em uma única resposta, é possível retornar apenas uma parte dos dados por vez.
  • Isso economiza recursos e melhora a eficiência da comunicação.

Benefícios da Paginação Assíncrona

  • A paginação assíncrona é uma abordagem que permite ao cliente buscar mais dados conforme necessário.
  • Isso evita o envio de grandes volumes de dados desnecessários em uma única resposta.
  • O palestrante destaca que essa técnica pode ser especialmente útil em sistemas com alto tráfego.

Otimização do Tráfego com Cache

Visão Geral da Seção: Nesta seção, o palestrante discute como utilizar cache para otimizar o tráfego. Ele destaca a importância de gerar um cache dos dados mais acessados e como isso pode melhorar o desempenho do sistema.

Criação de Cache dos Dados Mais Acessados

  • É recomendado criar um cache dos dados mais acessados no sistema.
  • Isso permite evitar consultas repetitivas ao banco de dados, economizando tempo e recursos.
  • O palestrante menciona que essa abordagem é especialmente útil para estatísticas e c

Tabela Parcialmente

Visão Geral da Seção: Nesta seção, discute-se a ideia de uma tabela parcialmente carregada para melhorar o desempenho de consultas em bancos de dados grandes.

Tabela Parcialmente Carregada

  • Uma tabela muito grande pode ficar lenta, mesmo com índices.
  • A solução é usar uma técnica chamada "tabela parcialmente carregada".
  • Essa técnica consiste em carregar apenas os dados necessários para cada consulta.
  • Isso reduz o tempo de resposta e melhora o desempenho geral do banco de dados.

Desligando Triggers

Visão Geral da Seção: Nesta seção, discute-se a possibilidade de desligar triggers para otimizar consultas em bancos de dados.

Desligando Triggers

  • Em alguns casos, é possível desligar triggers durante operações que não exigem seu acionamento.
  • Isso pode melhorar significativamente o desempenho das consultas.
  • No entanto, é importante considerar as regras de negócio e garantir que nenhuma funcionalidade crítica seja afetada.

Escalabilidade Horizontal

Visão Geral da Seção: Nesta seção, discute-se a escalabilidade horizontal como uma estratégia para lidar com o aumento do volume de dados e tráfego em aplicações.

Escalabilidade Horizontal

  • A escalabilidade horizontal envolve distribuir a carga entre vários servidores ou máquinas.
  • Separar o banco de dados da aplicação é um primeiro passo para a escalabilidade horizontal.
  • Balancear a carga entre os servidores de aplicação também é importante para garantir um desempenho adequado.

Balanceamento de Carga

Visão Geral da Seção: Nesta seção, discute-se a importância do balanceamento de carga em aplicações distribuídas.

Balanceamento de Carga

  • O balanceamento de carga envolve distribuir as requisições entre vários servidores.
  • Isso evita sobrecarregar um único servidor e melhora o desempenho geral da aplicação.
  • Existem diferentes estratégias para realizar o balanceamento de carga, como round-robin e algoritmos mais avançados.

Autenticação Baseada em Sessão

Visão Geral da Seção: Nesta seção, discute-se a autenticação baseada em sessão e os cuidados necessários ao lidar com dados sensíveis no servidor.

Autenticação Baseada em Sessão

  • Alguns sistemas utilizam autenticação baseada em sessão, mantendo informações sensíveis no servidor.
  • É importante ter cuidado ao lidar com esses dados e garantir que eles sejam protegidos adequadamente.
  • O uso de tokens ou containers pode ser uma solução para manter a segurança dos dados durante o processo.

Microservices vs. Monolítico

Visão Geral da Seção: Nesta seção, discute-se a diferença entre arquitetura de microservices e sistemas monolíticos.

Microservices vs. Monolítico

  • Os sistemas monolíticos são mais difíceis de manter e escalar, pois possuem alta coesão e acoplamento.
  • A arquitetura de microservices permite decompor o sistema em serviços independentes, facilitando a manutenção e escalabilidade.
  • No entanto, a adoção de microservices também traz desafios de gerenciamento e compatibilidade entre diferentes tecnologias.

Escalando Banco de Dados

Visão Geral da Seção: Nesta seção, discute-se os desafios e estratégias para escalar bancos de dados.

Escalando Banco de Dados

  • Escalar um banco de dados é um desafio complexo, pois envolve garantir consistência e coerência dos dados.
  • Duas estratégias comuns para escalar bancos de dados são replicação e particionamento.
  • A replicação envolve criar cópias do banco de dados inteiro, enquanto o particionamento divide os dados em partes menores para melhor distribuição.

Essas são as principais informações abordadas no vídeo.

Replicação de bancos de dados

Visão geral da seção: Nesta seção, o palestrante discute a replicação de bancos de dados e seus benefícios.

Replicação para fins de backup e desastre

  • A replicação permite que um banco de dados seja copiado para outro, transmitindo todas as alterações feitas no banco original.
  • Além do backup, a cópia pode ser usada para fins de recuperação em caso de desastres.
  • É possível apontar servidores diferentes para a cópia do banco, permitindo que relatórios e estatísticas sejam gerados sem afetar o banco principal.

Balanceamento de carga e separação física dos bancos

  • A replicação também permite o balanceamento da carga entre diferentes servidores.
  • É possível separar fisicamente as bases de dados, por exemplo, por região ou cliente.
  • No entanto, é importante considerar a complexidade adicional ao implementar essas estratégias.

Tolerância a particionamento

Visão geral da seção: Nesta seção, o palestrante aborda o conceito de tolerância a particionamento em sistemas distribuídos.

Complexidade da tolerância a particionamento

  • A tolerância a particionamento refere-se à divisão dos dados em sistemas distribuídos.
  • Essa complexidade aumenta quando há necessidade de garantir consistência e disponibilidade dos dados.
  • Exemplos práticos incluem reservas em sites como booking.com, onde é necessário garantir que não ocorram conflitos na reserva do mesmo quarto por clientes em diferentes regiões.

Consistência, disponibilidade e particionamento

Visão geral da seção: Nesta seção, o palestrante explora a relação entre consistência, disponibilidade e particionamento em sistemas distribuídos.

O teorema CAP

  • O teorema CAP estabelece que é impossível ter simultaneamente consistência, disponibilidade e tolerância a particionamento em um sistema distribuído.
  • Ao focar na disponibilidade e no particionamento, pode-se perder a consistência dos dados.
  • É importante considerar as necessidades específicas do sistema ao tomar decisões sobre consistência, disponibilidade e particionamento.

Exemplo de reserva de hotel

Visão geral da seção: Nesta seção, o palestrante apresenta um exemplo prático de reserva de hotel para ilustrar os conceitos discutidos anteriormente.

Garantindo vendas sem conflitos

  • Em um sistema distribuído de reservas de hotel, é necessário garantir que não ocorram conflitos quando dois clientes tentam reservar o mesmo quarto.
  • Dependendo das necessidades do negócio, pode-se priorizar a disponibilidade (garantindo que nenhuma venda seja perdida) ou a consistência (validando a disponibilidade antes da venda).

Essas são as principais informações abordadas no vídeo. Certifique-se de assistir ao vídeo completo para obter todos os detalhes e contexto fornecidos pelo palestrante.

Desenvolvimento de Sistemas e Escalabilidade

Visão Geral da Seção: Nesta seção, o palestrante discute a importância do desenvolvimento de sistemas escaláveis e os cuidados necessários ao realizar operações em ambiente de produção.

Cuidados com Operações em Ambiente de Produção

  • É importante ter cuidado ao realizar manutenções em ambiente de produção, pois isso pode causar problemas no sistema.
  • Recomenda-se estabelecer janelas de manutenção para evitar interrupções no acesso ao sistema.
  • Em sistemas que funcionam 24 horas por dia, é necessário ter ainda mais cautela ao planejar as manutenções.
  • A escolha da linguagem de programação ou biblioteca não deve ser baseada apenas na velocidade de execução, mas sim na escalabilidade do sistema.
  • A forma como a infraestrutura é projetada tem um impacto maior na escalabilidade do que a linguagem utilizada.

Importância da Escala e Forma como Você Escala

Visão Geral da Seção: Nesta seção, o palestrante destaca a importância da forma como um sistema é escalado e explica que a escolha da linguagem não é determinante nesse aspecto.

Importância da Forma como Você Escala

  • A forma como você projeta sua infraestrutura tem um impacto significativo na escalabilidade do sistema.
  • Mesmo utilizando uma linguagem considerada mais rápida, se a infraestrutura não for adequada, podem ocorrer problemas de escalabilidade.

Recomendações Finais

Visão Geral da Seção: Nesta seção, o palestrante faz algumas recomendações finais e divulga um curso online sobre JavaScript.

Recomendações Finais

  • O palestrante encerra a apresentação convidando os espectadores a conhecerem o curso online sobre JavaScript disponível no site da Agile Code.
  • Ele menciona que o curso aborda diversos aspectos do JavaScript e oferece um cupom de desconto especial válido até 2019.

Essas são as principais informações abordadas na apresentação, destacando a importância do desenvolvimento de sistemas escaláveis, os cuidados necessários em ambiente de produção e a forma como você projeta sua infraestrutura para garantir uma boa escalabilidade.

Video description

✅Será que dominar a linguagem JavaScript não é o que está faltando para você trabalhar naquele lugar que sempre sonhou? Uma coisa eu posso garantir, o JavaScript Masterclass vai ser uma experiência que você nunca mais vai esquecer! Saiba mais em https://www.javascriptmasterclass.com.br Confira outras séries do canal: 🔥Quer ficar por dentro de tudo sobre linguagens de programação, frameworks, automação de testes, padrões de projeto, segurança, escalabilidade, arquitetura e muito mais? Fique ligado nas nossas lives em https://www.youtube.com/playlist?list=PLQCmSnNFVYnQ3Y90gmCtdVIzmjC7gUh3v 🔥Escrever código com baixa qualidade, de forma ilegível e bagunçada pode até funcionar! No entanto, esse tipo de atitude, seja ela consciente ou não, resulta na contração de uma dívida que cobra juros altos, pagos com a perda constante de produtividade. Quer saber mais sobre qualidade de código? Então assista a nossa série este assunto em https://www.youtube.com/playlist?list=PLQCmSnNFVYnSpfpwwQGO8QHQ3CcizaZsV 🔥Você não pode deixar de ficar por dentro deste que é o software de controle de versão mais utilizado do mundo! Acompanhe esta série em https://www.youtube.com/playlist?list=PLQCmSnNFVYnRdgxOC_ufH58NxlmM6VYd1 Acompanhe nossas redes sociais: ➡️Instagram: https://www.instagram.com/rodrigobranas ➡️Twitter: https://www.twitter.com/rodrigobranas ➡️GitHub: https://github.com/rodrigobranas ➡️LinkedIn: https://br.linkedin.com/in/rodrigobranas ➡️Facebook: https://www.facebook.com/canalrodrigobranas Conheça todos os nossos treinamentos: 🚀AgileCode: https://www.agilecode.com.br Quer me conhecer melhor: 🎙️Entrevista no DEVNAESTRADA: http://bit.ly/dne-79-rodrigo-branas Outras informações: 🇧🇷Idioma: PT/BR