¿Cómo maximizar la tasa de aciertos/caché del CDN para Discourse?

Hola a todos,

Tengo la siguiente configuración de CDN:

  • un pullzone para los archivos JS
  • un pullzone para los logotipos y gráficos de la página de inicio (que se acceden con frecuencia)
  • un pullzone para los activos de S3 (en Digital Ocean Spaces)

Utilizo BunnyCDN. Mi tráfico del foro es aproximadamente 85% de América del Norte, 5% del Reino Unido/Francia y 10% del Sudeste Asiático.

Para los dos primeros pullzones, utilizo las 34 servidores perimetrales (edge servers) de la CDN en todo el mundo, ya que son archivos de acceso frecuente, lo que me permite mantener una latencia baja mientras mantengo una tasa de caché/aciertos relativamente alta (92% y 99.8% respectivamente). Idealmente, me gustaría aumentar la tasa de caché para los archivos JS, pero el desafío es que los centros de datos con poco tráfico tienen una mala tasa de caché debido a lo infrecuente del acceso a esos archivos JS (unas pocas veces al mes).

Para el tercer pullzone de activos de S3, utilizo 10 servidores perimetrales en América del Norte y Europa, ya que los activos generados por el usuario en S3 a veces se acceden con poca frecuencia, por lo que no prefiero tener un número muy alto de CDNs que reduzcan la tasa de aciertos/caché y, por extensión, el tiempo de acceso. Idealmente, me gustaría tener un servidor perimetral en el Sudeste Asiático, pero la CDN no me permite seleccionar manualmente qué centro de datos puedo utilizar. Mi tasa de aciertos/caché en BunnyCDN es de aproximadamente 78%, lo que consideré decente porque, por ejemplo, alguien que accede a una imagen original de tamaño completo en lugar de solo ver la optimizada, o una referencia de un motor de búsqueda a una discusión antigua y de acceso infrecuente, definitivamente reducirá ese porcentaje. Anteriormente usé Cloudfront, y la tasa de aciertos/caché era de aproximadamente 55%, pero eso podría deberse a que Cloudfront tiene muchas ubicaciones de servidores perimetrales para su CDN, o a que el tráfico de mi foro es relativamente pequeño para ellos. (Me mudé de Cloudfront debido al costo, ya que somos un foro de aficionados con ingresos mínimos.)

La pregunta para el grupo es: ¿tienen alguna estrategia o método que les permita mantener alta la tasa de aciertos/caché? ¿Qué tipo de tasa de aciertos/caché están obteniendo?

¿Alguna sugerencia para que ajuste mi configuración y aumente el porcentaje? ¿Hay alguna CDN económica que permita seleccionar manualmente qué ubicaciones de servidores perimetrales utilizar? ¿Puedo hacer eso mediante reglas perimetrales (edge rules)? De ser así, podría simplemente seleccionar cinco para mantener alta la tasa de caché: la costa oeste de EE. UU., la costa este de EE. UU., el sur de EE. UU., el Reino Unido y Singapur, ya que es donde se concentra mi tráfico.

Una idea es mantener los activos optimizados servidos desde S3 y los activos originales desde los espacios de DO, pero la separación no es factible por defecto desde el software.

¿Alguna otra idea?

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.