O blog da AWS
Ensaios sobre Transferência de Dados na AWS – Parte 3
Por Ciro Santos, Arquiteto de Soluções AWS,
David Reis, Arquiteto de Soluções AWS
Thiago Tietze, Enterprise Support Lead e
Michelle Perez Arquiteto de Soluções AWS.
Neste ensaio, serão apresentados cenários comuns para aplicações web usando o Amazon CloudFront em conjunto com Amazon S3 para conteúdo estático e Classic Load Balancer para conteúdo dinâmico. Se você não viu os dois primeiros ensaios, acesse Ensaios sobre Transferência de Dados na AWS – Parte 1 e Ensaios sobre Transferência de Dados na AWS – Parte 2 para entender mais sobre a proposta, o formato e as cores utilizadas.
AVISO: Esses ensaios visam discutir a lógica e as principais dimensões dos custos envolvidos nos cenários apresentados. Os valores atualizados e exatos devem considerar as informações descritas nas páginas de preços de cada serviço. As estimativas apresentadas usam a região de São Paulo como referência na moeda “Dólar” e outras regiões serão indicadas quando relevantes. |
3a – Servindo conteúdo estático usando Amazon CloudFront e Amazon S3
1. Descrição
Neste cenário será detalhado como servir conteúdo estático armazenado no Amazon S3 através do Amazon CloudFront, a content delivery network (CDN) da AWS. Esta é uma boa prática que ajuda a melhorar a performance, pois os arquivos serão acessados via uma CDN, ou seja, usando pontos de presença (Point of Presence ou PoP) localizados próximos ao usuário que fez a requisição. Além disto, os buckets não ficam expostos na internet evitando que clientes os acessem diretamente.
2. Diagrama de Exemplo
3. Dimensões de custo
Este caso é composto por dois serviços, o Amazon S3 e Amazon CloudFront.
Os custos do Amazon CloudFront possuem algumas dimensões, mas iremos considerar as quatro mais relevantes para este ensaio. Esses custos variam de acordo com a localização do PoP usado para servir o conteúdo e os detalhes estão em Definição de preços do Amazon CloudFront.
- (i) Número de requisições para todos os métodos HTTP: este custo varia conforme a localização do PoP e o tipo da requisição (HTTP ou HTTPS).
- (ii) Tráfego de dados de entrada, medido em Gigabytes (GB – veja nota 1): o Amazon CloudFront não cobra pelo tráfego de entrada de dados vindos da internet, ou seja, é isento de cobrança.
- (iii) Tráfego de saída para a origem, medido em Gigabytes (GB): a tarifa por GB varia com a localização do PoP (ver nota 2).
- (vii) Tráfego de saída para a internet, medido em Gigabytes (GB): a tarifa por GB varia com a localização do PoP e com o volume de trafego entregue.
Os custos do Amazon S3 possuem diferentes dimensões, mas neste ensaio iremos focar nas três principais que variam de acordo com a região escolhida. Algumas dimensões como valor do armazenamento no S3 foram desconsideradas, veja os detalhes em Definição de preço do Amazon S3.
- (iv) Tráfego de dados de entrada: a AWS não cobra o tráfego de entrada de dados, ou seja, é isento de cobrança.
- (v) Número de requisições: o Amazon S3 cobra pelas requisições feitas para requisitar um arquivo armazenado. Este custo varia dependendo do tipo da requisição (GET, PUT, POST, entre outras) e a Região em que o arquivo está armazenado. Geralmente, para conteúdos estáticos a requisição tipo GET é a mais utilizada.
- (vi) Tráfego de dados de saída: o Amazon S3 cobra pelo tráfego de saída para Internet. Porém, quando o tráfego é roteado do Amazon S3 para um PoP do Amazon CloudFront a AWS isenta esta tarifa.
4. Cenário
Um usuário no Brasil que requisita 100.000 arquivos de 10 MB armazenados em um Bucket S3 através do CloudFront usando HTTPS. Neste exemplo, o tráfego será entregue por um PoP do Amazon CloudFront no Brasil. Como trata-se da primeira requisição para download, o CloudFront terá que requisitar o arquivo no S3 e armazená-lo em cache no PoP.
- Custo relacionado ao Amazon CloudFront
- (i) Número de requisições HTTPS (Custo das 100 mil requisições para requisitar os 100.000 arquivos)
- Custo devido às requisições do tipo GET em PoPs na América do Sul: 100.000 requisições GET * ($0,022 / 10.000) = $0,22
- (ii) Tráfego de dados de entrada: $0,00
- (iii) Tráfego de saída para a origem (Amazon CloudFront para Amazon S3)
- Isento por se tratar de requisições GET (ver nota 2): $0,00
- (vii) Tráfego de saída para a internet
- O tráfego estimado é de 10MB * 100.000 arquivos = 1TB
- Custo para transferir 1TB (ver nota 1 – Gigabytes e Gibibytes): 1.024GB * $0,11/GB = $112,64
- Custos totais para o Amazon CloudFront
- $112,64 (transferência de dados para a internet) + $0,00 (transferência de dados para a origem) + $0,22 (requisições HTTPS) = $112,86
- Custo relacionado ao Amazon S3
- (iv) Tráfego de dados de entrada: isento
- (v) Número de requisições (Custo de 100 mil requisições)
- 000 requisições GET * (0,00056 / 1.000) = $0,056
- (vi) Tráfego de dados de saída (Amazon S3 para Amazon CloudFront): o tráfego de saída para CloudFront é isento
- Custo Total para o Amazon S3: $0,056 + $0,00 = $0,056
- Custo total do cenário
- $112,66 (Amazon CloudFront) + $0,056 (Amazon S3) = $112,71
- (i) Número de requisições HTTPS (Custo das 100 mil requisições para requisitar os 100.000 arquivos)
5. Observações
Veja a nota sobre a Cobrança da transferência de dados de saída no Amazon Cloudfront
O pacote Amazon CloudFront Security Savings Bundle ajuda você a economizar até 30% na sua fatura do CloudFront em troca de um compromisso de gasto mensal por um período de 1 ano. Mais detalhes em Apresentação do Pacote Amazon CloudFront Security Savings.
6. Casos semelhantes
Nenhum caso identificado.
3b – Servindo conteúdo dinâmico usando Amazon CloudFront e Classic Load Balancer
1. Descrição
Neste cenário será detalhado como servir uma aplicação dinâmica, por exemplo uma aplicação web implantada em uma instância Amazon EC2 usando IP privado atrás de Amazon Elastic Load Balancer, nesse caso será utilizado o Classic Load Balancer (CLB). E então esse balanceador de carga como origem de uma distribuição do Amazon CloudFront servindo requisições HTTP/HTTPS para os usuários da aplicação.
2. Diagrama de Exemplo
3.Dimensões de custo
Os custos do Amazon CloudFront possuem diferentes dimensões, nesse estudo iremos considerar as quatro mais relevantes. Esses custos variam de acordo com a região e localização do PoP usado e estão detalhados em Definição de preços do Amazon CloudFront.
- (i) Número de requisições para todos os métodos HTTP: este custo varia conforme a localização do PoP e o tipo da requisição (HTTP ou HTTPS).
- (ii) Tráfego de dados de entrada, medido em Gigabytes (GB – veja nota 1): o Amazon CloudFront não cobra pelo tráfego de entrada de dados vindos da internet, ou seja, é isento de cobrança.
- (iii) Tráfego de saída para a origem, medido em Gigabytes (GB): a tarifa por GB varia com a localização do PoP (ver nota 2).
- (vii) Tráfego de saída para a internet, medido em Gigabytes (GB): a tarifa por GB varia com a localização do PoP e com o volume de trafego entregue.
Os custos do Amazon Classic Load Balancer (CLB) possuem duas dimensões e variam de acordo com a região escolhida.
- (iv) Transferência de dados de entrada do CloudFront para o CLB: $0,00
- (v) Dados processados: $0,0011 por GB
- (viii) Tempo de CLB provisionado: $0,034 por hora (ou hora parcial)
- (ix) Transferência de dados de saída do CLB para o CloudFront: $0,00
Já o custo de transferência de dados entre CLB e o EC2 possui duas dimensões que também variam de acordo com a região escolhida considerando a configuração de balanceamento multi-AZ habilitada.
- (vi) Transferência de dados de entrada: $0,00
- (vii) Transferência de dados de saída: $0,00
4. Cenário de exemplo
Uma aplicação web servindo tráfego dinâmico através do CloudFront, CLB e EC2 na região de São Paulo (sa-east-1) durante um mês (730 horas). Os usuários da aplicação fizeram 400 milhões de requisições HTTPS GET que somam 2TB de entrada ao CloudFront que são repassados a sua origem, nesse caso um Classic Load Balancer público que por sua vez envia esses 2TB para uma instância EC2 usando 1 IP privado. Após a aplicação processar as requisições, ela envia respostas que somam 80 TB de dados durante o mês. Resposta que é enviada através do Classic Load Balancer que é então repassada ao CloudFront que finalmente envia a resposta para os usuários da aplicação. Desse tráfego de transferência de dados, consideramos todas as requisições saem por um PoP na região América do Sul.
- Custo relacionado ao CloudFront
- (i) Número de requisições HTTPS (Custo por 400 milhões de requisições)
- Requisições para América do Sul: 400.000.000 * ($0,022 / 10.000) = $880,00
- (ii) Tráfego de dados de entrada: $0,00
- (iii) Tráfego de saída para a origem
- Isento por se tratar de requisições GET (sem payload – ver nota 2): $0,00
- (vii) Tráfego de saída para a internet
- Região da America do Sul (80 TB →920 GB):
- Primeiros 10TB (faixa 0 TB – 10 TB): 10.240 GB * $0,11/GB = $1.126,40
- Próximos 40TB (faixa 10 TB – 50 TB): 40.960 GB * $0,105/GB = $4.300,80
- Próximos 100TB (faixa 50 TB – 150 TB): 30.720 GB * $0,09/GB = $2.764,80
- Total: $1.126,40 + $4.300,80 + $2.764,80 = $8.192,00
- Custos totais com CloudFront
- $880,00 (requisições HTTPS) + $8.192,00 (transferência de dados para a internet) + $0,00 (transferência de dados para a origem) = $9.072,00
- Custo relacionado ao balanceador de carga (CLB)
- (iv) Transferência de dados de entrada do CloudFront para o CLB: $0,00
- (v) Dados processados
- 048 GB * 0,011 per GB = $22,53
- (viii) Tempo de CLB provisionado
- 1 CLB * $0,034 * 730h = $24,82
- (ix) Transferência de dados de saída do CLB para o CloudFront: $0,00
- Custos totais com o CLB $24,82 + $22,53 = $47,35
- Custos de EC2 referente a transferência de dados
- Isento para entrada e saída de dados: $0,00
- Custo total:
- $9.072,00 (CloudFront) + $47,35 (CLB) + $0,00 (DT EC2) = $9.119,35
- Região da America do Sul (80 TB →920 GB):
- (i) Número de requisições HTTPS (Custo por 400 milhões de requisições)
5. Observações
Caso uma instância envie dados para um CLB interno em outra VPC na mesma AZ e na mesma região será considerado custo de transferência de dados entre zonas de disponibilidade (AZ).
Diferentes pontos de presença (PoPs) em localidades diferentes vão incorrer em diferentes custos. Além disto, os métodos HTTP/s como POST e PUT geralmente possuem payload e vão incorrer em custos adicionais, que serão explorados em ensaios futuros.
Clientes AWS que desejem se comprometer com trafego minimo mensal acima de 10TB por um periodo acima de 12 meses poderão ter descontos ainda maiores que o Pacote Amazon CloudFront Security Savings Bundle. Para isso basta entrar em contato com a AWS e solicitar supporte para precos privados de CloudFront.
6. Casos semelhantes
A AWS oferece diversos tipos de balanceadores de carga, como o Application Load Balancer (ALB) e Network Load Balancer (NLB), que possuem modelos distintos de precificação e serão abordados em ensaios futuros.
Próximos Ensaios
Neste ensaio, você aprendeu os custos envolvidos no uso do Amazon CloudFront para servir conteúdo estático hospedado no Amazon S3 e dinâmico usando um Classic Load Balancer. Nos ensaios seguintes iremos abordar mais dois casos.
Siga os ensaios para continuar aprendendo sobre transferência de dados e envie suas sugestões para os próximos pelo e-mail awsdtbr@amazon.com.
Notas
1 – Gigabytes e Gibibytes
Conceitualmente, 1 Gigabyte representa 1 * 10^9 bytes, isto é, 1.000.000.000 bytes. No mundo da computação é comum usar o termo 1 Gigabyte para referenciar 1 * 2^30 bytes, o que pode causar confusão na análise do tráfego. Para isto, a Comissão Eletrotécnica Internacional IEC criou a linguagem para armazenamento eletrônico que conta com o termo Gibibyte que representa 2^30 e é expressa pela sigla GiB.
O CloudFront cobra o tráfego usando valores GiB, porém na documentação você irá encontrar o termo Gigabyte.
2 – Cobrança da transferência de dados de saída do Amazon CloudFront para a origem
Requisições no formato HTTP são compostas por cabeçalhos (headers) e corpo (body). A AWS não cobra o tráfego gerado pelos headers, porém cobra pelo conteúdo do corpo da requisição HTTP (body) quando enviado do PoP do CloudFront para o Amazon S3 que é chamado de transferência de dados de saída para a origem.
As requisições do tipo GET geralmente não contêm um corpo e, portanto, não geram custo de tráfego dos PoPs para o S3.
GET /Key+?partNumber=PartNumber&... HTTP/1.1 Host: Bucket.s3.amazonaws.com If-Match: IfMatch ... Range: Range [no body]
Por outro lado, requisições do tipo POST ou PUT podem possuir algum conteúdo no body (destacado abaixo) e, portanto, gerar custo.
PUT /my-image.jpg HTTP/1.1 Host: myBucket.s3.<Region>.amazonaws.com Date: Wed, 12 Oct 2009 17:50:00 GMT Content-Type: text/plain Content-Length: 11434 [11434 bytes of object data]
Siglas
- AZ – Zona de Disponibilidade (Availability Zone)
- DT – Transferência de Dados (Data Transfer)
- DTI – Transferência de Dados de Entrada (Data Transfer In)
- DTO – Transferência de Dados de Saída (Data Transfer Out)
- ELB – Elastic Load Balancing
- S3 – Amazon Simple Storage Service
- CLB – Classic Load Balancer
- CDN – Content Delivery Network
- PoP – Point of Presence
Referências
- Ensaios sobre Transferência de Dados na AWS – Parte 1
- Ensaios sobre Transferência de Dados na AWS – Parte 2
- Definição de preços do Amazon CloudFront
- Definição de preço do Elastic Load Balancing
- Definição de preço do Amazon S3
- Definição de preço sob demanda do Amazon EC2
- Does AWS use base 1000 or base 1024 to calculate Gigabytes?
- Apresentação do Pacote Amazon CloudFront Security Savings
- Dynamic Whole Site Delivery with Amazon CloudFront
Sobre os autores
Ciro Santos é arquiteto de soluções na AWS.
David Reis é arquiteto de soluções na AWS.
Thiago Tietze é Enterprise Support Lead na AWS.
Michelle Perez é arquiteta de soluções na AWS.
Revisores
Marcelo Pinto é Edge Sales Specialist.
Paulo Aragão é Arquiteto de Soluções na AWS