Do que se trata o artigo:

Content Delivery Network é um grande sistema distribuído de servidores instalados em múltiplos datacenters ao redor do mundo. O objetivo principal das CDNs é prover distribuição de conteúdo online com alta performance, disponibilidade e segurança aos usuários finais.


Em que situação o tema é útil:

As Content Delivery Networks têm utilidade em diversas áreas: websites em geral (e-commerce, site de notícias etc.), aceleração de aplicações corporativas na internet (Internet Banking, sites B2B, Setor Público etc.), segurança de aplicações web e entrega de vídeo e downloads pela internet.

Resumo DevMan:

Neste artigo serão apresentadas as principais características das CDNs – Content Delivery Networks. Será explicado como elas funcionam, assim como as vantagens técnicas e de negócios no uso desse tipo de rede. Também será apresentada uma comparação das CDNs tradicionais com Cloud Computing. Por fim, será analisado um estudo de caso da rede da Akamai e como ela funciona.

Content Delivery Networks (CDNs) estão em uso no mundo há mais de 15 anos e hoje aceleram aplicações para quase todos os usuários da internet, na maioria dos casos, sem que eles saibam. O resultado de tudo isso é que mais de 30% do tráfego da Internet passa pelas CDNs.

Entre 1995 e 1998, o conceito e algoritmo das CDNs foram criados em um projeto acadêmico no Massachusetts Institute of Technology (MIT). Desde então, a internet multiplicou sua importância e hoje ele está presente em todos os aspectos de nossas vidas. Com a demanda dos usuários por desempenho cada vez maior, a CDN tornou-se uma necessidade para grandes empresas na internet.

No Brasil, as CDNs ainda são relativamente desconhecidas do público, mas são largamente utilizadas em alguns ramos como e-commerce, mídia e entretenimento, portais de notícias e grandes empresas em geral, que querem proporcionar uma experiência superior aos clientes e usuários de seus websites. É sobre este assunto que abordaremos neste artigo.

Mas o que é Content Delivery Network?

Antes de respondermos a essa pergunta, vamos entender um pouco mais sobre o problema de performance da internet.

A internet é uma rede de redes, e para ter acesso a ela, o usuário paga para um provedor de internet, que tem a sua própria rede. O provedor, por sua vez, precisa se conectar com as outras redes da internet, o que é feito através de contratos comerciais, os chamados contratos de peering. Esses contratos, e os termos monetários definidos neles, é o que determinam como o tráfego dos usuários da rede será roteado.

Portanto, além de o usuário poder estar topológica e fisicamente longe do servidor que ele pretende acessar, sua performance será impactada devido ao fato de que os roteadores estão programados para economizar dinheiro para as operadoras no caminho e não necessariamente para melhorar a performance da comunicação.

Figura 1. Distância e peering não otimizados geram performance insatisfatória.

Esse problema é ainda mais intensificado no Brasil e na América Latina, onde as grandes operadoras fazem contratos de peering muito limitados, e uma grande parte da troca de conteúdo entre elas acontece em redes de interconexão nos Estados Unidos, já que o custo para as operadoras se conectarem a essas redes é baixo e elas evitam trocar dados diretamente devido à concorrência. A Figura 1 mostra uma representação mais realista e detalhada da internet e o caminho que os pacotes de dados devem percorrer para chegar do usuário final até o servidor de origem da aplicação.

Além do problema de interesse financeiro, o BGP (Border Gateway Protocol), criado para uso nos roteadores da internet, não leva em consideração a carga de uma rota. Ou seja, mesmo que a rota esteja extremamente congestionada, o protocolo ainda enviará pacotes por aquele caminho, causando ainda mais congestionamento, perda de pacotes e piora da performance. Além disso, o algoritmo BGP ainda fica sujeito à perda de rotas acidentais ou, efetivamente, a roubos de rotas. Veja na seção Links um artigo explicando essa vulnerabilidade do BGP mais detalhadamente.

Como a CDN resolve o problema de desempenho da internet?

Content Delivery Network é uma rede distribuída, com servidores hospedados dentro dos provedores de internet ao redor do mundo. Assim, quanto maior o número de servidores e mais distribuída for a rede, melhor a qualidade da CDN para os usuários finais (Figura 2). A ideia básica desta tecnologia é que o usuário é servido por um servidor próximo e, portanto, com latência, taxa de erros e reenvio muito menores. Para conteúdos transacionais ou individualizados, como um carrinho de compras ou um extrato de conta, o servidor da CDN ainda precisa buscar a informação no servidor de origem da aplicação, mas geralmente usando métodos otimizados para atravessar a internet, como uso de rotas alternativas e otimização da camada TCP.

Figura 2. CDNs aproximam o usuário dos servidores.

Todo esse processo acontece de forma transparente para o usuário final, e normalmente é feito no nível de DNS. A empresa que contrata uma Content Delivery Network redireciona os usuários para o servidor de DNS da CDN via um registro cname (canonical name­ – ver Nota DevMan 1). A partir daí, o DNS da CDN passa a ser o responsável por eleger o servidor com a melhor performance para servir àquele determinado usuário.

Nota DevMan 1. CNAME Record

CNAME Record, ou Canonical Name Record, é um tipo de registro DNS que especifica que o domínio é um sinônimo de outro domínio. O registro mais comum de DNS é o registro A, que mapeia um hostname a um endereço IP. O registro CNAME mapeia um hostname a outro, permitindo a delegação da resolução do nome a outro servidor DNS.

Vantagens para a empresa em usar uma CDN

As CDNs melhoram a performance das aplicações web para o usuário, mas o que uma empresa ganha em adotar uma solução como esta? Em suma, a empresa obtém benefícios como aumento de receita, redução de custos e otimização de investimento em tecnologia.

A seguir descrevemos essas vantagens com mais detalhes:

· Melhor desempenho aumenta o uso do site e a receita. Qualquer que seja o modelo de negócios da empresa, atrair e reter mais usuários sempre abre a possibilidade de maiores receitas. Para sites de e-commerce, a vantagem é a mais clara possível. Quanto mais satisfeito o usuário estiver, maior será o tempo que ele passará navegando pelo site e maior será a taxa de conversão desses usuários em vendas. A concorrência no mercado de e-commerce está muito acirrada no Brasil e cinco segundos que a página leva para carregar pode ser suficiente para que o usuário abra uma nova janela e busque o produto com a concorrência.

Para sites de mídia, entretenimento e notícias, a melhor performance aumenta, no mínimo, a receita com propaganda. Isso sem falar de sites com modelos de negócios onde os usuários pagam para ter acesso ao conteúdo. Nesse tipo de modelo, os usuários são ainda mais exigentes e não admitem um desempenho ruim. Um bom exemplo desse tipo de conteúdo pago são os sites de streaming de filmes e seriados. Como o usuário paga para assistir esse conteúdo, ele espera um serviço imediatamente disponível e com imagem e som de alta definição;

· Escalabilidade. As Content Delivery Networks proporcionam capacidade global sob demanda sem a necessidade de provisionamento exagerado ou de datacenters redundantes. A adoção de uma solução de CDN permite à empresa atender os picos de acessos, sejam eles diários, semanais, mensais ou periódicos (por exemplo, período de vendas do Natal ou eventos esportivos). Essa escalabilidade é obtida sem a necessidade de hardware extra, que seria subutilizado posteriormente ao período de pico. Novamente, quanto maior e mais distribuída for a rede, mais escalável ela será;

· Offload. Cada conteúdo (imagem, JavaScript, HTML etc.) encontrado no cache do servidor da CDN significa um hit a menos no servidor de origem. Isso causa uma grande economia para a infraestrutura da empresa com banda de conexão, servidores, roteadores etc. Além disso, como o servidor de origem é acessado somente pelos servidores da CDN quando necessário, o número de conexões que eles precisam suportar é muito menor. Para tráfego HTTPS, em que uma grande quantidade de recursos é utilizada para criptografar e descriptografar o conteúdo, a CDN ainda provê um offload adicional dessas tarefas;

· Disponibilidade. Devido ao fato de ser uma rede distribuída e de grande escala, a CDN dificilmente fica indisponível. Inclusive, algumas CDNs possuem SLAs (Service Level Agreement) altíssimos para disponibilidade. No entanto, além da disponibilidade da rede em si, a CDN ainda melhora a disponibilidade do site de seus clientes. Como a CDN contém o cache do website, ainda que esse esteja indisponível em um determinado momento, os usuários ainda podem utilizá-lo sem problemas, desde que não sejam requisitadas partes transacionais do mesmo. Ainda assim, para essas partes, é possível criar mensagens amigáveis de erro, para que o usuário tente novamente mais tarde. Isso ajuda na proteção da marca e das receitas do site;

· Redução de custos. Além do offload mencionado acima proporcionar economia com investimento em infraestrutura, a adoção de CDN aumenta a utilização do canal de comunicação com o cliente mais barato para as companhias: a Internet. Empresas como bancos, provedoras de telefonia, utilidades, entre outras, têm diversos canais de atendimento ao cliente. Normalmente, pelo menos três: internet, telefônico e físico. O atendimento pela internet é sempre o que apresenta o menor custo para a empresa, porém, quando o website é muito lento, o usuário se cansa de esperar e acaba ligando ou indo a um posto de atendimento. Com um serviço de Content Delivery Network, a empresa pode diminuir o número de clientes que usam os canais mais caros e permite à empresa crescer sem a necessidade de novos investimentos em estrutura de atendimento;

· Segurança. Um dos tipos de ataques mais comuns a propriedades na internet atualmente é o DDoS – Distributed Denial of Service. Ele consiste em atacar um site de maneira distribuída com uma quantidade massiva de requisições com o intuito de “indisponibilizar” o sistema. Esse tipo de ataque ficou muito conhecido recentemente com a atividade do grupo Anonymous e similares.

Quando o site está em uma CDN, um ataque irá, na verdade, atingir à CDN. Entretanto, para alguns ataques, somente o fato de a CDN também ser distribuída já resolve o problema, já que cada servidor absorve parte do tráfego. Mesmo assim, ainda que algum servidor da CDN venha a cair, a rede e o sistema como um todo continuará disponível para os usuários efetivos do sistema.

Além disso, a maioria das CDNs oferece outros serviços de segurança, como firewall de camada três e sete, tráfego via SSL, autenticação etc.

· Adoção de ferramentas de trabalho. No mundo atual, muitas empresas têm a sua equipe distribuída geograficamente. Desse modo, usuários espalhados pelo país e pelo mundo necessitam usar aplicações como se estivessem no escritório. Isso se torna ainda mais importante no cenário de SaaS (Software como um Serviço), em que a aplicação está hospedada em um provedor na nuvem e todos os usuários do sistema são “remotos”.

A utilização de Content Delivery Network para aceleração de aplicações web permite que as empresas consigam uma maior adoção de suas ferramentas entregues através da internet, melhorando os processos e aumentando a produtividade de seus funcionários.

CDN é Cloud Computing?

Não exatamente. As CDNs têm algumas características de Cloud Computing, como: contratação como serviço (SaaS), recursos compartilhados e instalação e configuração na nuvem. Entretanto, as CDNs se diferenciam por não serem um substituto para o servidor de origem da aplicação. A ideia principal da CDN é acelerar a aplicação na internet e, portanto, usar a mesma infraestrutura já existente de forma mais inteligente. O Cloud Computing, por outro lado, oferece às empresas a alternativa de hospedar uma aplicação web em datacenters na nuvem, ao invés de próprios.

Inclusive, as CDNs funcionam muito bem com Cloud Computing: SaaS (Software as a Service), PaaS (Platform as a Service) e IaaS (Infrastructure as a Service). Em uma arquitetura conjunta, por exemplo, a aplicação é hospedada em um provedor de Cloud Computing e acelerada com uma Content Delivery Network.

Estudo de caso: como funciona a solução da Akamai

Para entender a arquitetura de uma CDN com mais detalhes, vamos apresentar e estudar como funciona a rede da Akamai, que foi a empresa pioneira e atualmente é a líder do mercado de CDN no Brasil e no mundo.

A Figura 3 mostra o fluxo de uma requisição HTTP para um domínio acelerado com a Akamai. Os passos realizados neste processo são:

1. O usuário digita www.exemplo.com.br no browser e este requisita o endereço IP de www.exemplo.com.br ao servidor de DNS local. Como este domínio tem um CNAME para a Akamai, a requisição é encaminhada ao servidor de DNS da Akamai, que retorna o endereço IP do servidor da Akamai com a menor latência para esse usuário;

2. O browser faz a requisição HTTP ao servidor web da Akamai;

3. O servidor da Akamai monta a página a partir do cache ou acessando o servidor de origem do cliente, se necessário. Por fim, a página HTML é retornada ao usuário.

Figura 3. Fluxo de uma requisição HTTP na Akamai.

Uma vez que o cname esteja configurado e o tráfego HTTP dos usuários do site esteja passando pela rede da Akamai, otimizações em diversas camadas de rede são possíveis e executadas em favor do cliente, conforme explicado na Tabela 1.

Camada de Rede

Características

IP/ Roteamento

Mapeamento Dinâmico

Otimização de Rotas - SureRoute

TCP / Transporte

Detecção automática de Falha

Offload de conexões

Otimização da camada de transporte (TCP)

HTTP / Protocolo

Compressão de dados

Cache na Borda

HTML / Apresentação

Busca antecipada (Prefetch) de objetos

Leitura e otimização de JavaScript

Tabela 1. Melhorias de performance em cada camada de rede.

A seguir, cada uma dessas melhorias de performance é descrita:

· Mapeamento Dinâmico: É a funcionalidade de eleger um servidor de borda na rede da Akamai que tenha a melhor performance para um determinado usuário. É o que provê a distribuição característica das CDNs;

· Otimização de Rotas – SureRoute: É a rota otimizada para acessar o servidor de origem da aplicação do cliente. De tempos em tempos, a rede da Akamai roda testes entre os servidores de borda e a origem do cliente usando três caminhos: o direcionado pelo BGP (Border Gateway Protocol) e outras duas rotas passando por servidores da Akamai em pontos com boa conexão. A melhor dessas rotas é escolhida e usada para comunicação até que outro teste aconteça;

· Detecção automática de falha: Se a rota determinada pelo SureRoute passar por algum problema antes que um novo teste seja executado, a rede automaticamente passará a usar o caminho com a segunda melhor performance, evitando que um problema em alguma rede afete os usuários do site;

· Offload de conexões: Os browsers modernos abrem entre seis e oito conexões TCP com o servidor web. Quando o site está com a Akamai, essas conexões são abertas com os servidores de borda e não com o servidor web de origem. A origem vai receber conexão somente dos servidores da Akamai. Além disso, as conexões abertas pela Akamai serão persistentes e reutilizadas para diferentes usuários, diminuindo ainda mais a carga na infraestrutura do cliente;

· Otimização da camada de transporte (TCP): O protocolo TCP (Transmission Control Protocol) foi criado em 1974, quando a qualidade da internet era muito menor. O TCP controla o estabelecimento de conexões entre máquinas de origem e destino, a taxa de transmissão de pacotes entre as duas, a detecção de perda de pacotes e algoritmos de recuperação. A Akamai é capaz de otimizar janelas de conexão, ajustar timeouts e algoritmos de recuperação de perdas, maximizar o uso de conexões persistentes e controlar outros aspectos do protocolo para melhorar o desempenho do site. Em última análise, estas otimizações maximizam a performance entre os servidores de borda da Akamai e o servidor de origem;

· Compressão de dados: Os browsers atuais conseguem receber e interpretar conteúdo compactado, porém a maioria das empresas não tira proveito dessa funcionalidade por falta de conhecimento, falta de recursos de processamento na origem ou devido ao trabalho envolvido para implementar uma lógica que faça a compactação somente para browsers que suportam receber conteúdo compactado. Com o serviço da Akamai, o cliente pode servir o conteúdo sem compactação, o servidor Akamai que recebe esse conteúdo o compacta e o servidor de borda decide se entrega o conteúdo compactado ou não, baseado no tipo e versão do browser que solicitou;

· Cache na Borda: É a funcionalidade que permite armazenar o conteúdo de um site no servidor de borda da rede Akamai, ou seja, o mais próximo possível do usuário final. Quando o conteúdo não está no cache, o servidor de borda busca na origem. A partir daí, para as próximas requisições, o conteúdo é servido dos servidores Akamai e a origem fica livre de ter que responder por essas requisições. É importante observar que não só conteúdo estático pode ser cacheado. Páginas dinâmicas, montadas por aplicações com consultas a banco de dados também podem ser cacheadas, desde que não tenham nenhum dado pessoal. Mesmo nesses casos, há formas de cachear partes da página e deixar sem cache somente o conteúdo pessoal. A vantagem de cachear também as páginas dinâmicas é que essas requisições que fazem consultas a banco de dados são as mais “caras” computacionalmente, isto é, não somente se usa banda para responder, mas também recursos dos servidores web, de aplicação e de banco de dados. Sem falar em ataques que exploram URLs que buscam conteúdos dinâmicos justamente para sobrecarregar a origem com processamento. O cache dessas URLs ajuda a amenizar esses tipos de ataques;

· Busca antecipada (Prefetch) de objetos: É o mecanismo que se passa no servidor de borda da Akamai quando uma página HTML é requisitada pelo browser do usuário. Quando o servidor de borda busca a página no servidor de origem, antes de enviar a resposta com a página ao browser, o servidor analisa o HTML e busca por imagens, JavaScripts, Cascade Style Sheets (CSS) etc. Enquanto envia a página ao browser, o servidor busca esses objetos na origem, quando eles não estão em cache. Dessa forma, quando o browser recebe o HTML e começa a pedir pelos objetos internos, o servidor de borda já os tem e pode servir sem necessidade de buscar na origem;

· Leitura e otimização de JavaScript: Da mesma forma que o HTML é analisado em busca de links para objetos, os JavaScripts também são. Quando há links para objetos dentro do JavaScript, esses objetos também serão baixados para o servidor de borda da Akamai quando o JavaScript passar pelo servidor.

Todas essas características permitem que a Akamai forneça um Service Level Agreement (SLA) de melhora de pelo menos 50% na performance do website, quando comparado com a performance da aplicação servida de maneira centralizada. Esse SLA de performance se soma ao de disponibilidade da rede: 100% disponível por SLA, o que é possível graças à grande escala e distribuição da rede da Akamai.

Essa é a solução para aceleração de websites dinâmicos (Dynamic Site Accelerator). Além dela, as CDNs também têm outras aplicações: entrega de vídeo, aceleração de aplicações, segurança, entre outras. A base das outras soluções é a mesma. A diferença está na camada de aplicação, onde há diferentes tratamentos para cada necessidade.

Conclusão

As CDNs estão aqui para ficar. A demanda por alto desempenho por parte de usuários está mudando a maneira de investir em websites. A escalabilidade, offload e segurança que as CDNs agregam permite um investimento mais inteligente em recursos de TI, bem como garante a disponibilidade do site em momentos de alto tráfego e receita para a empresa.

Do ponto de vista técnico, em uma aplicação web, as CDNs visam otimizar a performance na camada de rede, ao invés do foco usual em aprimorar o desempenho de processamento da aplicação. As CDNs focam na otimização quando o gargalo está na transmissão da informação depois que o conteúdo sai do servidor web até chegar ao usuário. Com sua rede distribuída, as CDNs resolvem esse problema de uma maneira que nenhuma arquitetura de software pode resolver: estando perto – leia-se, com baixa latência – dos usuários.

Essas melhorias são potencializadas nas CDNs que têm uma rede grande e bem distribuída. Todas as vantagens descritas nesse artigo são possíveis graças à proximidade do servidor da CDN ao usuário final. Com o acesso à Internet crescendo no Brasil e no mundo, fornecer uma performance aceitável para aplicações web cada vez mais dependerá de estar próximo, inclusive topologicamente, dos usuários e dos clientes.

Links

Especificação do registro CNAME
http://tools.ietf.org/html/rfc1034

Home Page da Akamai
http://www.akamai.com/

Artigo sobre a vulnerabilidade do protocolo BGP
http://www.wired.com/threatlevel/2008/08/revealed-the-in/