El blog de LiveCommerce

Un blog de comercio electrónico y tiendas online

Cómo gestionamos millones de imágenes sin que el servidor reviente (y tú también puedes hacerlo)

Esto que te voy a contar es algo que muchos eCommerce no tienen en cuenta hasta que se les empieza a saturar el servidor.

Empecemos.

Cuando tienes una tienda pequeña con 100 productos, la carga de imágenes no es un problema. Pero cuando pasas a 10.000, 50.000 o incluso 200.000 productos, cada uno con varias imágenes, el servidor puede saturarse: por espacio en disco, por inodos o por cómo maneja las peticiones. Se vuelve lento, se bloquea o directamente deja de funcionar. Y ahí es donde empiezan los verdaderos problemas.

En ShopinCloud esto ya lo tenemos resuelto. No fue fácil. Pero ahora te voy a explicar paso a paso cómo lo hacemos, para que lo entiendas bien y, si tienes un eCommerce con catálogo grande, veas por qué esto es tan importante.


Paso a paso: cómo lo hacemos en ShopinCloud

Antes de nada, importante: ShopinCloud es un software SaaS que gestiona decenas de tiendas online. El sistema que explico aquí lo diseñamos para poder manejar una cantidad enorme de imágenes de productos sin que reviente nada.

1. El cliente sube una imagen

Cuando un cliente sube una imagen desde su panel de gestión en ShopinCloud, esa imagen se guarda tal cual, sin redimensionar, en una carpeta que se llama uploads, propia de su tienda.

Esa carpeta está dentro del servidor principal, el que sirve tanto el backend (el panel del cliente) como el frontend (la web que ven los usuarios).

Pero aquí viene lo importante: en ese servidor solo se guarda la imagen original. Las versiones redimensionadas no se guardan ahí. Esto es clave. Si dejáramos todas las versiones (miniaturas, medianas, grandes…) en el mismo servidor, se llenaría de archivos duplicados y acabaría petando. Y eso se traduce en lentitud, errores y una tienda que no carga.

2. Se pide mostrar esa imagen en la tienda

Cuando la tienda necesita mostrar una imagen en cualquier parte (listado, ficha de producto, miniatura del carrito…), ShopinCloud detecta el tamaño que necesita y consulta a Redis para ver si esa versión ya existe.

Redis lo usamos como caché rápida. Si ya tenemos la imagen generada en ese tamaño, Redis devuelve la URL directamente y se muestra. Así no repetimos trabajo ni sobrecargamos nada.

3. Si no existe, se redimensiona y se sube al servidor de imágenes

Si Redis no tiene la URL, entonces ShopinCloud lanza una petición a la API del servidor de imágenes. En esa petición le pasa:

  • La URL original de la imagen, para que el servidor la descargue
  • El tamaño específico que se necesita

Ese servidor tiene 4 o 5 TB de espacio, está optimizado solo para esto. Descarga la imagen, la redimensiona, la guarda, y responde con la nueva URL.

ShopinCloud guarda esa URL en Redis para que la próxima vez no se repita el proceso.

4. CloudFlare como capa extra

Y aquí va otro punto clave: esa imagen redimensionada no se sirve directamente desde nuestro servidor de imágenes. Lo que hacemos es poner CloudFlare por delante, funcionando como caché global.

Montamos un dominio en CloudFlare que apunta al servidor de imágenes. Entonces, cuando alguien accede a la imagen:

  • Si CloudFlare ya la tiene cacheada, la sirve desde sus servidores (mucho más rápido)
  • Si no la tiene, la pide a nuestro servidor, la entrega y la deja cacheada para la próxima

No hay que hacer nada manual. No subimos las imágenes a CloudFlare. Simplemente está ahí, en medio, haciendo su trabajo: acelerar y descargar carga.


Ventajas reales de este sistema

  • El servidor principal no se sobrecarga: solo guarda la imagen original.
  • Las versiones redimensionadas están fuera, en un servidor hecho para eso.
  • Redis nos permite trabajar ágil, sin repetir tareas ni cargar el sistema.
  • CloudFlare mejora velocidad y rendimiento, sin tocar nada más.

Resultado: velocidad, estabilidad y escalabilidad

Este sistema ya está funcionando en tiendas con más de 100.000 productos y millones de imágenes. Las webs cargan rápido, van fluidas y no hay que andar preocupándose de si algo se rompe.

Mucha gente con tiendas en PrestaShop, WooCommerce o Magento no se da cuenta de que el problema viene por cómo gestionan las imágenes. Sus sistemas duplican archivos, saturan el disco y al final, la tienda se vuelve una tortuga.

Nosotras ya lo tenemos resuelto. Y si quieres saber cómo montarlo o probarlo en tu tienda, escríbeme y te lo enseño sin problema.


¿Quieres que te enseñe cómo lo tenemos montado en ShopinCloud? Escríbeme y te lo muestro paso a paso.

Compártelo:

¿Tienes alguna consulta?

Si tienes alguna pregunta o sabes la respuesta sobre algún comentario, no dudes en contribuir.
Responderemos rápidamente.
Puedes utilizar etiquetas BBCode para escribir negrita, enlaces, imágenes, etc...
Más información en la página oficial de BBCOde http://www.bbcode.org/ Ejemplo:
[url=http://google.com]links[/url], [color=red]colores[/color] [b]negrita[/b]...

¿Has visto los videos en nuestro canal de Youtube?

En nuestro canal de Youtube publicamos periódicamente mejoras y funcionalidades del software de ecommerce.