O blog da AWS

Conhecendo um pouco mais sobre o Graviton2

Por Gustavo Barbosa, Arquiteto de Soluções AWS,
Pedro Gadelha, Arquiteto de Soluções AWS,
Carolina Junqueira Ferreira, Arquiteta de Soluções AWS  e
Liz Menichetti, Arquitetura dos clientes AWS 

 

Amazon Elastic Compute Cloud (Amazon EC2) é um serviço web que disponibiliza capacidade computacional segura e escalável na nuvem. Este serviço foi projetado para facilitar a computação em nuvem na escala da web para os desenvolvedores. Com o Amazon EC2, você consegue implementar diferentes tipos de cargas de trabalho, como: servidores web, banco de dados, análise de dados, containers, processamento de imagem, computação de alta performance, machine learning, servidores de aplicação, dentre muitos outros.

Com o Amazon EC2 você consegue provisionar máquinas virtuais na nuvem. Esse serviço oferece diferentes tipos de plataforma de computação com a possibilidade de escolha de processador, armazenamento, rede, sistema operacional e modelo de compra. Dentre as famílias de processadores disponíveis estão: Intel, AMD, e Graviton.

Os processadores AWS Graviton são personalizados pela AWS usando núcleos Arm Neoverse de 64 bits para oferecer o melhor custo-benefício para suas cargas de trabalho de nuvem em execução no Amazon EC2. Essa família de processadores têm sido utilizada para otimizar o desempenho e os custos de cargas de trabalho.

Os processadores AWS Graviton2 são um grande salto de desempenho e recursos comparado a primeira geração. Eles são utilizados pelas instâncias T4g, M6g, C6g, R6g e X2gd e suas variações do Amazon EC2 com armazenamento local SSD baseado em NVMe, que fornecem performance de preço até 40% melhor em relação a instâncias baseadas em x86 comparáveis da geração atual para uma grande variedade de cargas de trabalho.

O objetivo deste blog é apresentar que tipos de workloads são suportados pelo Graviton2, como pode ser feita a migração para este tipo de instância, e quais os tipos de instância disponíveis para esta família.

 

AWS Graviton x AWS Graviton2

Os processadores AWS Graviton são baseados na arquitetura de processadores Arm Neoverse de 64 bits. A primeira geração está disponível na EC2 em tipos de máquina A1 contando com até 16vCPUs. Já o Graviton2 oferece uma variedade maior de tipos de máquina, tamanhos e tipos de workload.

Os processadores AWS Graviton2 oferecem desempenho aprimorado para cargas de trabalho de codificação de vídeo, aceleração de hardware para cargas de trabalho de compactação e suporte para inferência de machine learning com base em CPU. Eles oferecem 7x mais performance, 4x mais núcleos de computação, memória 5x mais rápida e caches 2x maiores em comparação com a primeira geração. Portanto suas as principais vantagens em relação a primeira geração são variedade e performance.

 

Tipos de instância

Os tipos de instância que possuem os processadores AWS Graviton2 são: T4g, M6g, M6gd, R6g, R6gd, C6g, C6gd, C6gn, X2gd.

Instâncias de uso geral

As instâncias de uso geral são recomendadas para aplicações que utilizam memória, computação e recursos de rede em proporções balanceadas. Alguns exemplos de aplicações são: servidores de aplicativos, microserviços, computação em cluster, etc.

T4g

As instâncias da família T4g são ideais para microsserviços de grande escala (contêineres), bancos de dados pequenos e médios, desktops virtuais e aplicativos essenciais aos negócios. Elas oferecem desempenho de preço até 40% melhor em relação às instâncias T3 (instância EC2 da geração anterior) e são ideais para executar aplicativos com uso moderado de CPU que apresentam picos temporários de uso.

M6g

As instâncias da família M6g são ideais para sistemas de armazenamento de dados de médio porte, microsserviços (contêineres), computação em cluster, e servidores de aplicação. Com até 40% de preço/performance melhor do que as instâncias da geração anterior (M5), as instâncias M6g também são utilizadas por desenvolvedores de cargas de trabalho em Arm nativos em nuvem, garantindo a eliminação de compilação e emulação cruzadas.

Instâncias otimizadas para memória

As instâncias otimizadas para memória fornecem rápido desempenho para aplicações que processam uma alta quantidade de dados em memória.

R6g

Com desempenho de preço de até 40% em relação as instâncias da geração anterior (R5g), as instâncias R6g são recomendadas para execução de cargas de trabalho com uso intensivo de memória, como banco de dados de código aberto, caches em memória e análises de big data em tempo real. Os desenvolvedores também podem utilizar essas instâncias para criar aplicativos baseados em Arm nativamente na nuvem, eliminando a necessidade de compilação cruzada e emulação e melhorando o tempo de lançamento no mercado.

X2gd

Os processadores X2gd foram lançados em março de 2021 e oferecem um custo-benefício até 55% melhor em relação às instâncias X1 (geração anterior). Recomenda-se o uso de instâncias X2gd para cargas de trabalho com uso intensivo de memória, como bancos de dados em memória (Redis, Memcached), bancos de dados relacionais (MySQL, PostgreSQL), cargas de trabalho de automação de design eletrônico (EDA), análises em tempo real, e servidores de cache em tempo real.

Instâncias otimizadas para computação

As instâncias otimizadas para computação foram desenvolvidas com processadores de alto desempenho. As instância dessa família são apropriadas para cargas de trabalho de processamento em lote, transcodificação de mídia, servidores web de alto desempenho, computação de alto desempenho (HPC), modelagem científica, servidores de jogos dedicados e mecanismos de servidor de anúncios, aceleração de inferência de machine learning e outros aplicativos de uso intensivo de computação.

C6g

As instâncias C6g oferecem custo-benefício até 40% melhor que as instâncias C5. Elas são ideais para rodar cargas de trabalho de computação intensiva. Alguns exemplos de cargas de trabalho são: computação de alto desempenho (HPC), codificação de vídeo, jogos, aceleração de inferência de aprendizagem de máquina baseada em CPU, análise de dados distribuída.

Família “d”

As instâncias com o d no final (M6gd, C6gd, R6gd) são instâncias disponíveis com a opção de armazenamento local em nível de bloco SSD com base em NVMe (C6gd) para aplicações que precisam de armazenamento local de alta velocidade e baixa latência.

 

Cenários de custo de exemplo

Um dos propósitos da família AWS Graviton2 é a entrega de custo-benefício. O cenário abaixo indica algumas instâncias muito utilizadas, e como é o preço delas comparadas às instâncias AWS Graviton2. Lembrando que essa comparação é um para um, você pode fazer o cálculo para sua carga de trabalho (ex: 24×7 por 30 dias)

 

Comparativo de instancias tradicionais x graviton

 

As instâncias EC2 possuem opções de compra e uso reservado a longo prazo. Como as instâncias reservadas e savings plans, com comprometimentos de uso de 1 ou 3 anos nas duas opções, o cliente pode usufruir de descontos maiores que os preços disponíveis no modelo on-demand. Outra opção é usar as instâncias SPOT para cargas de trabalho que podem ser interrompidas, podendo entregar até 90% de desconto em relação ao modelo de instâncias on-demand.

 

Tipos de workloads suportados

Os processadores AWS Graviton2 suportam diferentes sistemas operacionais comerciais e da comunidade: Amazon Linux 2, Red Hat Enterprise Linux, Ubuntu, SUSE Linux Enterprise Server, CentOS, Debian, Fedora, FreeBSD, NetBSD.

O Graviton2 suporta nativamente diversas aplicações de mercado, e também serviços da AWS, como:

  • Containers: Docker, Amazon EKS, Amazon ECS, Firecracker, Amazon ECR, Rancher, Kubernetes;
  • Ferramentas e serviços AWS: Amazon CloudWatch, Amazon Inspector, AWS System Manager, AWS CodeCommit, AWS CodeBuild, AWS CodePipeline, AWS Cloud9, Amazon Coretto, AWS Batch;
  • Configuração e monitoração: Datadog, Chef, Splunk, New Relic, Terraform, DynaTrace, HoneyComb;
  • Segurança: CrowdStrike, Qualys, Rapid7, Snyk, Tenable;
  • Construir e testar: CircleCI, GitHub, GitLab, Github Actions, Jenkins, Travis CI;
  • Banco de dados: Cassandra, KeyDB, MariaDB, MongoDB, Memcached, MySQL, PostgreSQL, Redis, ScyllaDB.

Um destaque interessante é que o Graviton2 já é suportado em bancos de dados gerenciados pela AWS dentro do serviço Amazon RDS e também no Amazon Aurora. Além de possibilitar a implementação numa instância EC2 e bancos abertos, é possível usar bancos gerenciados pela AWS em instâncias do tipo Graviton2 no Amazon RDS (MariaDB, MySQL, PostgreSQL), e também no Amazon Aurora (MySQL e PostgreSQL).

Já na área de dados, o Graviton2 pode ser utilizado em máquinas de cluster do Amazon Elasticsearch Service, no Amazon ElasticCache (Memcached e Redis), e também no Amazon Elastic Map Reduce (EMR) que traz diversificadas opções de ferramentas de dados (Spark, Hive, Presto, Flink, Apache Hudi, Pig, etc.).

Para saber se sua aplicação será suportada na arquitetura do Graviton2, testes são necessários. Geralmente o código de linguagens interpretadas ou compiladas para um código intermediário bytecode não necessitam de modificações, como é o caso de: Python, Java, Ruby, PHP, Node.js, .Net Core (que já tem suporte para arm64 e linux). Entretanto, além do código de programação, a portabilidade de aplicações, sistemas e plataformas podem variar principalmente de acordo com as dependências da sua aplicação.

Linguagens de programação que também são suportadas na arquitetura arm64, mas precisam ser recompiladas são: C, C++, Go, Rust, dentre outras. Atualmente, é comum que os compiladores forneçam suporte a arquitetura arm64 que é a base do Graviton2.

Em relação ao desenvolvimento de aplicações e o uso de ferramentas da AWS, algumas ferramentas já suportam o Graviton2 de forma transparente, como por exemplo: AWS CLI v1 e v2, agente do CloudWatch, e SDKs (C/C++, Python, Java, Go, Node.js, .Net).

 

Necessidade de recompilação: CISC x RISC

Os processadores Graviton2 utilizam a arquitetura ARM64 (64 bits), o qual é um acrônimo para Advanced RISC Machine. Por utilizar a arquitetura RISC, o Graviton2 se diferencia dos processadores x86 bits baseados em arquitetura CISC.

A arquitetura CISC (Complex Instruction Set Computer) fornece um grande número de instruções a nível de linguagem Assembly. O Assembly é uma linguagem de programação “low-level” onde cada declaração corresponde a uma única instrução de máquina. Portanto, a arquitetura CISC tornou-se amplamente utilizada para extensiva manipulação de elementos computacionais de baixo nível como memória e aritmética binária.

A arquitetura RISC (Reduced Instruction Set Computer), comumente utilizados em dispositivos móveis, possui uma arquitetura que quebra instruções em tamanhos padrão para serem executados em apenas um ciclo de relógio (clock) do processador. Dada sua evolução, hoje já possuindo arquiteturas de 64 bits, este tipo de processamento beneficia diversos tipos de workloads, agilizando processos de software.

Porém, como a arquitetura CISC foi a mais amplamente utilizada para desenvolvimento de software por muitos anos, com processadores Intel e AMD, uma porção das linguagens de programação são mais adaptadas para este tipo de arquitetura. Algumas linguagens como Python e NodeJS possuem suporte nativo tanto para ambas arquiteturas, porém outras linguagens mais como C, C++ necessitam de recompilação, pois foram desenvolvidas focando a arquitetura CISC, numa época onde a arquitetura RISC não tinha a robustez que possui hoje para atender servidores de aplicação.

 

Como migrar para o Graviton2

Como citado na seção anterior, para que ocorra a migração de cargas de trabalho para instâncias do tipo Graviton2 são necessários alguns passos e verificações. Alguns passos gerais para essa migração são:

1) Identificar dependências: identifique todas as dependências da sua carga de trabalho (bibliotecas, agentes, ferramentas e linguagens abertas, pacotes ou bibliotecas proprietárias ou pagas, agentes ou daemons de programas ou pacotes de monitoramento, logs e segurança).

2) Checar suporte ao arm64: após a identificação das dependências, identifique o suporte de arm64 para elas – checar existência de binários de arm64, arquiteturas agnósticas, perguntar ao fornecedor ou fabricante sobre o suporte.

3) Testar: execute diferentes tipos de testes (integração, unitário, pré-produção, performance, etc) de acordo com a necessidade de negócio e da aplicação, especialmente se você tiver que recompilar sua aplicação – teste de performance.

4) Atualizar: atualize os recursos, como código como infraestrutura (ex: AWS CloudFormation, Terraform, CDK), que provisionam os recursos computacionais que serão baseados no Graviton2 – exemplos: atualizar famílias de máquinas, refazer imagens de máquinas, atualizar git e pipelines de desenvolvimento, etc.

5) Implantação: determine estratégias de implantação das novas instâncias (blue/green, canário, rollout, etc). Independente da estratégia de implantação, não esqueça de monitorar continuamente seu ambiente (taxas de erros, carregamento, tempo de resposta, comportamento do usuário, latência, etc) para identificar se a aplicação está saudável e se precisa de modificações.

 

Conclusão

Os processadores Graviton2 oferecem oportunidades de otimização de custo-benefício para cargas de trabalho de diferentes cenários, como: servidores web, bancos de dados abertos, caches, microserviços, containers, análise e processamento de dados, processamento de imagem e vídeo, inferência de machine learning, computação distribuída e de alta performance, dentre outros. Para suportar esses diferentes de cargas de trabalho, essa família de processadores possui diferentes tipos de máquinas desde propósito geral a casos específicos (computação, GPU, memória intensiva).

O AWS Graviton2 é baseado em arm64, e como para qualquer mudança de arquitetura ou sistema operacional, é necessário realizar testes para avaliar se sua aplicação, sistema ou plataforma possui portabilidade para rodar nessa família de processadores.

Abaixo seguem alguns materiais que podem ajudar a saber mais sobre o Graviton2.

Material de apoio

AWS Graviton2 para ISV

Resultados de Benchmark do Graviton2

Executando containers multi arquitetura com o Amazon EKS

Amazon RDS com processadores Graviton2

Predição do clima com o AWS Graviton2

AWS Graviton2

 

 


Sobre os autores

Gustavo Barbosa é Arquiteto de Soluções da AWS para SMB. Ajuda seus clientes a construirem aplicações resilientes e altamente disponíveis com os serviços que a plataforma da AWS oferece.

 

 

 

 

Pedro Gadelha é um arquiteto de soluções que atende as regiões do Nordeste e Rio de Janeiro. Iniciou a carreira no mundo de infraestrutura e redes, e possui grande interesse nas áreas de migração de aplicação para nuvem e segurança.

 

 

 

 

Carolina Junqueira Ferreira é arquiteta de soluções na AWS atendendo empresas de diversos segmentos e localidades. Apoia os clientes a aprenderem mais sobre a AWS durante sua jornada de transformação digital na nuvem, e também na jornada de Analytics e Data Lake.

 

 

 

 

Liz Menichetti trabalha com arquitetura dos clientes na AWS desde 2019, atuando em Enterprise com projetos de destaque nas mais variadas verticais da indústria, não só resolvendo problemas e dando suporte a clientes, mas trazendo valor ao negócio dos clientes com boas práticas de segurança, escalabilidade, resiliência, performance e excelência operacional.