CDN para armazenar em cache a API REST

3
Estou fazendo algumas pesquisas sobre provedores de CDN, no entanto, tenho dificuldade em descobrir quais estão disponíveis, o que eles oferecem exatamente, e se eles são apropriados para o meu propósito. Espero que vocês possam me dar alguns conselhos: -)

Estamos hospedando uma API REST pública em uma instância do Amazon EC2. Cada chamada é dinâmica e exige muita CPU, mas geralmente a atividade é razoavelmente estável. No entanto, regularmente há picos altos e curtos de muitos usos, solicitando simultaneamente o (s) mesmo (s) recurso (s). Isso acontece, por exemplo, depois que alguém faz um blog ou twittou um link para um recurso, e todos clicam nele.

Muitos recursos não mudam com freqüência e meu servidor está enviando cabeçalhos explícitos de Cache-Control max-age, especificando o tempo que cada recurso poderia e deveria ser armazenado em cache. Preciso de um cache da web / proxy reverso / CDN que faça um bom trabalho inspecionando cabeçalhos de controle de cache e armazenando essas chamadas em cache, para que, se 1000 clientes solicitarem o mesmo recurso em um minuto, meu servidor só precise atendê-lo uma vez ou pelo menos não 1000 vezes.

Além disso, o CDN deve ser capaz de armazenar em cache qualquer solicitação HTTP GET, independentemente do tipo de conteúdo ou URI. Limitações do tamanho do arquivo não são problema; a saída é geralmente breve e compacta. Eu estava experimentando com Cloudflare hoje; no entanto, eles armazenam em cache apenas arquivos estáticos com base na 'extensão de arquivo' do URI, o que o torna completamente inútil para a maioria das APIs REST. E por último, mas não menos importante, sou uma startup pequena, de preferência algo acessível e escalável para cima e para baixo.

Quais são os provedores que podem atender a esses requisitos? Obrigado por qualquer experiência / conselho.

    
por Jeroen 30.07.2011 / 21:35

3 respostas

3

Qualquer CDN que seja capaz de "buscar origem" (que é o termo da indústria de CDN, a maioria de nós chamaria de proxy reverso) deve fazer o que você precisa. Entre CDNs de baixo custo e pay-per-use, sei que eles têm esse recurso:

Observe que o Rackspace Cloud Files, que usa o Akamai como um CDN, suporta apenas arquivos de origem estática carregados em seus servidores.

Um ponto de atrito pode ter uma vida útil mínima do cache. O conteúdo em rápida agitação cria problemas para os CDNs, que são projetados para fornecer conteúdo estático. Portanto, se você definir "Cache-Control: max-age = 5", um CDN específico pode alterar isso para algum valor mínimo como 3600, ou não armazená-lo em cache e simplesmente passar a solicitação de volta para sua origem.

Se nenhum dos CDNs de pagamento por uso oferecer a vida útil do cache tão curta quanto você precisar, talvez seja necessário consultar o serviço CDN contratado. Ou, sua melhor opção será configurar o Verniz ou Nginx para fazer o cache em uma ou mais instâncias do EC2.

    
por 04.08.2011 / 16:54
3

Existem empresas especializadas em serviços de gerenciamento de API, incluindo armazenamento em cache.

Dois nomes do topo da minha cabeça:

  1. apigee
  2. Mashery

Você pode ter mais sorte com eles do que com um CDN tradicional.

Se você estiver procurando por um proxy de cache reverso interno, então Varnish fará um bom trabalho.

    
por 31.07.2011 / 00:41
1

Eu não posso falar por outros CDN's / menores, mas eu trabalhei com a Akamai e a Level3. Eu posso lhe dizer que a Akamai pode definitivamente armazenar em cache por mime-type, ou mesmo uri-stems de correspondência curinga. Eles podem fazer praticamente tudo que você está procurando, só não sei se você vai encontrá-los dentro do seu orçamento.

Uma vez pela Akamai, se todas as solicitações forem www.seusite.com, e você quiser armazenar algumas em cache, será necessário refazer o seu aplicativo um pouco, se você quiser economizar custos. Por exemplo, se você mantê-lo em www.seusite.com, todas as solicitações começarão a passar pela Akamai, já que o host agora é redirecionado para um host akamai. Qualquer coisa que não esteja configurada para ser armazenada em cache será intermediada por proxy.

Por outro lado, você pode renomear partes de seu site de tal forma que seu cookie é definido com domain = * www.seusite.com, e reescrever partes de forma que as partes que você deseja armazenar em cache estejam realmente no host cdn.www.seusite .com (ou qualquer outra coisa, você entendeu a ideia). Isso significa que qualquer coisa que você não queira colocar em cache é direto para a origem, enquanto qualquer coisa que esteja no subdomínio cdn.www.yoursite.com vai realmente atingir o akamai. Você precisará fazer arranjos necessários em seu servidor de origem para acomodar isso também sem dúvida.

A Akamai tem uma opção de faturamento (se houver ainda outra opção para um site que vê hits medidos apenas em 1000 por dia) que é baseado em largura de banda, e isso pode economizar um pouco de dinheiro.

Tudo isso dito, para ser honesto, se você está falando de hits significativos para recursos que são estáticos (suficientes) para garantir o controle de cache, e é apenas uma questão de milhares, você pode estar procurando resolver o problema. problema errado. Se essas solicitações exigirem uma chamada de back-end em cada solicitação em seu aplicativo da web, você deverá analisar o retrabalho para que seja armazenado em cache no aplicativo e tornar as solicitações da Web para esse recurso menos dispendiosas.

    
por 30.07.2011 / 23:06