Escalabilidade
Escalabilidade é a capacidade da sua carga de trabalho de atender às demandas de negócios quase em tempo real, sem interromper a qualidade do serviço. A capacidade adicional tem sido tradicionalmente atribuída antecipadamente para acomodar picos previsíveis no tráfego, enquanto picos inesperados no tráfego são monitorados e alertas são publicados para aumentar a capacidade, em uma abordagem reativa.
O upscaling e o downscaling exigem intervenção manual e estão sujeitos a cálculos variáveis para a quantidade de alteração de capacidade e duração a ser mantida. Torna-se mais tedioso gerenciar os requisitos quando os picos são frequentes e imprevisíveis.
Esses tipos de cenários geralmente são gerenciados com capacidade de carga de trabalho permanente, o que ajuda a acomodar a carga, mas acarreta custos mais altos para executar cargas de trabalho a longo prazo. Ao contrário do local onde a capacidade de hardware é adquirida, independentemente do uso, o gerenciamento desse tipo de capacidade na nuvem não requer investimento permanente em infraestrutura e não há necessidade de atualização de hardware para se manter atualizado.
A carga de trabalho pode aumentar a capacidade de demanda na CPU, memória, armazenamento e entrada/saída (E/S), em que CPU e memória são parâmetros primários que flutuam drasticamente. A capacidade pode ser aumentada e reduzida de duas maneiras:
- Dimensionamento horizontal: A capacidade paralela está sendo adicionada para acomodar carga adicional.
- Dimensionamento vertical: Aumente e diminua a CPU e a memória, sem alterar a contagem de infraestrutura.
O dimensionamento horizontal é fácil de alcançar colocando balanceadores de carga na frente da infraestrutura de back-end. Isso distribui a carga sem afetar as transações existentes e contínuas. O dimensionamento vertical exige que a infraestrutura seja ampliada ou reduzida. A capacidade desejada é provisionada em paralelo e a carga de trabalho é transferida para uma nova capacidade. A carga de trabalho que está sendo transferida para a nova capacidade pode causar impacto mínimo ou nulo nas transações existentes se o sistema do aplicativo for projetado para gerenciar esses tipos de cenários.
Ao dimensionar um aplicativo, é importante considerar não apenas a carga de trabalho do próprio aplicativo, mas também o mecanismo de comunicação que o conecta com outros aplicativos. Um mecanismo de comunicação é um componente essencial de qualquer aplicação distribuída, permitindo que diferentes partes do sistema troquem informações e trabalhem juntas para alcançar objetivos comuns. À medida que a carga de trabalho de um aplicativo aumenta, também aumenta a demanda em seu mecanismo de comunicação. Se o mecanismo de comunicação não for projetado para dimensionar, ele poderá se tornar um gargalo, limitando o desempenho geral do aplicativo. Isso pode levar a uma experiência de usuário degradada, maior latência e até mesmo a falhas no sistema.
Projetar um aplicativo de arquitetura para dimensionar elasticamente requer uma consideração completa de todos os aspectos de computação, memória, armazenamento, rede, throughput e limites de limitação. As informações a seguir discutem cenários comuns para projetar um sistema escalável e de alto desempenho. Determine sua abordagem com base em suas necessidades organizacionais, valores de negócios e prioridades para executar e implantar sua carga de trabalho na OCI.
Escalonamento Sob Demanda
O dimensionamento sob demanda é um recurso de computação em nuvem que permite ajustar automaticamente os recursos alocados para seu aplicativo ou serviço com base na demanda atual. Você pode aumentar ou diminuir o número de servidores, armazenamento e outros recursos que usa em tempo real, com base na carga de trabalho. Por exemplo, o OCI Compute ajusta o número de instâncias de computação em um pool de instâncias com base em métricas e na programação para atender à capacidade desejada de acordo com a configuração.
Expansão e Expansão
Scale-in refere-se à redução do número de recursos alocados para um aplicativo ou serviço, enquanto scale-out refere-se ao aumento do número de recursos. Você pode usar ambos os tipos de dimensionamento para lidar com picos de carga. Por exemplo, as Instâncias Expansíveis da OCI são projetadas para cenários nos quais uma instância geralmente está ociosa ou tem baixa utilização de CPU com picos ocasionais. Depois que uma explosão é concluída, a instância é reduzida para a capacidade de linha de base.
Limites e Cotas do Serviço
Projete sua carga de trabalho para que ela seja equilibrada em diferentes módulos de um aplicativo para dimensionar, respectivamente. Considere também limites de serviço na tenancy e cotas de compartimento. Por exemplo, você pode criar 50 balanceadores de carga e 5000 MBps para um modelo de assinatura dos Créditos Universais da Oracle (a partir de hoje, o que pode mudar no futuro). Alguns limites de serviço são dinâmicos e podem ser aumentados ao longo do tempo com base no uso. Consulte seu modelo de preços do OCI para obter diferentes limites e cotas.
Alta Disponibilidade
Elimine pontos únicos de falha e projete sua carga de trabalho para garantir o máximo potencial de tempo de atividade e acessibilidade. A OCI fornece recursos de Alta Disponibilidade como domínios de falha e domínios de disponibilidade para garantir a redundância em sua carga de trabalho.
Por exemplo, distribuir sua infraestrutura de aplicativos para mais de um domínio de falha fornece antiafinidade para que sua carga de trabalho não esteja no mesmo hardware físico dentro do data center. Um domínio de disponibilidade adiciona uma camada adicional de confiabilidade, pois diferentes data centers na mesma região são isolados uns dos outros, são tolerantes a falhas e provavelmente não falharão simultaneamente. Os data centers em uma região são conectados uns aos outros com baixa latência e alta largura de banda, o que reduz os problemas de latência.
Recuperação de Desastre
Em caso de falha catastrófica de desastres naturais ou provocados pelo homem, é essencial ter um plano de contingência na carga de trabalho para se replicar em outra região. Um processo de recuperação é a única opção nesse tipo de cenário, e o nível de recuperação deve ser projetado com base na criticidade do aplicativo, no objetivo de tempo de recuperação associado (RTO) e no objetivo de ponto de recuperação (RPO). A OCI fornece vários métodos para abordagem de recuperação de desastres (DR) com base na durabilidade dos dados, RTO e RPO.
Por exemplo, você pode reconstruir seu sistema em outra região com base em um backup de banco de dados e provisionar infraestrutura com infraestrutura como serviço (IaaS) e DevOps para implementação de DR de baixo custo, mas maior perda e indisponibilidade de dados. Um sistema ativo/ativo com replicação em tempo real e compartilhamento de carga tem custo mais alto, mas quase zero perda de dados e tempo de inatividade.
Capacity Planning
Determine os recursos necessários para dar suporte às demandas atuais e futuras de sua carga de trabalho com base nos requisitos de desempenho e nas projeções de crescimento para alocar a quantidade certa de recursos e dimensionamento automático. Você pode usar métricas monitoradas históricas para projeções.
Por exemplo, você deve provisionar a forma e o tamanho do armazenamento do banco de dados antecipadamente com base na capacidade linear, em vez de sob demanda. Aproveitar o uso estatístico histórico pode ajudá-lo a definir a capacidade para evitar o dimensionamento ad hoc.
Monitoramento de Desempenho
Meça, rastreie e analise o desempenho de recursos de nuvem e estatísticas de aplicativos para seu aplicativo, a fim de garantir que eles atendam aos requisitos de desempenho e ofereçam desempenho ideal aos usuários. O monitoramento do desempenho é importante para que o aplicativo possa identificar problemas de desempenho e tomar ações corretivas antes de impactar os usuários. A OCI Application Performance Monitoring fornece um conjunto abrangente de recursos para monitorar aplicativos e diagnosticar problemas de desempenho.
Por exemplo, o Application Performance Monitoring fornece visibilidade profunda do desempenho e permite diagnosticar problemas rapidamente, enquanto você se concentra em fornecer os principais processos de negócios. A OCI cuida do monitoramento de vários componentes e da lógica de aplicativos distribuídos entre clientes, serviços de terceiros e camadas de computação de back-end, no local ou na nuvem.
Princípios de Desempenho
As aplicações devem ser projetadas para escalar em diferentes módulos e componentes. Para conseguir isso, é essencial que sua aplicação seja projetada para aproveitar as melhores práticas da OCI para ampliar com tempo de inatividade quase zero.
Por exemplo, se seu aplicativo já estiver dividido em microsserviços finos, ele poderá ser facilmente implantado e dimensionado para cenários de alto desempenho no Oracle Kubernetes Engine (OKE) ou OCI Container Instances. Como alternativa, você também deve considerar abordagens de implementação, como balanceadores de carga, Scatter-Gather (pooling e desanexação), cache de resultados, espaço compartilhado (enriquecimento de informações), pipe e filtro, MapReduce (junção em batch para gargalo de E/S), paralelo síncrono em massa, Execution Orchestrator etc. Existem padrões de design bem conhecidos, como Caching, Command Query Responsibility Segregation (CQRS), Anticorrupção, Disjuntor, Event Sourcing, Publisher Subscriber, Sharding, Strangler, Saga, Throttling e assim por diante, para fazer com que seu aplicativo funcione nativamente.
Custo Versus Capacidade
A capacidade na nuvem pode ser aumentada ou diminuída adicionando ou removendo a infraestrutura. É importante usar a capacidade que já foi provisionada com eficiência para reduzir o custo total de execução. Há alguns cenários em que os aplicativos críticos para os negócios têm exceções para provisionar capacidade antecipadamente para evitar violações de SLA, o que é justificado. Tome decisões com base nas necessidades e prioridades do negócio antes de decidir sobre a capacidade, uma vez que as necessidades de desempenho são proporcionais ao aumento do custo.
Eficiência
Um aspecto do design de aplicativos em nuvem para escalabilidade é lidar com o aumento da carga ou do tráfego de maneira econômica. Os aplicativos devem ser projetados e implementados para maximizar a eficiência para uso e custo de recursos. Você deve monitorar o uso de recursos e automatizar o máximo possível para dimensionamento automático, considerando a otimização de custos e o aprimoramento do desempenho. A OCI fornece capacidade de dimensionamento automático na maioria dos nossos serviços, com configuração. Alguns serviços de nuvem podem ser automatizados com sistemas de terceiros.
Compensações
As compensações são uma consideração importante para aplicativos em nuvem e escalabilidade. Eles envolvem tomar decisões sobre quais aspectos de um aplicativo priorizar para alcançar a escalabilidade. À medida que os aplicativos crescem e se tornam mais complexos, torna-se cada vez mais difícil otimizar todos os aspectos do aplicativo simultaneamente. Portanto, você deve fazer compensações para alcançar a escalabilidade ideal.
Algumas compensações comuns que você deve considerar são:
- Desempenho versus custo
- Flexibilidade versus complexidade
- Resiliência versus custo
- Escalabilidade versus segurança
- Tempo de comercialização versus escalabilidade
Uso de Serverless e Contêineres
O uso de contêineres e serverless pode melhorar significativamente a escalabilidade na OCI. Isso permite que os aplicativos sejam divididos em componentes menores e mais eficientes, que podem ser facilmente ampliados ou reduzidos conforme necessário. Na OCI, você pode escolher entre o OCI Container Engine for Kubernetes (OKE) para implantação de contêiner para dimensionar microsserviços de forma independente. Considere também o OCI Functions e o OCI Container Instances para aproveitar a arquitetura elástica de plataforma serverless para serviços altamente escaláveis para implantar sua carga de trabalho.
Consideração do Banco de Dados
Os dados são a parte mais crítica de qualquer aplicativo. Todo o seu sistema depende de integridade e informação. É importante considerar o tipo de banco de dados certo para atender às suas necessidades de aplicativos e negócios.
Houve um tempo em que as informações eram mantidas em sistemas de gerenciamento de banco de dados relacional (RDBMS). Agora na nuvem, você pode escolher entre várias opções de banco de dados e provedores. Hoje, os bancos de dados atendem a necessidades comerciais exclusivas e variam de micro tamanho a capacidade incrivelmente grande para lidar com dados.
Por exemplo, o Oracle Autonomous Database é o mais adequado para dados transacionais, enquanto o MySQL é mais adequado para análise e machine learning. Por sua vez, o banco de dados NoSQL da Oracle é adequado para dados simples, mas fornece respostas previsíveis de latência de milissegundos de um dígito para consultas simples. Você pode considerar a infraestrutura do Exadata para necessidades mais seguras, de alto desempenho e isolamento.
Consideração de Armazenamento
Os dados vêm em muitos formatos, tamanhos e frequência de acesso, mas sempre exigem espaço para armazenamento. Há opções do armazenamento de objetos, do armazenamento de blocos e do armazenamento de arquivos para armazenar dados, mas cada um tem uma finalidade específica. O OCI Object Storage foi criado para que qualquer tipo de conteúdo seja armazenado como armazenamento padrão, infrequente e de arquivamento. O OCI File Storage foi criado para fornecer um sistema de arquivos tradicional que pode ser montado como armazenamento de rede ou NFS. O OCI Block Volume destina-se a anexo a uma instância e pode ser usado como volume de inicialização e volume em blocos.
Referência de Desempenho
Essa abordagem é usada para determinar o nível de desempenho da linha de base de um aplicativo a ser executado na nuvem para manter em relação à carga antecipada. Estabelece um ponto de desempenho de referência. Este ponto é usado para pontos de referência futuros nas alterações necessárias ao dimensionamento para atender ao nível de desempenho desejado.
Teste de Carga e Stress
O teste de carga simula cargas quase reais do usuário para medir o desempenho da resposta do aplicativo ao aumento do tráfego. Isso verifica se um sistema pode lidar com cargas esperadas do usuário sem deteriorar o desempenho ou falhar. Ele também valida a escalabilidade de um sistema em relação à carga variável no aplicativo. Isso permite que o comportamento da resposta identifique gargalos e ajuda a otimizar a configuração do sistema e o planejamento de capacidade.
O teste de estresse vai além da carga esperada do usuário e valida a capacidade de um aplicativo de lidar com picos repentinos no tráfego ou carga incomum. Ele também valida se um sistema pode lidar com carga incomum e inesperada sem quebrar o sistema ou degradar drasticamente o desempenho. Isso empurra os limites do sistema para identificar fraquezas na arquitetura ou capacidade do sistema, o que ajuda a otimizar a escalabilidade e a resiliência do sistema.
Identificar Garrafas-Necks
Em aplicações em nuvem, é fundamental garantir a escalabilidade e o desempenho de uma aplicação para identificar gargalos e lidar com a degradação do desempenho em cascata. Identifique pontos no sistema em que o fluxo de dados ou processamento é restrito ou desacelerado, diminuindo o desempenho e potencialmente fazendo com que o sistema falhe contra a capacidade desejada. Os gargalos podem acontecer em várias áreas, incluindo rede, armazenamento, processamento e acesso ao banco de dados.
Abordagem Orientada por Dados
Use ferramentas de monitoramento e análise de dados para coletar e analisar dados para desempenho do sistema, padrões de uso e comportamento do usuário para implementar abordagem lógica e insights de dados para otimizar o desempenho, a capacidade e a escalabilidade do sistema. Isso leva a uma melhor experiência do usuário e maior valor comercial. Algumas etapas principais para implementar uma abordagem orientada a dados são:
- Coletar e analisar dados.
- Identificar padrões e tendências.
- Otimize a capacidade do sistema com base em insights.
- Monitore e ajuste continuamente o desempenho do sistema.
Monitorando a Integridade
O monitoramento da integridade dos aplicativos em nuvem é crucial para garantir a escalabilidade e o desempenho desejados. Um aplicativo saudável opera com eficiência e atende às demandas do usuário. Um aplicativo não saudável apresenta problemas, como tempo de resposta lento, alta taxa de erros e falhas. O monitoramento e a atuação na integridade dos aplicativos podem resultar na detecção precoce de problemas, na otimização do desempenho, na melhoria da experiência do usuário e na redução de custos. O OCI Monitoring monitora de forma ativa e passiva os recursos da nuvem usando o recurso de métricas e alarme para coletar e agir nas configurações.
Solução de Problemas de Desempenho
Os problemas de desempenho exigem abordagens diferentes para solucionar problemas em ambientes de nuvem. Seus níveis de acesso na nuvem podem ser diferentes do seu sistema local ou da infraestrutura local. As etapas que podem ajudá-lo a solucionar problemas de desempenho na nuvem são:
- Defina o problema.
- Colete os dados.
- Analisar dados.
- Identificar as causas do problema.
- Testar e isolar.
- Resolva o problema.
- Monitorar e validar.
Considere revisar as etapas comuns de solução de problemas fornecidas com cada serviço do OCI.
Identificar Limites de Serviço
É importante considerar limites de serviço de nuvem individuais para tornar seu sistema altamente escalável e atingir a capacidade máxima. Conhecendo os limites de desempenho, você pode projetar seu sistema para operar dentro dos limites e ajudar a evitar gargalos de desempenho ou interrupções de serviço. Por exemplo, uma instância de computação da OCI com uma máquina virtual ou bare metal sempre tem limites conhecidos e problemas a serem considerados. Você pode usar o OCI Load Balancer para aumentar o desempenho, implantando capacidade adicional por trás do balanceador de carga.
SLA de Serviço Independente
Projetar um sistema escalável e de alto desempenho requer uma consideração completa de cada SLA de serviço de nuvem para reduzir o tempo de inatividade, mesmo em caso de desastre. Cada serviço na nuvem tem um SLA bem definido e SLOs (Service Level Objectives). Talvez seja necessário considerar a redundância no sistema para atender ou superar a disponibilidade de serviços ou serviços individuais com o menor tempo de SLA. A OCI definiu o Objetivo de Nível de Serviço para Serviços de Nuvem Pública PaaS e SaaS para considerar em seu design e arquitetura.
Notas da Release
A OCI atualiza constantemente serviços com novos recursos, recursos e patches. Manter-se ciente das alterações mais recentes pode ajudar a melhorar seus aplicativos e implementar novos recursos. As atualizações também contêm correções de bugs e atualizações de segurança, interrupções de serviço e tempo de inatividade, alterações nos preços e planos de serviço, conformidade e alterações regulatórias. As Notas da Release da OCI fornecem uma view consolidada para que os serviços de nuvem se mantenham atualizados sobre anúncios e alterações.
Análise de Custo Versus Capacidade
Para escalabilidade, é importante considerar seus requisitos de tamanho e forma e adicionar um limite adicional. Também é importante considerar o serviço de nuvem adequado às suas necessidades em vez de simplesmente escolher serviços caros sem motivos que justifiquem o custo. Evite usar serviços desnecessários e adicionar camadas ao seu sistema para reduzir o custo e a latência. Uma análise completa do custo, dos recursos e da disponibilidade dos serviços em nuvem é crucial para projetar um sistema altamente econômico.