Maximizar a taxa de acerto/cache do CDN para Discourse?

Olá a todos,

Tenho a seguinte configuração de CDN:

  • um pullzone para os arquivos JS
  • um pullzone para os logotipos e gráficos da página inicial (que são acessados com frequência)
  • um pullzone para os ativos do S3 (no Digital Ocean Spaces)

Uso o BunnyCDN. Meu tráfego do fórum é de aproximadamente 85% na América do Norte, 5% no Reino Unido/França e 10% no Sudeste Asiático.

Para os dois primeiros pullzones, utilizo todos os 34 servidores de borda da CDN ao redor do mundo, pois são arquivos acessados frequentemente, o que me permite manter a latência baixa, ao mesmo tempo em que mantenho as taxas de cache/acerto relativamente altas (92% e 99,8%, respectivamente). Idealmente, gostaria de aumentar a taxa de cache para os arquivos JS, mas o desafio é que os data centers com baixo tráfego apresentam taxas de cache ruins devido à baixa frequência de acesso a esses arquivos JS (algumas vezes por mês).

Para o terceiro pullzone de ativos do S3, utilizo 10 servidores de borda na América do Norte e na Europa, pois os ativos gerados pelo usuário no S3 são às vezes acessados com pouca frequência, então não prefiro ter um número muito alto de CDNs, o que poderia reduzir a taxa de acerto/cache e, por extensão, o tempo de acesso. Idealmente, gostaria de ter um servidor de borda no Sudeste Asiático, mas a CDN não permite que eu selecione especificamente quais data centers posso usar. Minha taxa de acerto/cache no BunnyCDN é de cerca de 78%, o que achei decente, pois, por exemplo, alguém acessando uma imagem original em tamanho completo em vez de apenas visualizar a versão otimizada, ou uma referência de mecanismo de busca para uma discussão antiga e pouco acessada, certamente reduzirá essa porcentagem. Eu usava o Cloudfront anteriormente, e a taxa de acerto/cache era de cerca de 55%, mas isso poderia ser uma função do Cloudfront ter muitas localizações de servidores de borda para sua CDN, ou talvez meu tráfego do fórum seja relativamente pequeno para eles. (Mudei do Cloudfront por causa do custo, já que somos um fórum de hobby com receita mínima.)

A pergunta para o grupo é: vocês têm alguma estratégia ou método que permita manter a taxa de acerto/cache alta? Que tipo de taxa de acerto/cache vocês estão obtendo?

Alguma sugestão para eu ajustar minha configuração e aumentar essa porcentagem? Existem CDNs econômicas que permitem selecionar quais localizações de servidores de borda usar? Posso fazer isso por meio de regras de borda? Se sim, posso escolher apenas cinco para manter a taxa de cache alta: Costa Oeste dos EUA, Costa Leste dos EUA, Sul dos EUA, Reino Unido e Singapura, já que é onde meu tráfego está concentrado.

Uma ideia seria manter os ativos otimizados servidos pelo S3 e os ativos originais servidos pelos espaços DO, mas a separação não é viável por padrão no software.

Alguma outra sugestão?

I see, so your idea is to reduce the number of geographical points to increase hit rate? Because if you have “one” location aka everything on one server, that’s a perfect hit rate. :wink:

I would imagine this comes down to knowing your specific audience, and where they are – so metrics would need to be gathered first about which geographical CDN points are being hit, then consolidate to the most used?

If you want a higher hit rate then your choices are 1) fewer PoPs or 2) longer retention. The first choice is going to make the experience worse for some clients, the second is going to cost more money (if it’s even available).

This is exactly what you need to find out. What are your misses and where are they coming from?

The 5 PoPs closest to the majority of our traffic are averaging about low 80s% hit cache rate, whereas the other ones with more sporadic traffic- the lower the traffic is, the lower the hit rate, sometimes below 50%. That’s when I think consolidating the PoPs can bring the hit rate up so the CDN doesn’t always have to go back to the origin to fetch, which, speedwise is worse than just serving from the origin. Its a tradeoff between additional latency with PoPs located farther away, and reduced latency from increased cache rate at the PoP.

Longer retention is tougher to solve. That’s the lever that can bring up the hit rate for the high traffic PoPs, and I don’t necessarily have a solution for that, yet.

I am curious about others’ experience- Does high-70s% and low-80s% cache rate for user-uploaded assets feel low/ about right?

It really depends how often the Discourse instance is updated/deployed though. For us, we deploy a lot so that colors the data significantly.