Maximiser le taux de succès/du cache du CDN pour Discourse ?

Bonjour à tous,

J’ai configuré le CDN suivant :

  • un pullzone pour les fichiers JS
  • un pullzone pour les logos et les graphiques de la page d’accueil (fréquemment consultés)
  • un pullzone pour les assets S3 (sur Digital Ocean Spaces)

J’utilise BunnyCDN. Mon trafic de forum se répartit approximativement comme suit : 85 % en Amérique du Nord, 5 % au Royaume-Uni/en France et 10 % en Asie du Sud-Est.

Pour les deux premiers pullzones, j’utilise l’ensemble des 34 serveurs de bordure (edge servers) du CDN répartis dans le monde, car il s’agit de fichiers fréquemment consultés. Cela me permet de maintenir une faible latence tout en conservant un taux de cache/taux de succès (hit rate) relativement élevé (respectivement 92 % et 99,8 %). Idéalement, je souhaiterais obtenir un taux de cache encore plus élevé pour les fichiers JS, mais le défi réside dans le fait que les centres de données à faible trafic affichent un mauvais taux de cache en raison de la rareté des accès à ces fichiers JS (quelques fois par mois).

Pour le troisième pullzone dédié aux assets S3, j’utilise 10 serveurs de bordure répartis en Amérique du Nord et en Europe. En effet, les assets S3 générés par les utilisateurs sont parfois consultés de manière irrégulière, et je préfère éviter d’avoir un nombre trop élevé de nœuds CDN qui réduiraient le taux de succès/cache, et par conséquent, augmenteraient le temps d’accès. Idéalement, j’aimerais avoir un serveur de bordure en Asie du Sud-Est, mais le CDN ne me permet pas de sélectionner manuellement les centres de données. Mon taux de succès/cache chez BunnyCDN est d’environ 78 %, ce que je juge décent, car par exemple, la consultation d’une image originale en pleine résolution plutôt que d’une version optimisée, ou un référencement par un moteur de recherche vers une ancienne discussion rarement consultée, font inévitablement baisser ce pourcentage. J’utilisais auparavant Cloudfront, avec un taux de succès/cache d’environ 55 %, mais cela pourrait être dû au fait que Cloudfront dispose de nombreuses emplacements de serveurs de bordure, ou simplement que mon trafic de forum est relativement faible pour eux. (J’ai quitté Cloudfront pour des raisons de coût, car nous sommes un forum de passionnés avec des revenus minimes.)

Ma question pour le groupe est la suivante : avez-vous des stratégies ou des méthodes pour maintenir un taux de succès/cache élevé ? Quel taux de succès/cache obtenez-vous ?

Avez-vous des suggestions pour optimiser ma configuration et augmenter ce pourcentage ? Existe-t-il des CDN économiques permettant de sélectionner manuellement les emplacements des serveurs de bordure ? Puis-je le faire via des règles de bordure (edge rules) ? Si oui, je pourrais simplement en sélectionner cinq pour maintenir un taux de cache élevé : la côte ouest des États-Unis, la côte est des États-Unis, le sud des États-Unis, le Royaume-Uni et Singapour, car c’est là que mon trafic est concentré.

Une idée serait de servir les assets optimisés depuis S3 et les assets originaux depuis les espaces DO, mais cette séparation n’est pas réalisable par défaut au niveau du logiciel.

D’autres réflexions ?

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.