O blog da AWS

Gerenciamento programático da capacidade de I/O dos volumes do Amazon EBS

Por Leandro Santi, Arquiteto de Soluções, Setor Público

 

Uma das principais vantagens da computação em nuvem é a capacidade de ajustar seus recursos de processamento dinamicamente, para que você tenha a capacidade certa com base na demanda que a empresa necessita a cada momento. No momento da implantação de uma nova carga de trabalho, uma decisão de equivocada de poder computacional pode causar um impacto negativo no desempenho da solução e uma experiência ruim do usuário quando a capacidade provisionada é menor do que a demanda. Por outro lado, o excesso de provisionamento de recursos pode aumentar desnecessariamente o custo da solução.

É por isso que o AWS Architecture Best Practices Framework define um princípio de design específico para melhor direcionar esses tipos de decisões, ajudando nossos clientes a tomar melhores decisões de capacidade.

Cargas de trabalho, como sistemas de liquidação salarial ou sistemas de cobrança de serviços públicos, geralmente funcionam sob regimes operacionais cíclicos, e muitas vezes precisam ter mais recursos de I/O (entrada/saída) alguns dias por mês (como esses sistemas geralmente precisam continuar operando regularmente enquanto os salários são liquidados ou ciclos de faturamento do cliente são executados).

Este artigo mostrará como implantar uma ferramenta baseada no AWS Step Functions e no AWS Lambda para modificar programaticamente o tipo de tecnologia de armazenamento e a quantidade de IOPs de volumes de armazenamento de instâncias do Amazon EC2, de modo que você possa controlar recursos de I/O em todo o ciclo operacional da instância do EC2.

 

Modificações de volume do EBS

O Amazon EBS permite que você faça alterações no tipo de volume e na capacidade de I/O do seu sistema de armazenamento, escolhendo entre uma variedade de opções de tecnologias que diferem em tipo, desempenho e preço. Em geral, duas grandes categorias de tecnologias de volumes são:

  • Volumes suportados por SSD, otimizados para cargas de trabalho de transação envolvendo operações freqüentes de leitura/gravação de tamanho pequeno de I/O, em que o atributo de desempenho dominante é IOPS ou número de operações de entrada/saída por segundo.
  • Volumes suportados por HDD, otimizados para cargas de trabalho de streaming em grande escala, em que a velocidade de processamento (medida em MIB/s) geralmente é uma medição de desempenho mais representativa do que a métrica de IOPS.

As opções disponíveis para volumes respaldados por SSD fornecidas pela AWS incluem volumes gp2, recomendados para uso geral devido à combinação de preço e desempenho suportada por uma variedade de cargas de trabalho.

Por outro lado, os volumes de IOPS provisionadas, como io1 e io2 fornecem desempenho superior para cargas de trabalho críticas, baixa latência ou alto throughput.

As opções de backup de HDD incluem unidades otimizadas para velocidade ou st1, projetadas para cargas de trabalho pesadas acessadas com freqüência; e HDD frio ou sc1, para cargas de trabalho com menor freqüência de acesso.

 

Suporte do EBS para modificar volumes

Um recurso muito útil que o Amazon EBS possui é a capacidade de modificar dinamicamente o tamanho, o desempenho e o tipo de volume sem precisar desconectar o volume ou introduzir a interrupção do serviço.

Usando solicitações de modificação de volume do EBS, podemos aumentar a capacidade de I/O e, portanto, ter capacidade extra durante o período de pico do mês. E uma vez que o processo esteja concluído, podemos reduzir a capacidade novamente e evitar custos desnecessários nos períodos do ciclo que têm menor atividade comercial.

Essas alterações podem ser facilmente feitas por meio do Console da AWS (e temos uma postagem de blog que aborda especificamente esse tópico), mas você também pode automatizar esse processo usando recursos do Lambda orquestrados com o AWS Step Functions.

 

Operações automáticas em volumes elásticos

Para facilitar a automação de solicitações de modificação de volume, criei uma solução que permite alterar dinamicamente o tipo de volume (*) e o número de IOPs quando o tipo em questão é io1 ou io2.

Seguindo as recomendações sugeridas para esse tipo de modificação, a solução primeiro gera um snapshot do volume do EBS caso as alterações precisem ser revertidas posteriormente. Em seguida, a solução gera uma solicitação para modificar o volume com base nos parâmetros solicitados pelo usuário:

  1. volume_id para especificar o identificador do volume do EBS a ser modificado.
  2. instance_id para indicar o identificador da instância do EC2 associada a esse volume.
  3. volume_type, para configurar o tipo de volume do EBS (por exemplo, “gp2”, “io1”, “io2”).
  4. volume_iops para especificar o número de IOPs quando o tipo é “io1” ou “io2” (e em outros casos este parâmetro deve ser a string vazia, ou seja, “”).

Esses parâmetros são fornecidos para a ferramenta usando um arquivo JSON contendo o seguinte formato:

{

    “parameters”: {

        “instance_id”: “i-09d7ace268bd7f4e4",

        “volume_id”: “vol-07189f5751cf87f68",

        “volume_type”: “io1",

        “volume_iops”: “400"

    }

}

Implementação e teste da solução

Para implantar a ferramenta, você precisa baixar o modelo do CloudFormation (disponível aqui) e, em seguida, ir para o console da AWS, selecionar o serviço CloudFormation e executar o script da seguinte maneira:

 

 

Em seguida, o CloudFormation solicitará um nome para implantar a stack (por exemplo, RescaleEBSIOPS).

 

 

Na etapa 3 (Configurar opções de pilha), toque em Avançar para passar para a etapa 4 (Revisão). Aqui nós simplesmente temos que marcar o aviso de criação de recursos do IAM e, em seguida, acionar a criação da pilha tocando em “Criar pilha”.

 

 

A implantação desta solução pode levar cerca de 5 minutos. Uma vez que a solução é implantada, podemos testa-la indo para o console do Step Functions e selecionando a máquina de estado recém-criada (no meu caso, o nome que escolhi é RescaleEBSIOPS).

 

 

Para acionar o teste, clique em “Iniciar execução” e digite o arquivo JSON com os parâmetros que definem a modificação do volume:

 

 

 

Desta forma, iniciamos a solicitação de modificação automática para o nosso volume EBS. Usando o console Step Functions, podemos monitorar o progresso deste processo: quando terminar, o console nos mostrará um detalhe do resultado:

 

 

Na exibição de volumes do console do EC2, podemos ver que a alteração foi efetuada:

 

 

Execução agendada com eventos do CloudWatch

Podemos automatizar a execução da ferramenta usando regras de eventos do CloudWatch e, dessa forma, permitir que nossas cargas de trabalho tenham a capacidade de I/O necessária em um momento específico, indo para o console do CloudWatch, selecionando a opção “Eventos”, e lá podemos configurar uma regra usando expressões cron, como este:

 

 

Nesse caso, configuramos o evento de modificação de volume do EBS para 0:00 no dia 22 de cada mês.

Em seguida, definimos o destino ou destino da regra, desta forma, usando o arquivo JSON de entrada semelhante ao mostrado acima.

 

 

Na próxima tela (passo 2), só teremos que inserir um nome para a execução e (opcionalmente) uma descrição. Finalmente, clicamos em “Criar regra”.

Da mesma forma, podemos criar uma regra suplementar para reduzir a capacidade original do volume do EBS após o término do ciclo de atividade, levando em consideração a documentação do Amazon EBS para os requisitos ao modificar volumes, e, em particular, o mínimo de 6 horas de tempo entre as solicitações de modificação.

 

Validação da execução

Para validar os resultados das execuções agendadas na etapa anterior, podemos ir para o console Step Functions e selecionar a máquina de estado implantada na stack do CloudFormation (RescaleEBSIOps). Na parte inferior da página, temos um detalhe das execuções individuais acionadas pelo CloudWatch Events:

 

 

Em nosso exemplo, dobrando o número de IOPs na instância m5.large, usando métricas do CloudWatch, podemos ver o efeito da alteração no número de IOPs e na latência das operações de I/O e throughput do sistema de armazenamento:

 

 

Limites

Existem certas limitações sobre os tipos de modificações que podem ser feitas em volumes, e a frequência com que um determinado volume pode ser alterado. Para obter mais detalhes, você pode acessar os requisitos modificando volumes e limites na documentação do Amazon EBS.

 

Opinião

Usando as Modificações Elásticas de Volume do EBS, você pode contar com a tecnologia de armazenamento apropriada e com a capacidade de I/O necessária para um determinado período de tempo no ciclo operacional da sua organização.

Esse recurso pode ser muito útil para cargas de trabalho, como sistemas de liquidação de pagamento ou sistemas de cobrança de serviços públicos, já que esses aplicativos geralmente são executados sob regimes operacionais cíclicos, exigindo mais recursos de I/O alguns dias por mês para atender à demanda de processamento.

Esses recursos permitem que os clientes da AWS façam alterações em seus volumes, para que eles tenham a capacidade de I/O necessária para evitar pagar por seus recursos sem afetar a experiência de seus próprios usuários acessando esses sistemas.

Para saber mais sobre determinados casos especiais e algumas limitações em tipos de instância, você pode ler as considerações de desempenho de volume do Amazon EBS em instâncias Linux e o documento de cota e endpoint do Amazon Elastic Block Store.

 

(*) Para obter mais detalhes sobre tipos de volume, casos de uso recomendados e características de desempenho, consulte a documentação do Amazon EBS seguindo este link.

 

Este artigo foi traduzido do Blog da AWS em Espanhol.

 


Sobre o Autor

Leonardo Santi é Senior SA em Solution Architecture na AWS Argentina.