Moviendo todas nuestras fotos a Amazon S3

Este esquema muestra como hemos hecho para pasar todas las fotos de nuestros blogs a Amazon S3.

Este esquema muestra como hemos hecho para pasar todas las fotos de nuestros blogs a Amazon S3.

Siento una enorme admiración por el proyecto AWS (Amazon Web Services)… ¿quién podía pensar que Amazon, el mayor retailer online, de repente se iba a convertir en proveedor tecnológico y buque insignia del cloud computing?

Aunque utilizo S3 desde el año pasado, cuando empezamos a volcar ahí nuestras copias de seguridad, hasta la fecha nunca nos habíamos planteado usarlo como hosting de imágenes… pero ha llegado un momento en el que las imágenes de más de cinco años de publicación en todos nuestros blogs nos han desbordado y no tiene sentido que la mayoría de los recursos del servidor se desaprovechen sirviendo archivos en lugar de sirviendo webs de manera más eficaz (al fin y al cabo como su propio nombre indica un webserver es un servidor de webs).

Para mover todas las imágenes ha habido que reprogramar varios componentes de nuestro CMS para conseguir que las imágenes se carguen en Amazon S3 en lugar de en topmadrid.com, dolcecity.com…

Me centraré en cómo ha quedado ahora el proceso:

1 – La imagen es cargada por el escritor en el CMS con CKFinder, cada escritor tiene una carpetas con sus imágenes que ellos gestionan, todo ello en enzo.es que es donde está instalado nuestro CMS.

2 – Cuando se publica el post, se realiza una copia de cada imagen en otra carpeta que hemos llamado “cache” y desde ahí se sube a Amazon S3 (utilizando el API REST de Amazon S3 y todo programado en el arcaico vbscritp… que tiene mérito)

3 – Una vez todas las imágenes están subidas se inicia el asintente para crear las thumbs para este proceso necesitamos tener la foto en el servidor donde está instalado el componente con el que las hacemos ASPjpeg, por eso el CMS revisa la carpeta de caché para ver si sigue ahí la foto y sólo en el caso de no encontrarla se la descarga de vuelta desde S3 (esto es necesario porque la carpeta caché se vacía cada noche y a veces quieres rehacer una thumb de un post que colgaste hace tiempo por lo que la foto original ya no está en la carpeta cache y hay que traerla de S3).

4 – Las thumbs se guardan en enzo.es durante el tiempo suficiente para poderlas pasar también a Amazon S3, después se borrán.

A diferencia de antes ya ninguna foto pasa a los blogs de destino, todo está o temporalmente en enzo.es o en su emplazamiento defitivo en Amazon S3 quedando todos los archivos de cada blog organizados en buckets independientes:

Aprovechando que teníamos que hacer este cambio hemos solucionado un problema que habíamos heredado de blogger:

Las imágenes de los posts en lugar de colocarlas todas en la carpeta /uploaded_images/ ahora van clasificadas por años y mes, igual que los posts.

Por su parte las thumbs, para no tenerlas todas juntas como antes en la carpeta /img_thumbs/ se van distribuyendo de manera automática en carpetas de 100 en 100, con lo que evitamos los problemas de la situación anterior: tener carpetas con más de 30.000 imágenes y creciendo que sólo para conseguir listar sus archivos ya era todo un reto.

Sólo nos falta un último empujón para que las galerías entren en el nuevo circuito de S3 y con eso la “migración” estará completa. Los beneficios del cambio son claros, como se puede leer en este post de Amit Agarwal mover todas tus imágenes a Amazon S3 descarga enormemente de trabajo a tu servidor:

En servidores donde corremos aplicaciones hemos comprobado que algunos procesos se ejecutan ahora muchísimo más rápido, tenemos por ejemplo un cron que llama a una página a las 20:00 y que solía terminar cerca de las 22:20… ahora el mismo proceso termina a las 21:45 lo que supone más de media hora de diferencia.