Imagine que você, em sua posição de TI, precisa substituir uma aplicação antiga, porém crítica, que da maneira que roda hoje, não é mais capaz de satisfazer as necessidades do negócio. Você passou meses trabalhando com requisitos para a nova aplicação, incluindo funcionalidades, segurança, conformidade, resiliência e escalabilidade e escolheu a plataforma que demonstrou que pode atender a todos os requisitos. Seu próximo passo é determinar onde hospedar a nova aplicação.
Como muitas outras empresas, a sua também quer se afastar de soluções de hardware físicos tradicionais e em vez disso, avançar para uma infraestrutura como serviço (IaaS) baseada em nuvem. Então, agora você está procurando por um provedor de nuvem que possa atender às suas necessidades a nível de infraestrutura, incluindo a segurança, resiliência e escalabilidade.
Você descobre que a maioria dos provedores de IaaS estão preparados para atender às suas necessidades de segurança, utilizando um conjunto de ferramentas e processos comuns. Mas quando se trata de alcançar escalabilidade para sua nova aplicação, você descobre que os provedores de nuvem são muito diferentes um do outro e isso requer que você arregace as mangas e aprenda sobre capacidades de nuvem que você nunca ouviu falar. Por exemplo, de repente você é apresentado a um novo termo, chamado autoscaling.
Como engenheiro de soluções focado no fornecimento de soluções baseadas em nuvem, tive a oportunidade de trabalhar com alguns profissionais de TI que não estavam familiarizados com os meandros de autoscaling. É importante entender esta nova funcionalidade quando você começa a procurar por seu provedor de nuvem, para garantir que você escolha o fornecedor que seja mais adequado às suas necessidades.
O que é autoscaling?
Autoscaling é um meio de alocar dinamicamente recursos para a sua aplicação, a fim de atender a demanda atual ou para assegurar que a infraestrutura da sua aplicação permaneça saudável.
É importante saber que há uma série de maneiras diferentes para escalar sua aplicação na nuvem, portanto você deve decidir qual delas irá atender às suas necessidades. As três abordagens mais comuns são scale-in/out, scale-up/down e cloud bursting. Com o scale-in/out, você adiciona/remove instâncias em seu ambiente, ampliando/reduzindo a infraestrutura da aplicação como um todo. Esta técnica pode ser complexa porque você tem que garantir que sua aplicação saiba lidar com adição/remoção de workloads completos dinamicamente. Por exemplo, se você quiser adicionar um novo servidor web, a sua solução de escalabilidade deve ser capaz de adicionar o servidor como um membro do pool do balanceador de carga e realizar a conexão com a camada de aplicação.
Se você precisa manter sua solução de autoscaling um pouco menos complexa, você pode optar por escalar verticalmente sua aplicação, utilizando scale-up/down, isto é, aumentar/reduzir o tamanho de suas instâncias existentes, como adição/remoção de processamento e memória. Muitos provedores de nuvem já têm APIs que podem ser utilizadas para adicionar/remover processamento e memória. Além disso, alguns dos sistemas operacionais mais recentes podem reconhecer os recursos adicionados sem exigir uma reinicialização.
Outra forma de autoscaling é comumente referido como cloud bursting. Com cloud bursting, a aplicação está hospedada em um único local, como uma nuvem privada ou em hardware físico e pode dinamicamente provisionar servidores adicionais em uma nuvem pública para atender picos de demanda temporários. Esta abordagem pode ser complexa, pois você vai possuir infraestrutura localizada em locais geográficos distintos e sua aplicação deve ser capaz de suportar este tipo de configuração.
Ao escolher a solução de autoscaling que é certa para o seu negócio, considere o custo e a complexidade de cada uma e pese isso contra os benefícios que você espera ganhar. Cada tipo de carga de trabalho é mais adequada a um tipo de escalabilidade. Para saber um pouco mais sobre a diferença entre scale-up e scale-out e quando utilizar cada um deles, acesse https://www.somosagility.com.br/scale-up-e-scale-out-qual-a-diferenca-quando-e-como-utilizar-cada-um-deles/.
Por que você deve considerar autoscaling
Agora que você já está familiarizado com o autoscaling, você ainda deve ter algumas perguntas a fazer como, por que utilizar e como escolher as aplicações que devem ser migradas para essa abordagem. Suas aplicações estão prontas? O que você deve fazer para adequá-las? Deve reescrevê-las totalmente? Antes de prosseguir, você quer saber: Realmente vale a pena? Há algum risco?
Por que autoscaling?
Um dos benefícios mais populares do autoscaling é o controle de custos da infraestrutura, reduzindo/expandindo sua infraestrutura para atender a demanda atual e real. A economia é obtida aproveitando o modelo de cobrança aplicado na nuvem, no qual você paga apenas pelos recursos que você usa. Isto está em contraste com a abordagem tradicional de infraestrutura para atender os picos de demanda, o que leva a subutilização de recursos, e consequentemente um retorno menor sobre o investimento.
Outro grande benefício do autoscaling é garantir que os requisitos de disponibilidade de sua aplicação sejam atendidos. Em outras palavras, garantir a resiliência da aplicação. Com esta abordagem, você desenvolve uma solução que pode identificar falhas de instâncias e automaticamente substituí-las por instâncias saudáveis de forma transparente para a aplicação.
Métodos para atingir o autoscaling
Existem dois métodos principais para implementação de uma solução de autoscaling. A opção que você escolher vai depender de uma série de fatores, incluindo ferramentas disponíveis, assim como a capacidade de suas equipes de desenvolvimento de usar essas ferramentas de maneira eficaz. O primeiro método é chamado de bootstrapping. Com este método, a instância é configurada de forma dinâmica, assim que ela é iniciada. Por exemplo, se sua aplicação precisa de outro servidor web, a instância irá baixar o software necessário, instalar e configurar-se como um servidor web durante o processo de inicialização. Este método pode criar um pouco de complexidade, uma vez que requer um conjunto de ferramentas de terceiros para fornecer as funções de automação.
O segundo método de implementação de autoscaling é ter máquinas virtuais pré-configuradas que podem ser ligadas e adicionadas ao seu ambiente quando necessário. Então, se você tiver uma arquitetura de aplicação de três camadas, que inclui web, aplicação e banco de dados, você teria instâncias adicionais desligadas para cada uma das camadas para serem ligadas quando necessário.
Cuidado com o vendor lock-in
Muitos provedores de nuvem têm desenvolvido suas próprias capacidades de autoscaling. Isso pode incluir o uso de APIs personalizadas que são relevantes apenas para aquele provedor.
Se você gastar todo o seu tempo desenvolvendo uma solução de autoscaling que funciona apenas com as APIs de um provedor de nuvem específico, torna-se muito difícil migrar sua aplicação para outra plataforma de nuvem sem ter que redesenhar completamente sua solução de autoscaling. Há uma série de ferramentas de autoscaling disponíveis no mercado que são agnósticas ao fornecedor de nuvem. Considere o uso dessas ferramentas para manter sua solução de autoscaling portátil e evitar o vendor lock-in.
Análise de custo-benefício
Finalmente, antes de tornar o autoscaling um requisito para a sua aplicação, é importante que você compare os custos de implementação de uma solução desse tipo contra as economias que você espera ter implementando-a. Alguns custos a considerar ao implementar uma solução de autoscaling são: o trabalho de desenvolvimento, licenças de software e manutenção da aplicação, bem como a recorrente adequação da solução de autoscaling para que ela se mantenha atualizada com as mudanças na aplicação. Além disso, você tem que considerar a quantidade de esforço necessário para integrar uma solução de autoscaling à sua aplicação. As aplicações mais modernas são projetadas para serem de baixo acoplamento para facilitar o autoscaling. Isso pode ajudar a reduzir o tempo de desenvolvimento e, portanto, os custos necessários para obter a solução implementada. Aplicações mais tradicionais que não foram projetadas para serem dinamicamente reconfiguráveis vão exigir mais esforço de desenvolvimento e, em muitos casos, pode não valer a pena o investimento para obter a solução implementada.
Depois de entender o custo total de implementação de uma solução de autoscaling, você precisa então comparar esse custo com as economias que você terá ao implementar a solução, e então determinar se faz sentido financeiramente.
Você enfrenta muitos desafios ao selecionar a melhor aplicação para atender às suas necessidades de negócios atuais e futuras. Case essa decisão com a necessidade de selecionar o melhor provedor de nuvem IaaS para hospedar essa aplicação, e a decisão torna-se ainda mais difícil. Compreender os benefícios do autoscaling, as suas considerações importantes, e como realizar uma análise de custo-benefício irá prepará-lo para selecionar o melhor fornecedor de IaaS para atender às suas necessidades. No próximo artigo vou falar sobre microsserviços!