Uma rede de entrega de conteúdos (CDN) é uma rede distribuída de servidores que pode fornecer conteúdo Web de forma eficiente aos utilizadores. As CDNs armazenam conteúdo armazenado em cache em servidores de borda próximos aos usuários finais para minimizar a latência.
Geralmente, as CDNs são utilizadas para entregar conteúdos estáticos, como imagens, folhas de estilo, documentos, scripts do lado do cliente e páginas HTML. As principais vantagens da utilização de uma CDN são menor latência e entrega mais rápida de conteúdos aos utilizadores, independentemente da respetiva localização geográfica em relação ao centro de dados em que a aplicação está alojada. As CDNs também podem ajudar a reduzir a carga numa aplicação Web, porque a aplicação não tem de processar pedidos para os conteúdos que estão alojados na CDN.
No Azure, a Rede de Entrega de Conteúdos do Azure é uma solução de CDN global para a entrega de conteúdos de largura de banda elevada que estão alojados no Azure ou em qualquer outra localização. Usando a Rede de Entrega de Conteúdo do Azure, você pode armazenar em cache objetos publicamente disponíveis carregados do armazenamento de blob do Azure, um aplicativo Web, máquina virtual, qualquer servidor Web acessível publicamente.
Este tópico descreve algumas melhores práticas e considerações para utilizar CDNs. Para obter mais informações, consulte CDN do Azure.
Como e porquê utilizar uma CDN
As utilizações típicas de uma CDN incluem:
Entregar recursos estáticos para aplicações cliente, muitas vezes a partir de um site. Esses recursos podem ser imagens, folhas de estilo, documentos, ficheiros, scripts do lado do cliente, páginas HTML, fragmentos HTML ou qualquer outro conteúdo que o servidor não tem de modificar para cada pedido. A aplicação pode criar itens no tempo de execução e disponibilizá-los à CDN (por exemplo, ao criar uma lista de manchetes de notícias atuais), mas não o faz para cada pedido.
Entregar conteúdos estáticos e partilhados públicos a dispositivos, como telemóveis e computadores tablet. A aplicação em si é um serviço Web que oferece uma API para os clientes em execução nos diversos dispositivos. A CDN também pode entregar conjuntos de dados estáticos (através do serviço Web) para os clientes utilizarem, talvez para gerar a IU do cliente. Por exemplo, a CDN pode ser utilizada para distribuir documentos JSON ou XML.
Disponibilizar sites inteiros que consistem apenas em conteúdos estáticos públicos aos clientes, sem exigir recursos de computação dedicados.
Transmitir ficheiros de vídeo em fluxo ao cliente a pedido. Os vídeos beneficiam da baixa latência e da conectividade fiável que estão disponíveis com os datacenters localizados em todo o mundo que oferecem as ligações à CDN. Os Serviços de Mídia do Microsoft Azure integram-se à Rede de Entrega de Conteúdo do Azure para entregar conteúdo diretamente à CDN para distribuição posterior. Para obter mais informações, veja Streaming endpoints overview (Descrição geral dos pontos finais de transmissão em fluxo).
Melhorar, de uma forma geral, a experiência para os utilizadores, especialmente daqueles que estão localizados longe do datacenter que aloja a aplicação. Caso contrário, estes utilizadores poderão experienciar uma latência mais alta. Uma grande proporção do tamanho total do conteúdo em um aplicativo Web geralmente é estática, e o uso da CDN pode ajudar a manter o desempenho e a experiência geral do usuário, eliminando a necessidade de implantar o aplicativo em vários datacenters. Para obter uma lista de locais de nó da Rede de Entrega de Conteúdo do Azure, consulte Locais POP da CDN do Azure.
Suportar soluções de IoT (Internet das Coisas). O grande número de dispositivos e aplicações envolvidos numa solução de IoT podem facilmente sobrecarregar uma aplicação, se esta tiver de distribuir atualizações de firmware diretamente a cada dispositivo.
Lidar com picos e picos de procura sem exigir que a aplicação ganhe escala, evitando o consequente aumento dos custos de funcionamento. Por exemplo, quando for lançada uma atualização a um sistema operativo para um dispositivo de hardware, como um modelo específico do router, ou para um dispositivo de consumidor, como uma televisão inteligente, haverá um pico enorme na procura, pois será transferida por milhões de utilizadores e dispositivos durante um curto espaço de tempo.
Desafios
É preciso ter em conta vários desafios ao planear a utilização de uma CDN.
Implementação. Decida a origem a partir da qual a CDN vai obter os conteúdos e se tem de implementá-los em mais de um sistema de armazenamento. Tenha em consideração o processo de implementação de conteúdos estáticos e de recursos. Por exemplo, poderá ter de implementar um passo separado para carregar conteúdos para o armazenamento de blobs do Azure.
Controlo de versões e controlo da cache. Considere como vai atualizar os conteúdos estáticos e implementar novas versões. Compreenda de que forma é que a CDN faz a colocação em cache e o TTL (Time-to-Live). Para a Rede de Entrega de Conteúdo do Azure, consulte Como funciona o cache.
Testes. Pode ser difícil realizar testes locais das suas definições da CDN ao desenvolver e testar uma aplicação localmente ou num ambiente de teste.
Otimização dos motores de busca (SEO). Quando utiliza a CDN, determinados conteúdos, como imagens e documentos, são disponibilizados a partir de um domínio diferente. Isto pode ter um efeito no SEO desses conteúdos.
Segurança dos conteúdos. Nem todas as CDNs oferecem uma forma de controlo de acesso aos conteúdos. Alguns serviços de CDN, incluindo a Rede de Entrega de Conteúdo do Azure, oferecem suporte à autenticação baseada em token para proteger o conteúdo da CDN. Para obter mais informações, veja Securing Azure Content Delivery Network assets with token authentication (Proteger recursos da Rede de Entrega de Conteúdos do Azure com a autenticação de tokens).
Segurança dos clientes. Os clientes podem ligar-se a partir de um ambiente que não permite acesso aos recursos na CDN. Pode ser um ambiente com restrições de segurança que limite o acesso a apenas um conjunto de origens conhecidas ou que impeça o carregamento de recursos a partir de qualquer outro local que não a origem da página. Para lidar com estes casos, é necessária uma implementação de contingência.
Resiliência. A CDN é um potencial ponto único de falha de uma aplicação.
Os cenários em que uma CDN pode ser menos útil incluem:
Se os conteúdos tiverem uma taxa de ocorrências baixa, só se pode aceder aos mesmos poucas vezes enquanto é válido (determinado pelas respetivas definições de TTL).
Se os dados forem privados, como, por exemplo, em empresas grandes ou em ecossistemas de redes de distribuição.
Orientações gerais e boas práticas
Utilizar uma CDN é uma boa forma a minimizar a carga na sua aplicação e maximizar a disponibilidade e desempenho. Considere adotar esta estratégia para todos os conteúdos e recursos adequados que a sua aplicação utiliza. Quando desenhar a estratégia para utilizar uma CDN, considere os pontos das secções seguintes.
Implementação
Poderá ser necessário aprovisionar e implementar os conteúdos estáticos de forma independente da aplicação se não os incluir no pacote de implementação ou no processo da aplicação. Determine como é que isto afeta a abordagem de controlo de versões que utiliza para gerir os componentes da aplicação e os conteúdos de recursos estáticos.
Considere utilizar técnicas de agrupamento e minimização para reduzir os tempos de carregamento para os clientes. O agrupamento combina vários ficheiros num único. A minimização remove carateres desnecessários dos scripts e dos ficheiros CSS sem alterar a funcionalidade.
Se precisar de implementar os conteúdos numa localização adicional, esse será um passo adicional no processo de implementação. Se a aplicação atualizar os conteúdos da CDN, talvez em intervalos regulares ou como resposta a eventos, tem de armazenar os conteúdos atualizados nas localizações adicionais, bem como no ponto final da CDN.
Considere de que forma vai processar o desenvolvimento local e os testes quando se esperar que sejam disponibilizados conteúdos estáticos a partir de uma CDN. Por exemplo, você pode pré-implantar o conteúdo na CDN como parte do script de compilação. Em alternativa, utilize diretivas de compilação ou sinalizadores para controlar a forma como a aplicação carrega os recursos. Por exemplo, no modo de depuração, a aplicação poderia carregar os recursos estáticos a partir de uma pasta local. No modo de versão, a aplicação utilizaria a CDN.
Considere as opções de compressão de ficheiros, como gzip (GNU zip). A compressão pode ser realizada no servidor de origem, por parte do alojamento da aplicação Web, ou diretamente nos servidores edge, por parte da CDN. Para obter mais informações, veja Improve performance by compressing files in Azure CDN (Comprimir ficheiros na CDN do Azure para melhorar o desempenho).
Encaminhamento e controlo de versões
Poderá ter de utilizar diferentes instâncias da CDN em momentos diferentes. Por exemplo, quando implementar uma versão nova da aplicação, poderá querer utilizar uma CDN nova e manter a antiga (que contém conteúdos num formato mais antigo) para versões anteriores. Se utilizar o armazenamento de blobs do Azure como a origem dos conteúdos, pode criar uma conta de armazenamento ou um contentor em separado e apontar o ponto final da CND para o mesmo.
Não utilize a cadeia de consulta para indicar versões diferentes da aplicação em ligações para recursos na CDN, uma vez que, ao obter conteúdos do armazenamento de blobs do Azure, a cadeia de consulta faz parte do nome do recurso (o nome do blob). Esta abordagem também pode afetar a forma como o cliente coloca os recursos em cache.
Implementar versões novas de conteúdos estáticos quando atualiza uma aplicação pode ser desafiante se os recursos anteriores estiverem colocados em cache na CDN. Para obter mais informações, veja a secção sobre o controlo de cache, abaixo.
Considere restringir o acesso ao conteúdo da CDN por país/região. A Rede de Entrega de Conteúdo do Azure permite filtrar solicitações com base no país ou região de origem e restringir o conteúdo entregue. Para obter mais informações, consulte Restringir o acesso ao seu conteúdo por país/região.
Controlo de cache
Considere como gerir a colocação em cache no sistema. Por exemplo, na Rede de Entrega de Conteúdo do Azure, você pode definir regras de cache global e, em seguida, definir cache personalizado para pontos de extremidade de origem específicos. Também pode controlar a forma como a colocação em cache é realizada numa CDN ao enviar cabeçalhos de diretivas de cache na origem.
Para obter mais informações, veja How caching works (Como funciona a colocação em cache).
Para impedir que os objetos estejam disponíveis na CDN, pode eliminá-los da origem, remover ou eliminar o ponto final da CDN ou, no caso do armazenamento de blobs, tornar o contentor ou blob privado. No entanto, os itens não são removidos da CDN até que o tempo de vida expire. Também pode remover manualmente o ponto final das CDNs.
Segurança
A CDN pode entregar os conteúdos através de HTTPS (SSL) mediante a utilização do certificado fornecido pela CDN, bem como através de HTTP padrão. Para evitar avisos de browser sobre conteúdos mistos, poderá ter de utilizar HTTPS para pedir conteúdos estáticos que são apresentados nas páginas carregadas através de HTTPS.
Se utilizar a CDN para entregar recursos estáticos, como ficheiros de tipos de letra, poderá deparar-se com problemas de políticas de mesma origem se utilizar uma chamada XMLHttpRequest para pedir esses recursos a partir de um domínio diferente. Muitos browsers impedem a partilha de recursos de várias origens (CORS), a menos que o servidor Web esteja configurado para definir os cabeçalhos de resposta adequados. Pode configurar a CDN para suportar CORS com um dos métodos abaixo:
Configurar a CDN para adicionar cabeçalhos CORS às respostas. Para obter mais informações, veja Using Azure CDN with CORS (Utilizar a CDN do Azure com CORS).
Se a origem for o armazenamento de blobs do Azure, adicionar as regras CORS ao ponto final do armazenamento. Para obter mais informações, veja Cross-Origin Resource Sharing (CORS) Support for the Azure Storage Services (Suporte para a Partilha de Recursos de Várias Origens (CORS) para os Serviços de Armazenamento do Azure).
Configurar a aplicação para definir os cabeçalhos CORS. Por exemplo, consulte Habilitando solicitações entre origens (CORS) na documentação do ASP.NET Core.
Contingência da CDN
Considere de que forma é que a aplicação vai lidar com uma falha ou indisponibilidade temporária da CDN. As aplicações cliente poderão utilizar cópias dos recursos que foram colocados em cache localmente (no cliente) durante os pedidos anteriores ou pode incluir código que detete a falha e, em vez disso, pede os recursos a partir da origem (a pasta da aplicação ou o contentor de blobs do Azure que contém os recursos) se a CDN não estiver disponível.