Texto elaborado por Pedro Vezzá*

Neste post vamos analisar como reduzir a conta do Amazon Web Services, partindo dos gastos de um cliente da AWS que possui um site com alto tráfego. O site RubyGems.org é um repositório de pacotes de software utilizados por desenvolvedores para reaproveitar funcionalidades em novos produtos. Assim como outros milhares de organizações, o site faz uso do Amazon Web Services (AWS) para prover toda a sua infraestrutura de servidores e rede. Segundo Evan Phoenix, colaborador do site, o uso do AWS se paga pela facilidade de manutenção proporcionada, diminuindo o tempo gasto para sustentar o site no ar sem falhas.

Como parte de sua política de transparência, o próprio site libera relatórios de gastos, inclusive a conta detalhada de gastos com o AWS. Neste post vamos analisar a conta do AWS de fevereiro de 2014:

COMO REDUZIR A CONTA_F1

 

O site atende a um público global de desenvolvedores, concentrado principalmente no eixo EUA – Europa, como veremos adiante. Os números de acessos ao site são bastante expressivos: Em 28 dias foram atendidos 307 milhões de requisições, transferindo ao todo quase 46 TB de informações. Para atender este público foram gastos US$ 7.078,09, um gasto elevado para um site mantido via lucros vindos de eventos da comunidade de desenvolvedores.

Os gastos estão classificados no gráfico abaixo:

COMO REDUZIR A CONTA_F2

 

Figura 1 – Divisão de Custos do RubyGems.org no AWS

Identificando os elementos apresentados no gráfico, a fatia vermelha indica os gastos com transferência de dados, a fatia amarela indica os gastos com processamento propriamente dito (EC2 – Elastic Cloud Computing), a fatia em verde indica os gastos com armazenamento de arquivos (S3 – Simple Storage Service), e a fatia em azul indica os gastos com a rede de entrega de conteúdo (CDN, Content Delivery Network, sendo que o serviço da AWS que cumpre essa função é chamado de CloudFront).

Por se tratar de um site que serve principalmente conteúdo estático (arquivos compactados, imagens, etc.) a divisão de gastos fica em ⅓ para servidores, e ⅔ para a transferência de dados. Façamos então uma análise de cada tipo de gasto para verificar que pontos podem ser melhorados, lembrando que nosso é objetivo é avaliar como reduzir a conta do Amazon Web Services utilizando da melhor forma possível os recursos oferecidos.

Economia com Processamento

A grande vantagem de se utilizar um serviço de computação em nuvem, e o AWS não é diferente, é aproveitar a escalabilidade de infraestrutura. Paga-se apenas pelo que é utilizado. Servidores podem ser alocados e removidos em minutos no serviço da AWS denominado Elastic Compute Cloud (EC2).

 [Dica: sempre é bom relembrar o que é computação em nuvem]

Para permitir esta escalabilidade, o AWS possui várias faixas de preço para a alocação de um mesmo servidor. A mais simples de toda é a cobrança sob demanda. O uso dos servidores é cobrado por hora, sem nenhum tipo de compromisso pelo tempo mínimo de uso. Por ser a faixa de uso mais liberal, é também aquela em que o uso é o mais caro.

Em seguida, vêm as instâncias reservadas. Neste caso, os servidores são contratados por períodos de 1 ou 3 anos com o pagamento de uma taxa única mais um preço por hora que, quando amortizados ao longo do tempo, acabam sendo mais vantajosos que as instâncias sob demanda para servidores que ficam ligados por muito tempo.

Por fim, o AWS possui a categoria de instâncias spot, usando a capacidade ociosa disponível no próprio AWS. Nesse caso, o preço por hora é flutuante de acordo com a demanda atual e normalmente ainda menor que o preço das instâncias reservadas. Os clientes informam qual o preço máximo que aceitam pagar e, caso o lance seja maior do que o preço vigente no momento da compra, a instância é alocada. O detalhe importante é que o AWS se reserva o direito de encerrar uma instância spot a qualquer momento, seja porque o preço instantâneo dela ultrapassou o valor máximo oferecido pelo cliente ou por outros motivos internos.

Uma infraestrutura verdadeiramente escalável pode usar este último tipo de instância enquanto ela é vantajosa e apelar para as versões reservadas ou sob demanda no caso de alguma anomalia nas instâncias spot.

 [Dica: veja os modelos de compra de capacidade de processamento na AWS]

Para o RubyGems.org, este quesito é o que tem os ganhos mais expressivos. Todos os servidores utilizados são instâncias sob demanda e permaneceram ligados todos os 28 dias de fevereiro.

Mais ainda, exceto por uma máquina c3.large, todas as outras são máquinas de uma geração passada, a M1, enquanto já existe a geração de máquinas M3. Esta última, incorpora processadores Intel Xeon E5-2670 de alta frequência e armazenamento em discos SSD para acesso rápido a dados. Comparada à geração M1, máquinas M3 fornecem uma performance melhor e mais consistente por preços menores. Vale ressaltar, porém, que esta afirmação não é válida para máquinas m1.small, que não possuem equivalente na geração M3.

Região
Máquina
Cobrança
Preço
Irlanda
c3.large
Sob demanda
US$ 114,91
Noroeste dos EUA
m1.small
Sob demanda
US$ 40,32
Noroeste dos EUA
m1.medium
Sob demanda
US$ 80,64
Noroeste dos EUA
2 x m1.large
Sob demanda
US$ 322,56
Noroeste dos EUA
3 x m1.xlarge
Sob demanda
US$ 967,68
Total
 
 
US$1.526,11

Tabela 1: Gasto atual do RubyGems.org com servidores no EC2

O padrão de uso dos servidores é ideal para usarmos a categoria de instância reservada por 3 anos com uso intenso (sempre ligado). Com esta mudança simples, mais a migração para a nova geração de máquinas M3, conseguimos uma economia de US$1001,64 ou 65,5% dos gastos com servidores.

Região
 Máquina
 Cobrança
Preço (amortizado)
Irlanda
c3.large
Reservada 3 anos uso intenso
US$ 54,44
Noroeste dos EUA
m1.small
Reservada 3 anos uso intenso
US$ 15,20
Noroeste dos EUA
m3.medium
Reservada 3 anos uso intenso
US$ 27,08
Noroeste dos EUA
2 x m3.large
Reservada 3 anos uso intenso
US$ 106,94
Noroeste dos EUA
3 x m3.xlarge
Reservada 3 anos uso intenso
US$ 320,81
Total
 
 
US$ 524,47

Tabela 2: Gasto simulado após a migração de tipo de máquinas e forma de cobrança

Enquanto a utilização de instâncias reservadas é algo imediato de ser feito, utilizar instâncias spot dependem de uma operação de cloud leverage (isto é, uma adaptação que adapte o software às características da Computação em Nuvem), que torne a infraestrutura resistente a variações no mercado de máquinas spot. Simulando uma configuração que ofereça uma garantia mínima de serviço (pelo menos um servidor de cada tipo sempre disponível) e supondo que não haja flutuações no preço das instâncias spot, conseguimos uma economia de US$1212,30 ou 79,4% do custo atual.

Região
 Máquina
Cobrança
Preço (amortizado)
Irlanda
c3.large
Reservada 3 anos uso intenso
US$ 54,44
Noroeste dos EUA
m1.small
Reservada 3 anos uso intenso
US$ 15,20
Noroeste dos EUA
m3.medium
Reservada 3 anos uso intenso
US$ 27,08
Noroeste dos EUA
m3.large
Reservada 3 anos uso intenso
US$ 53,47
Noroeste dos EUA
m3.large
Spot
US$ 28,96
Noroeste dos EUA
m3.xlarge
Reservada 3 anos uso intenso
US$ 106,93
Noroeste dos EUA
2 x m3.xlarge
Spot
US$ 126,33
Total
 
 
US$ 313,81

Tabela 3: Gasto simulado no EC2 após a utilização de instâncias spot 

 

Economia com o CloudFront

O CloudFront é o serviço de Content Delivery Network (CDN) do AWS. Ele é responsável por guardar cópias dos seus dados em 51 pontos de presença espalhados em 36 cidades pelo mundo (no Brasil há dois, um em São Paulo e outro no Rio de Janeiro). A vantagem de utilizar este serviço é que os seus dados estarão mais próximos dos usuários, diminuindo o tempo necessário para transferi-los para os clientes e consequentemente tornando a experiência de usar o seu serviço mais fluida.

Há duas estratégias possíveis de otimização de custos para este produto. A mais simples é a escolha da classe de preço adotada no CloudFront. Diferentes localidades cobram valores diferentes pela transferência de dados. Por exemplo, em março de 2014 o AWS tarifava em US$ 0,12/GB a saída de dados dos EUA e US$ 0,20/GB a saída do Japão.

Dependendo da origem geográfica dos seus visitantes é vantajoso reduzir o número de pontos de presença utilizados, eliminando os locais mais caros. Todos os clientes continuarão a ser atendidos, usuários mais próximos dos pontos de presença terão uma performance melhor do que usuários mais distantes.

No caso do RubyGems.org, a tabela abaixo mostra que o tráfego do site está concentrado principalmente nos EUA e Europa (juntos correspondem a 89% do tráfego):

Região de destino tráfego
 
GB
 
Preço/GB
 
Total
Índia
75
US$ 0,17
US$ 12,75
Singapura
418
US$ 0,19
US$ 79,42
Sydney
73
US$ 0,19
US$ 13,87
Tókio
181
US$ 0,20
US$ 36,38
Irlanda
682
US$ 0,12
US$ 81,84
São Paulo
97
US$ 0,25
US$ 24,25
Nordeste dos EUA
6126
US$ 0,12
US$ 735,12
Total
7652
N/A
US$ 983,63

Tabela 4: Gastos atuais do RubyGems.org com o CloudFront

Se optarmos pela “classe de preço 100”, composta justamente por EUA e Europa, os gastos cairiam em pelo menos6,65%:

Região de destino tráfego
 
GB
 
Preço/GB
 
Total
Europa
682
US$ 0,12
US$ 81,84
Estados Unidos
6126
US$ 0,12
US$ 735,12
Outras Regiões
844
US$ 0,12
US$ 101,28
Total
7652
N/A
US$ 918,24

Tabela 5: Gasto simulado com o uso da “classe de preço 100” no CloudFront

A segunda estratégia é para sites com grande quantidade de tráfego, acima de 10TB de dados por mês saído de uma única região do AWS. Neste caso, há um compromisso de utilização mensal mínimo por 12 meses ou mais e, em troca, você recebe um desconto significativo. Os valores adotados não são divulgados publicamente pelo AWS. Entretanto, o RubyGems.org não se adéqua à restrição de tráfego, e nesse caso não há nada a fazer para reduzir a conta do Amazon Web Services.

Economia com a transferência de dados

Metade da conta com o AWS do RubyGems.org é composta por tráfego de dados saindo do AWS para a Internet comercial. Neste quesito não há grandes oportunidades de economia exceto por um: O AWS privilegia sites com grande volume de dados oferecendo preços progressivamente menores por cada GB transmitido. O grande detalhe está no fato que esta progressão é calculada separadamente por região.

Região de saída do tráfego
 
GB
 
Preço/GB
 
Total
Irlanda
4835
US$ 0,12
US$ 580,20
Nordeste dos EUA
10239
US$ 0,12
US$ 1.228,68
Nordeste dos EUA
17323
US$ 0,09
US$ 1.559.07
Noroeste dos EUA
617
US$ 0,12
US$ 74,04
Total
33014
 
US$3.441,99
Tabela 6: Gasto atual com transferência de dados

A tabela acima mostra que, por usar mais que 10TB de transferência de dados saindo do nordeste dos EUA o RubyGems.org ganhou um desconto de 20% nos 17,3TB consumidos além desta faixa. Porém, note que este desconto não foi aplicado nos 4,8TB que saíram pela Irlanda e os 617GB que saíram pelo noroeste dos EUA.

Se o RubyGems.org consolidasse todo o seu tráfego saindo do nordeste dos EUA, sua conta com a transferência de dados cairia para US$ 3.278,43, uma economia de 4,75%.

É importante ressaltar que é possível manter sistemas com alta disponibilidade em uma única região graças às múltiplas “zonas de disponibilidade” (Availability zones) disponíveis em cada região operada pelo AWS.

Conclusão

Agregando todas as economias chegamos a um ganho médio de 24,2% para os valores analisados!

Item
Antes
Depois
CloudFront
US$ 983,63
US$ 918,24
Transferência de dados
US$ 3.441,99
US$ 3.278,43
EC2
US$ 1.526,11
US$ 313,81
Total
US$ 5.951,73
US$ 4.510,48

Tabela 7: Gastos antes e depois da aplicação das técnicas de economia apresentadas

O AWS é uma plataforma bastante completa e cheia de possibilidades de otimização. É importante avaliar cada conta mensal e revalidar as premissas que fundamentam as escolhas realizadas. Mais do que tudo, ao longo do tempo as necessidades mudam, bem como o perfil de utilização dos recursos, e é importante estar atento para obter o maior benefício possível pelo dinheiro empregado.

*Pedro Vezzá é bacharel em Ciência da Computação pela USP e atua na equipe

de desenvolvimento de soluções para Cloud Computing da OPUS Software.

 

 

Cloud Computing Brasil (II)
Microsoft Cloud Computing: Agora no Brasil

Compartilhe

Compartilhe este post com seus amigos