CloudFront Edge Caching: nuestro módulo contribuido en la Comunidad
Con la llegada de Drupal 8 y la implantación de portales que requieren la visita de un gran número de usuarios, en La Drupalera nos hemos visto obligados a buscar soluciones de terceros para garantizar un acceso rápido y un rendimiento óptimo en las diferentes plataformas web. Además, como es sabido en la Comunidad Drupal, aunque Drupal 8 ofrece un rendimimento mejorado con respecto a su versión anterior, todavía sigue sufriendo un alto consumo a nivel de base de datos, lo que nos obliga a buscar de forma recurrente soluciones transversales que nos aporten garantías al respecto.
Amazon CloudFront, nuestro mejor aliado
Uno de estos servicios que hemos implantado recientemente en alguno de nuestros portales es Amazon CloudFront. Para quien no lo conozca, Amazon CloudFront ofrece una forma sencilla y rentable de mejorar el desempeño, la fiabilidad y el alcance global de todo el sitio web, tanto para contenido estático como para partes dinámicas del sitio que cambian en función del usuario final.
Este servicio funciona de manera óptima con aplicaciones web dinámicas que se ejecutan o bien en Amazon EC2 o con un proveedor de servicios externo a Amazon, sin códigos personalizados ni configuraciones de propietario, lo que facilita la implementación y administración del servicio.
Es posible utilizar una distribución exclusiva de Amazon CloudFront para entregar todo el contenido del sitio web, incluido el contenido estático y dinámico (o interactivo). Esto significa que se puede seguir utilizando un solo nombre de dominio (como www.ejemplo.com) para todo el sitio web sin necesidad de separar el contenido dinámico y el estático o administrar varios nombres de dominio en el sitio web.
Amazon CloudFront permite además incluir parámetros de cadenas de consulta o cookies que nos ayudan a personalizar nuestros portales en función del usuario. También se pueden configurar varios comportamientos de la caché para la distribución web en función de los patrones de URL del sitio web. Estos comportamientos de la caché proporcionan un control granular sobre cómo queremos que Amazon CloudFront almacene en caché diversas partes del sitio web, y es este último comportamiento el que nos ocupa en este artículo.
Sin embargo, la implementación de este servicio también supone la replicación del contenido web en diferentes servidores repartidos a lo largo de todo el planeta. Algo que implica necesariamente una gestión externa a través de los servicios de Amazon, con el objetivo de configurar y refrescar las caches en función de diversos parámetros, como puede ser una URL específica de un portal.
El problema que nos ha surgido en este punto es la escasez de módulos contribuidos en Drupal 8 que gestionaran de manera eficaz el refresco de cachés en los servicios de Amazon Cloudfront. Especialmente, cuando los usuarios editan contenidos localmente en la plataforma, lo que implicaba que dicho contenido se mantuviera cacheado durante el tiempo previamente configurado en este servicio hasta que éste se limpiara por sí solo.
Debido a este inconveniente, en La Drupalera hemos tenido la ocasión de desarrollar y contribuir a la Comunidad de Drupal el módulo CloudFront Edge Caching.
Cómo funciona CloudFront Edge Caching
Cloudfront Edge Caching dispone de una interfaz de configuración, mediante la cual es posible configurar los parámetros de acceso a los servicios externos de Amazon Cloudfront, haciendo uso de la API ofrecida por Amazon AWS SDK PHP. De esta forma, Drupal 8 consigue gestionar de forma automática el refresco de cachés en este servicio cuando los gestores de contenido de una plataforma interactúan con la misma, sin necesidad de preocuparse de una doble gestión para mantener limpias las cachés:
Como podemos ver en la imagen, el módulo nos permite refrescar las cachés tanto de los contenidos como de los usuarios de forma automática cuando éstos son refrescados, conectándose automáticamente con la plataforma de Amazon y refrescando las URLs específicas de cada uno de los nodos o usuarios que se han modificado. Además, dispone de los mecanismos necesarios que verifican que las credenciales introducidas son correctas. Así mismo, también nos permite realizar una purga de una URL específica en caso de que queramos refrescarla por razones diversas:
De la misma forma, el módulo realiza las conexiones necesarias para garantizar que el proceso se realice correctamente, capturando las excepciones pertinentes si las hubiera.
A modo de curiosidad, la web de La Drupalera utiliza este módulo para gestionar dinámicamente el refresco de cachés de las diferentes URLs servidas. Actualmente, nos encontramos evolucionando esta primera versión, desarrollando nuevas secciones de administración. Algo que nos permitirá llevar un control más exhaustivo de todas las peticiones lanzadas a través de la plataforma, de forma que podamos ver en todo momento si nuestras peticiones han concluido con éxito o siguen en proceso de refresco.