building blocks #4 - rede de entrega de conteúdo (cdn) na aws
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Ricardo Geh, Enterprise Solutions Architect
Setembro 2016
Usando Amazon CloudFront para aumentar
performance, disponibilidade e cache na sua
aplicação
Agenda
O que é uma CDN?
Como o CloudFront funciona
Case Esporte Interativo – Turner
Funcionalidades do CloudFront
Arquiteturas de Referência
Aplicando melhores práticas
Entrega de conteúdo sem CDN
PoP
PoP
Telefonica
Oi
Redes / peeringProvedores de Conteúdo
Level 3
End User
End User
End User
PoP
PoP
End User
End User
End User
Entrega de conteúdo com CloudFront
Provedores de Conteúdo Redes / peering
CDN => Content Delivery Network
Sem CDN COM CDN
Vantagens de utilizar uma CDN:
• Menor latência de entrega de conteúdo;
• Maior throughput;
• Redução de processamento na origem;
• Mais segurança para a origem;
• Menor custo;
• Melhor gerenciamento da distribuição de
conteúdo.
O que uma CDN deveria fazer
Performance: entrega de conteúdo com baixa latência,
alto throughput e alta disponibilidade
Alcance e Funcionalidade: prover uma rede global de
edge locations para alcançar uma grande audiência de
maneira otimizada
Custo: assegurar uma viabilidade financeira
Sem utilizar CloudFrontlongas distâncias + rede ruim = alto tempo de carregamento
?
!
* enlace de rede e velocidades fictícias para fins didáticos
~380ms
?
!
~350ms
ec2
52.74.26.30
Name Type Value
exemplo.com A 52.74.26.30
TTL = 60! TTL =
60
X-Cache: Miss from cloudfront
Utilizando CloudFrontcurtas distâncias + rede otimizada = baixo tempo de carregamento
* enlace de rede e velocidades fictícias para fins didáticos~200ms
?
ec2
52.74.26.30
Name Type Value
exemplo.com ALIAS d23scsjl86er9y.cloudfront.ne
t
~24ms
?
! TTL =
60
?! TTL =
60
X-Cache: Hit from cloudfront
DEMO
CloudFront: Content Delivery Network
Rede de cache completa
Infraestrutura global
Afinado para performance otimizada
Massivamente escalável
Altamente Segura
Self Service
Precificado para minimizar custo
Alcance: Rede Global de Distribuição do CloudFront
América do
Norte
América do Sul Europa Ásia
Super POPs Países Continentes
Região AWS CloudFront Edge Location
Custo de CloudFront: Opções competitivas e flexíveis
Sob demanda, pague pelo uso
Mesmos preços para
conteúdos estáticos e
dinâmicos
Opção de comprometimento
Modelo de Gb entregues
Pri
ce p
er
GB
Data Transfer
Data Transfer Economies of Scale
Public Rates Private Rates
Preço do CloudFront: Classe de PreçosPerformance / Otimização de custo sob demanda
All
North America + Europe
North America + Europe + Asia
Entrega de conteúdo global e controle de preço para ajustar com os objetivos de custo e performance
Entrega de Conteúdo Para Qualquer Segmento de Mercado
Media e Entretenimento
Jogos
eCommerce
Digital Advertising
Download de Software
Websites dinâmicos e Aplicações
Entrega para qualquer caso de uso
Download• Download
progressivo
• Sites estáticos
• Aplicações
• A/V players
Vídeo sob demanda
• Internet TV
• OTT
• Web
• Mobile
Eventos ao vivo• Música
• Esportes
• Jogos
• Notícias
Publicação
• Site dinâmico
• Site inteiro
• Notícias, clima, etc
CloudFront Refências: M&E
A CASA DA LIGA DOS CAMPEÕES NO BRASIL
Wesley SantanaGerente de [email protected]
“A Amazon nos ajuda a conectar, entreter e
transformar a vida das pessoas através da
emoção do Esporte”
Produção e distribuição de conteúdo
de esportes em múltiplas plataformas
Esporte na hora e onde você quiser“Utilizamos a
CloudFront para
distribuir nosso conteúdo
de forma segura,
confiável e com relação
custo x benefícioadequada”
- Maurício Portela, VP de
Mídias Digitais
Desafio
• Eventos ao vivo
• Base de usuários em expansão
• Multi-plataforma / multi-device
• Qualidade do vídeo x internet
usuários
• Custo / usuário
• Métricas para gestão
Solução
ENCODING TRANSCODING PLAYERORIGIN CDN’s
4K
1080p
720p
480p
Benefícios da solução
• Elasticidade para lidar com picos de
tráfego
• Capilaridade e largura de banda
• Performance, disponibilidade e
segurança
• Flexibilidade para uso de outras
CDN’s além da Cloudfront
• Custo variável em função da
demanda
• Informações para monitoramento e
gestão da operação
Elastic Load
Balancing
Conteúdo Dinâmico
Amazon EC2
Conteúdo Estático
Amazon S3 Custom Origin
OR
OR
Custom OriginAmazon CloudFront
Example.com
*.jpg
*.php
Entrega de Conteúdo Estático e Dinâmico
Dinâmico
EstáticoVídeo
Entregue todo o seu conteúdo: entregue todo site
Input do
Usuário
SSL
Funcionalidades: Streaming de Vídeo
Sob Demanda
• Microsoft Smooth Streaming
• HLS
• Flash RTMP
Live Streaming
• Wowza Media Server
• Adobe Media Server
• Microsoft Windows Media Services
Funcionalidades: Proteção do Conteúdo
Problema – se mover meu conteúdo estático para o S3 e usar o CloudFront como posso me proteger de um acesso não autorizado?
Solução – Signed URLs ou Signed HTTP Cookies
Signed URLs
Como Funciona• Web server obtém uma credencial temporária para o conteúdo do
S3
• Cria uma Signed URL baseada nessa credencial que permite o acesso
• Provê esse link ao cliente
• Link é válido por um período de tempo
O AWS SDK gerencia toda a complexidade deste
processo automaticamente.
Signed HTTP Cookies
O que faz?
• Provê o mesmo nível de controle da Signed URL incluindo a
assinatura em um HTTP cookie
• Isso permite que você restrinja o acesso à múltiplos objetos
(autenticação do site inteiro) ou à um único objeto sem precisar
alterar as URLs.
Funcionalidades: Compressão de Gzip
Automática
Compressão de Gzip pode ser habilitada nas distribuições permitindo que suas páginas sejam carregadas mais rápidas, melhora o donwload de conteúdo, e a cobrança de dados transferidos pelo CloudFront talvez reduza;
Para habilitar, simplesmente localize sua distribuição e configure Compress Objects Automatically para Yes dentro das opções de Behavior:
Funcionalidades: Suporte a SSL
Com múltiplas origens, como fazemos com o SSL? (certificados são associados ao nome do domínio)
gricardo.s3-website-us-east-1.amazonaws.com
Gricardo-108754258.us-east-1.elb.amazonaws.com
AWS Certificate Manager – Gratuito
• Provisiona certificados SSL/TLS para uso em recursos
AWS:
• Elastic Load Balancing
• Distribuições Amazon CloudFront
• AWS gerencia:
• Geração Key pair e CSR
• Gerenciamento de renovação e deployment
• Domain validation (DV) por e-mail
• Disponível pela AWS Management console, CLI, ou API
POST /2012-07-01/distribution HTTP/1.1
Host: cloudfront.amazonaws.com
Authorization: AWS authentication string
Date: time stamp
Other required headers
<?xml version="1.0" encoding="UTF-8"?>
<DistributionConfig
xmlns="http://cloudfront.amazonaws.com/doc/2012-07-01/">
Gerencie seu conteúdo da sua maneira
API ConsoleGerenciamento e Relatório
CloudFront
Comece a Entregar seu Conteúdo Hoje!
• Sign Up simples para criar sua conta
• Sem taxa para usar a plataforma
• Nenhuma programação necessária
• Sem necessidade de rearquitetar
• Operacional em 15 minutos
aws.amazon.com/cloudfront
Arquitetura de Referência: Visão GeralStreaming pelo CloudFront
LondonSingapore NY
Estático ou
DinâmicoServido pelo ELB e/ou EC2
*.php, *.js, *m3u8, *.ts
EstáticoServido pelo S3
*.jpg, *.m3u8, *.ts, *.css
Estático ou DinâmicoServido de uma origem personalizada
*.php, *.js, *m3u8, *.ts
• Entregue conteúdo estático e dinâmico
• Desonere o tráfego da origem para o CloudFront
• Sirva grandes eventos AO VIVO para uma larga audiência
• Sirva VOD para qualquer dispositivo
• Altere o conteúdo baseado no User Agent
• SSL• Autentique com URLs
Assinadas
Origem do evento
ao vivoRTMP
CloudFront
Arquitetura de Referência: Seleção de Origens do CloudFrontOrigin Sourcing Based on Intelligent Behavior Rules
Customer Location
www.mysite.com
Path Pattern Matching
/*.jpg; /*.php etc.
GET http://mysite.com/images/1.jpg to ORIGIN A
GET http://mysite.com/index.php to ORIGIN B
GET http://mysite.com/web/home.css to ORIGIN C
GET http://mysite.com/* (DEFAULT) to ORIGIN D
Origin A:
origin.mysite.com
Origin B:
origin2.mysite.com
Origin C:
origin3.mysite.com
Origin D:
origin4.mysite.com
Combine padrões de path
/*.php
/images/*.jpg
/web/*.css
/*.* (DEFAULT)
CNAME =
xyz.cloudfront.net
CloudFront
53
Balanceamento
Endpoint
Não-AWS
Arquitetura de Referência: Balanceamento de CargaBalanceie a carga entre seus provedores usando o Route 53
Customer Location
www.mysite.com
Weighted Round Robin RoutingCNAME = xyz.cloudfront.net, weight = 0-255
CNAME = xyz.somecdn.com, weight = 0-255
CNAME =
xyz.somecdn.com
Latency Based RoutingCNAME = xyz.cloudfront.net, latency metric
CNAME = xyz.somecdn.com, latency metric
Fail Over RoutingCNAME = xyz.cloudfront.net, PRIMARY
CNAME = xyz.somecdn.com, SECONDARY
Geolocation RoutingCNAME = xyz.cloudfront.net, LOCATION 1…LOCATION X
CNAME = xyz.somecdn.com, LOCATION 2…LOCATION Y
CloudFront
EC2S3 ELB
53
Balanceamento
Origem não-
AWS
Arquitetura de Referência: Roteamento InteligenteUsando CloudFront com Route 53
Customer Location
www.mysite.com
Use Route 53 para rotear
entre CDN, S3, ELB
(balanceador), EC2
(web/servidor de aplicação)
e uma origem não-AWS.
Arquitetura de Referência: Regras de RoteamentoEscolha geográfica do PoP e Geo-Blocking
Customer Location
1 Requisição para www.mysite.com
Localidade A: PoP em New York
Localidade B: PoP em London
Localidade C: acesso negado ao conteúdo
baseado nas regras de Geo
Localidade D: PoP dentro da Price Class
3
Examine a origem Geo, latência, classe de
preço
CloudFront PoP
New York
1 2
3
4
4 Retorna o Endereço IP ou nega a
requisição
2CloudFront
CloudFront PoP
London
CloudFront PoP
Paris
CloudFront PoP
Miami
X
New York London France Argentina
Arquitetura de Referência: Regras de RoteamentoHeaders, Cookies, Query Strings
Customer Location
1 Requisição para www.mysite.com
User A: cache específico de mobile
User B: cache específico de geo
User C: cache HTTP ou HTTPS
User D: cache multi-site, retorna diferentes
sites do mesmo host
3
Examina e encaminha os host headers
CloudFront PoP
New York
1 2
3
4
4
2CloudFront
CloudFront PoP
London
CloudFront PoP
Paris
CloudFront PoP
Miami
Mobile User
In New York
Geo-Specific Content
for user in
Amsterdam
Multi-Site DeliveredHTTPS or HTTP Delivery
based on request type
Retorna conteúdo específico ao usuário
CloudFront
Edge
Location WAF
users
hackers
bad botssite
scraping
SQL Injection,
XSS, outros
ataques
Tráfego legítimo
Tráfego malicioso é bloqueado pelo WAF na borda
-Pode ser origem não-AWS
-Pode ser conteúdo estático e dinâmico
EC2ELBS3
E/OU
Seu datacenter
Servidor Armazenamento
Arquitetura de Referência: CloudFront + AWS WAFSe proteja de ataques DDoS, SQL Injection...
CloudFront e o Ecossistema da AWS
Integra com recursos da AWS• Route 53 DNS
• Amazon Elastic Transcoder
• Amazon S3
• EC2 Compute e Elastic Load Balancing
• Marketplace SaaS e SI parceiros
• AWS WAF
• AWS ACM
Melhora a escalabilidade de outros recursos
Descontos na transferência de dados do Amazon S3 e EC2 para CloudFront
Conteúdo estáticoServido do S3
*.jpg, *.m3u8, *.ts, *.css
Conteúdo
estático ou
dinâmicoServido do ELB e/ou
EC2
*.php, *.js, *m3u8, *.ts
Conteúdo estático
ou dinâmicoServido de uma origem não
AWS
*.php, *.js, *m3u8, *.ts
Aplicando as Melhores Práticas
Maior segurança
Maior disponibilidade
Melhor performance
Facilidade de debug
Visibilidade
Testando sua Distribuição
Controle de acesso: Restrinja o acesso a Origem
Amazon S3
Origin Access Identify (OAI)• Previne acesso direto ao seu bucket no
Amazon S3
• Benefícios de performance para todos os
seus clientes.
Custom origin
Bloqueio por endereço IPWhitelist somente do range de IP do
Amazon CloudFront
• Protege a origem de sobrecarga
• Benefícios de performance para todos
os seus clientes.
Faça log dos request IDs na origem
Nginx:
log_format main '$remote_addr - $remote_user
[$time_local] "$request" ‘ '$status $body_bytes_sent
"$http_referer" ‘ '"$http_user_agent" http_x_forwarded_for"
"$http_x_amz_cf_id"';
Apache:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-Agent}i\" \"%{X-Amz-Cf-Id}i\"" combined
Configure response headers na origem
*Strict-Transport-Security: max-age=15552000;
*X-Frame-Options: SAMEORIGIN
*X-XSS-Protection: 1; mode=block Options
*Cache-Control: max-age=300; public
Monitore mudanças de configuração na sua
distribuição
• Use o Cloudtrail
• Receba alarmes quando:
• Distribution é desativada
• Trusted signers é desativado
• Custom TLS certificate são alterados
Métricas quase em tempo real do Cloudfront
• Providos quase em tempo real
• Via Amazon CloudWatch
• Alarme em 6 metrics:
• Requests
• Bytes downloaded
• Bytes uploaded
• 4XX error rate
• 5XX error rate
• Total error rate
Relatórios do Amazon CloudFront para
identificar tendências
• Cache hit/miss
• Incomplete downloads
• Top countries
• Mobile users
• Popular objects
Versionando assets do seu website
<link
href="//assets.example.com/assets/v1/css/jumbotron-narrow.css“
rel="stylesheet">
<link
href="//assets.example.com/assets/v2/css/jumbotron-narrow.css“
rel="stylesheet">
<link
href="//assets.example.com/assets/css/jumbotron-narrow.css?<md5sum>“
rel="stylesheet">
Cache-Control & expires
< Cache-Control: max-age=300
< Cache-Control: max-age=30, s-maxage=3000
< Expires: Thu, 18 Sep 2025 21:34:50 GMT
Min TTL Default TTL Max TTL
Set min, max and default TTL on Amazon CloudFront
Distribuição compartilhada
• Assets compartilhados entre múltiplos sites
Static content
Amazon S3
Amazon CloudFront
assets.example.com
www.example.com
www.example.org
Forwarded values
• Checar forwarded headers
• Query string forwarding
• Cookie forwarding
• Trusted Advisor checks
Invalidações
• Último recurso
• Aplicado somente no cache do Amazon CloudFront, não é
válido nos browsers ou caches intermediários
Habilitando o modo de desenvolvimento
• Configure o TTL máximo para 0
• Não necessita invalidar o cache constantemente!
• Enviar todos os headers vai mudar o
comportamento
• Faça o Whitelist do seu IP usando o AWS WAF
(permite somente o acesso de dentro da sua
organização)
• Use cookies assinados (signed cookies)
Teste de carga
Teste de carga tradicional
• Usa um único cliente
• De uma única região
• Atinge um único IP
DNS load balancing
Simula ambiente real do usuário
Teste de carga ideal
• Clientes em múltiplas localidades
• Requisições de DNS
independentes
• Distribuição entre vários IPs
DNS load balancing
Simula ambiente real do usuário
SSL labs
• Verifique sua configuração de SSL
Obrigado!