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.