Hola Habr!
En 2017, durante el Black Friday, la carga aumentó casi una vez y media, y nuestros servidores estaban al límite de posibilidades. A lo largo del año, el número de clientes ha crecido significativamente, y quedó claro que sin una preparación preliminar exhaustiva, la plataforma podría simplemente no soportar las cargas de 2018.
El objetivo se estableció de la manera más ambiciosa posible: queríamos estar completamente preparados para cualquier actividad, incluso la más poderosa, y comenzamos a retirar nuevas capacidades de antemano durante el año.
Nuestro CTO Andrei Chizh (
chizh_andrey ) cuenta cómo nos preparamos para el Black Friday 2018, qué medidas tomamos para evitar caídas y, por supuesto, los resultados de una preparación tan cuidadosa.

Hoy quiero hablar sobre los preparativos para el Black Friday 2018. ¿Por qué ahora, cuando la mayoría de las principales ventas están detrás? Comenzamos a prepararnos aproximadamente un año antes de los eventos a gran escala, y por ensayo y error encontramos la solución óptima. Le recomendamos que se encargue de las estaciones cálidas con anticipación y evite los fakaps que puedan surgir en el momento más inoportuno.
El material será útil para todos los que quieran exprimir el máximo beneficio de tales acciones, como El aspecto técnico del problema no es inferior al de marketing.
Características del tráfico en grandes ventas.
Contrariamente a la creencia popular, el Black Friday no es un día al año, sino casi una semana entera: las primeras ofertas de descuento llegan entre 7 y 8 días antes de la venta. El tráfico del sitio web comienza a crecer sin problemas durante toda la semana, alcanza su punto máximo el viernes y cae bastante el sábado a los indicadores regulares de la tienda.

Es importante tener esto en cuenta: las tiendas en línea se vuelven especialmente sensibles a cualquier "desaceleración" en el sistema. Además, nuestro boletín por correo electrónico también experimentó un aumento significativo en el número de envíos.
Es estratégicamente importante para nosotros pasar el Black Friday sin caídas, ya que La funcionalidad más importante de los sitios y las listas de correo de las tiendas depende de la operación de la plataforma, a saber:
- Seguimiento y emisión de recomendaciones de productos,
- La emisión de materiales relacionados (por ejemplo, bloques de recomendaciones de diseño de imágenes, como flechas, logotipos, iconos y otros elementos visuales),
- Emisión de imágenes de productos del tamaño correcto (para este propósito tenemos "ImageResizer", un subsistema que descarga una imagen del servidor de la tienda, la comprime al tamaño deseado y, a través de servidores de almacenamiento en caché, proporciona imágenes del tamaño correcto para cada producto en cada bloque de recomendación).
De hecho, durante el Black Friday 2019, la carga del servicio aumentó en un 40%, es decir. La cantidad de eventos que el sistema Retail Rocket monitorea y procesa en los sitios de las tiendas en línea ha aumentado de 5 a 8 mil solicitudes por segundo. Debido al hecho de que nos estábamos preparando para cargas más serias, experimentamos tal aumento fácilmente.

Preparación general
El Black Friday es un momento caluroso para todos los minoristas y para el comercio electrónico en particular. El número de usuarios y su actividad en este momento está creciendo a veces, por lo que, como siempre, estamos completamente preparados para este tiempo ocupado. Agregamos aquí el hecho de que muchas tiendas en línea están conectadas con nosotros, no solo en Rusia sino también en Europa, donde la exageración es mucho mayor, y tenemos un nivel de pasiones peor que la serie brasileña. ¿Qué se debe hacer para estar completamente preparado para cargas mayores?
Trabajar con servidores
Para empezar, era necesario descubrir qué es exactamente lo que nos falta para aumentar la capacidad de los servidores. Ya en agosto, comenzamos a pedir nuevos servidores específicamente para Black Friday: se agregaron un total de 10 máquinas adicionales. Para noviembre, ya estaban completamente en batalla.
Al mismo tiempo, parte de las máquinas de compilación se reinstaló para su uso como servidores de aplicaciones. Los preparamos de inmediato para usar diferentes funciones: tanto para emitir recomendaciones como para el servicio ImageResizer, de modo que, según el tipo de carga, cada uno de ellos podría usarse para uno de estos roles. En el modo normal, los servidores de Application y ImageResizer tienen funciones claramente definidas: los primeros están involucrados en la emisión de recomendaciones, los segundos entregan imágenes para cartas y bloques de recomendación en el sitio web de las tiendas en línea. En preparación para el Black Friday, se decidió hacer todos los servidores de doble propósito para equilibrar el tráfico entre ellos dependiendo del tipo de carga.
Luego agregamos dos servidores grandes para Kafka (Apache Kafka) y obtuvimos un grupo de 5 máquinas potentes. Desafortunadamente, todo no salió tan bien como quisiéramos: en el proceso de sincronización de datos, dos máquinas nuevas ocuparon todo el ancho del canal de red, y tuvimos que encontrar urgentemente cómo llevar a cabo el proceso de agregar de manera rápida y segura para toda la infraestructura. Para resolver este problema, nuestros administradores tuvieron que sacrificar valientemente el fin de semana.
Trabajar con datos
Además de los servidores, decidimos optimizar los archivos para facilitar la carga, y un gran paso para nosotros fue la traducción de archivos estáticos. Todos los archivos estáticos que anteriormente estaban alojados en los servidores se llevaron a S3 + Cloudfront. Habían querido hacer esto durante mucho tiempo, ya que la carga en el servidor estaba cerca de los valores límite, y ahora apareció una excelente razón.
Una semana antes del Black Friday, aumentamos el tiempo de almacenamiento en caché de las imágenes a 3 días, de modo que en caso de una caída en ImageResizer, las imágenes almacenadas previamente en caché se obtuvieron de cdn. También redujo la carga en nuestros servidores, porque cuanto más tiempo se almacena la imagen, menos a menudo necesitamos gastar recursos en cambiar el tamaño.
Y por último, pero no menos importante: 5 días antes del Viernes Negro, se anunció una moratoria sobre el despliegue de cualquier nueva funcionalidad, así como sobre cualquier trabajo con la infraestructura; toda la atención se dirigió a hacer frente al aumento de las cargas.
Planes de respuesta a emergencias
No importa cuán buena sea la preparación, las fakapy siempre son posibles. Y hemos desarrollado 3 planes de respuesta para posibles situaciones críticas:
- reducción de carga
- deshabilitar algunos servicios,
- cierre completo del servicio.
Plan A: reducción de carga. Debería haber estado involucrado si, debido a un aumento en la carga, nuestros servidores van más allá de los tiempos de respuesta aceptables. En este caso, preparamos mecanismos para reducir gradualmente la carga cambiando parte del tráfico a los servidores de Amazon, lo que simplemente daría "200 OK" a todas las solicitudes y daría una respuesta vacía. Entendimos que esto es una degradación de la calidad del servicio, pero la elección entre el hecho de que el servicio no funciona en absoluto o no muestra recomendaciones para aproximadamente el 10% del tráfico es obvia.
Plan B: Servicios de desactivación. Implica una degradación parcial del servicio. Por ejemplo, reducir la velocidad de cálculo de recomendaciones personales en aras de descargar algunas bases de datos y canales de comunicación. En el modo normal, las recomendaciones se calculan en tiempo real, creando una versión de la tienda en línea para cada visitante, pero en condiciones de cargas crecientes, una disminución en la velocidad permite que otros servicios centrales continúen funcionando.
Plan C: para el Armagedón. Si ocurre una falla completa del sistema, hemos preparado un plan que nos desconectará de manera segura de los clientes. Los compradores simplemente dejarán de ver recomendaciones; el rendimiento de una tienda en línea no se verá afectado. Para hacer esto, tendríamos que restablecer nuestro archivo de integración para que los nuevos usuarios dejaran de interactuar con el servicio. Es decir, deshabilitaríamos el trabajo de nuestro código de seguimiento principal, el servicio dejaría de recopilar datos y calcularía recomendaciones, y el usuario simplemente vería una página sin bloques de recomendación. Para todos aquellos que han recibido previamente el archivo de integración, hemos proporcionado la opción de cambiar los registros DNS a Amazon y un código auxiliar de 200 OK.
Resumen
Sobrellevamos toda la carga, incluso sin la necesidad de utilizar máquinas de construcción adicionales. Y gracias a la preparación previa, no necesitábamos ninguno de los planes de respuesta desarrollados. Pero todo el trabajo realizado es una experiencia invaluable que nos ayudará a hacer frente a los flujos de tráfico más inesperados y enormes.
Al igual que en 2017, la carga del servicio aumentó en un 40%, y el número de usuarios en las tiendas en línea para Black Friday aumentó en un 60%. Todas las dificultades y errores ocurrieron durante el período preparatorio, lo que nos salvó a nosotros y a nuestros clientes de situaciones imprevistas.
¿Cómo te sientes acerca del Black Friday? ¿Cómo prepararse para cargas críticas?