Jorge González Rubio

Jorge González Rubio

SysAdmin & DevOps Engineer
Related topics: Cloud Systems Web Development

¿Qué es un CDN y por qué tus activos digitales tienen que tenerlo?

26 enero 2021
2 minutos
¿Qué es un CDN y por qué tus activos digitales tienen que tenerlo?
Según Wikipedia: «Una red de distribución de contenidos (CDN, content delivery network en inglés) es una red superpuesta de ordenadores que contienen copias de datos, colocados en varios puntos de una red con el fin de maximizar el ancho de banda para el acceso a los datos de clientes por la red. Un cliente accede a una copia de la información cerca del cliente,​ en contraposición a todos los clientes que acceden al mismo servidor central, a fin de evitar embudos cerca de ese servidor.» Vale, gracias Wikipedia. Pero, ¿y en castellano? A continuación intentaremos explicar qué es una CDN de una manera sencilla y por qué deberías tener una.  

¿Qué es una CDN?

Supongamos que somos un periódico/blog y nuestros servidores se encuentran en un CPD (lugar donde están nuestros servidores físicamente) en Madrid. A partir de ahora, a nuestra plataforma la llamaremos «origen». Cuando nos referimos a «nuestro origen», estamos hablando de nuestros servidores que contienen la web, y el lenguaje de nuestro site es el castellano. Nuestro supuesto periódico/blog será consultado por usuarios que estén fuera de Madrid, fuera de España y fuera de Europa. Al ser un site en castellano, mucho del tráfico que recibamos será desde Latinoamérica (por una razón obvia, el idioma). Perfecto, tenemos nuestro supuesto site en mente, y ahora vamos a ver qué pasa con el tráfico que nos llega de los distintos usuarios. El usuario1, situado en Asturias, empieza a navegar por nuestro site. Entra en la portada y empieza a generar tráfico, el cual irá desde Asturias hasta Madrid (imágenes, videos, etc..). La petición llegará a nuestros servidores de Madrid, los cuales generarán el contenido. Una vez generado el objeto, será enviada al usuario1 hasta Asturias. Ese tiempo invertido en generar el recurso que ha solicitado el usuario1, implica muchas más cosas: ancho de banda, CPU, RAM, etc… De modo que el tiempo de respuesta aumentará cuantas más peticiones deba de procesar a la vez. Ahora, con un único usuario pidiendo un objeto, es insignificante, pero imaginemos miles de usuarios solicitando el mismo recurso al mismo tiempo: empezaríamos a tardar cada vez más en entregar el contenido al usuario, ralentizando más y más el servidor y pudiendo llegar, en el peor de los casos, incluso a tirarlo. ¿Qué podemos hacer para evitar estos problemas? Aquí es donde entra en juego la CDN. Lo que haremos será poner entre el usuario y el origen la CDN (recordamos que el origen, será nuestra infraestructura/servidores en las cuales está nuestra web), de tal manera que todo el tráfico que genere el usuario primero irá a la CDN, la CDN lo recibirá y será esta quien la mande al origen. La CDN tiene multitud de ventajas que iremos viendo, pero la principal es el aceleramiento web, y este lo consigue gracias a que va guardando (cacheando) los objetos y recursos que va sirviendo. El tiempo que estarán los objetos guardados en la CDN lo establecerá la cabecera HTTP «Cache-Control», pero no vamos a profundizar en este tema dado que no es el propósito de esta entrada. Volviendo a nuestro ejemplo anterior. Nuestro usuario1 situado en Asturias empieza a navegar y pide la portada del site. Esa petición llegará primero a la CDN, la cual no tendrá el objeto solicitado dado que nadie se lo ha pedido antes. Al no tenerlo, la CDN realiza la petición a origen, el cual le devolverá el objeto. Este objeto lo recibe la CDN y guarda una copia (cachea) para posteriormente entregárselo a usuario1. Ahora imaginamos que un instante después llega usuario2 y de nuevo pide la portada (igual que usuario1). De nuevo, la petición irá a la CDN, con la diferencia de que ahora esta sí dispone del recurso que el usuario2 está pidiendo. Por lo que será entregado directamente sin tener que ir hasta el origen. Ya podemos ir viendo el funcionamiento de una CDN y algunas de sus principales ventajas. Ahora vamos a suponer ahora un usuario3 que vive en México, y que realiza también una navegación a la portada de nuestro site. Sin CDN, esa petición deberá hacer un salto transoceánico, llegar a nuestros servidores en Madrid, y de vuelta a México. Todo esto por cada petición y navegación que se realice. Ahora vamos a imaginar miles de peticiones desde usuarios de Latinoamérica: todo el retraso que se presenta solamente por la distancia (y la correspondiente experiencia de usuario y cómo se ve afectada ante la lentitud). Aunque nuestro site esté super-mega-ultra-optimizado, el factor físico de la distancia nunca podremos evitarlo. Para darle solución, de nuevo pondremos la CDN, ya que ésta cuenta con multitud de PoP’s (puntos de presencia) repartidos a lo largo del mundo, que se usarán según la proximidad del usuario. Este servicio se llama geo-posicionamiento, y en nuestro caso es por IP. En función de nuestra IP, la CDN sabrá de donde proviene la petición y nos enviará a su nodo (servidor de la CDN) más cercano, aumentando de manera drástica la velocidad de entrega del contenido. Imagen extraída de «Speed Index: Optimization and Measurement Guideline» de Holistic SEO. Si bien es cierto que la primera petición que se realice de un objeto estará sin cachear y deberá llegar hasta nuestro origen, una vez cacheado el objeto, en las sucesivas solicitudes que se hagan de él, las entregas se harán desde el nodo de la CDN más próximo, y no desde el origen. Una posible solución para no tener lo que se llama vulgarmente la «caché fría», es forzar tú mismo peticiones a tu site desde distintos lugares para de esa manera ir “calentando” la cache; algo similar a “auto-crawlearse” (herramienta que entra y analiza todas las URLs de un site).  

Conclusión

Podemos decir que una CDN es una capa con un sistema distribuido de nodos que se sitúan entre el usuario y el origen para ofrecer las siguientes ventajas:

  • Mejora en la experiencia de usuario: al tener el contenido cacheado en la CDN, la navegación es mucho más fluida, ya que ganamos esa latencia de procesamiento y generación de contenido.
  • Velocidad de entrega de contenido: gracias al geo-posicionamiento IP, iremos siempre a nuestro PoP más cercano reduciendo drásticamente los tiempos de respuesta.
  • Disponibilidad: al tener bien configurado el site y sus cabeceras, tendremos optimizada la caché. De este modo, tendremos una capa encima de nuestros servidores que nos harán de escudo frente a una caída en nuestro origen, ya que el contenido se serviría desde la CDN y el usuario no notará ningún problema durante la navegación.
  • Seguridad: las CDN cuentan con equipos y tecnologías bastante fuertes que analizan el tráfico, patrones de petición y, ante ciertos comportamientos extraños, pueden bloquear peticiones. Otra buena práctica es cerrar el acceso a origen únicamente a las IPs de la CND, de tal manera que no podamos recibir peticiones desde ningún otro sitio que no sean los nodos de la CDN.
  • Posicionamiento: al mejorar la velocidad en la entrega de contenido, se favorece un mejor posicionamiento en SEO.

Espero que con este artículo haya quedado claro qué es una CDN y por qué deberías tener una. Es un tema muy grande y complejo, así que quédate atento a nuestro blog, pues seguiremos subiendo contenido relacionado con las CDN y mucho más. Y por supuesto, si estás interesado en qué puede aportar a tu negocio una CDN, no dudes en escribirnos a info@makingscience.com