C贸mo ayudamos a CDN MegaFon.TV a no llegar a la Copa Mundial 2018

En 2016, hablamos sobre c贸mo MegaFon.TV hizo frente a todos los que quer铆an ver la nueva temporada de Game of Thrones. El desarrollo del servicio no se detuvo all铆, y a mediados de 2017 tuvimos que lidiar con cargas varias veces m谩s. En esta publicaci贸n, diremos c贸mo un crecimiento tan r谩pido nos inspir贸 a cambiar radicalmente el enfoque para organizar CDN y c贸mo este nuevo enfoque fue probado por la Copa del Mundo.



Brevemente sobre MegaFon.TV


MegaFon.TV es un servicio OTT para ver diversos contenidos de video: pel铆culas, programas de televisi贸n, canales de televisi贸n y programas grabados. A trav茅s de MegaFon.TV, se puede obtener acceso al contenido en pr谩cticamente cualquier dispositivo: en tel茅fonos y tabletas con iOS y Android, en televisores inteligentes LG, Samsung, Philips, Panasonic de diferentes a帽os de lanzamiento, con todo un zool贸gico de SO (Apple TV, Android TV), en navegadores de escritorio en Windows, MacOS, Linux, en navegadores m贸viles en iOS y Android, e incluso en dispositivos tan ex贸ticos como STB y proyectores de Android para ni帽os. Pr谩cticamente no hay restricciones en los dispositivos: solo es importante la disponibilidad de Internet con un ancho de banda de 700 Kbps. Sobre c贸mo organizamos el soporte para tantos dispositivos, habr谩 un art铆culo separado en el futuro.
La mayor铆a de los usuarios del servicio son suscriptores de MegaFon, lo que se explica por las ofertas rentables (y casi siempre incluso gratuitas) incluidas en el plan de tarifas del suscriptor. Aunque tambi茅n notamos un aumento significativo en los usuarios de otros operadores. De acuerdo con esta distribuci贸n, el 80% del tr谩fico de MegaFon.TV se consume dentro de la red MegaFon.

Arquitect贸nicamente, desde el lanzamiento del servicio, el contenido se ha distribuido a trav茅s de CDN. Tenemos una publicaci贸n separada dedicada al trabajo de este CDN. En 茅l, hablamos sobre c贸mo nos permiti贸 manejar el tr谩fico pico que entr贸 al servicio a fines de 2016, durante el lanzamiento de la nueva temporada de Game of Thrones. En esta publicaci贸n, hablaremos sobre el mayor desarrollo de MegaFon.TV y sobre nuevas aventuras que han ca铆do en el servicio junto con la Copa Mundial 2018.

Servicio de crecimiento. Y problemas


En comparaci贸n con los eventos de la 煤ltima publicaci贸n, a finales de 2017 el n煤mero de usuarios de Megafon.TV ha aumentado varias veces, las pel铆culas y series tambi茅n se han vuelto un orden de magnitud m谩s grande. Se lanz贸 una nueva funcionalidad, aparecieron nuevos paquetes, disponibles "por suscripci贸n". Los picos de tr谩fico desde el "Juego de Tronos" que vemos ahora todos los d铆as, la proporci贸n de pel铆culas y programas de televisi贸n en la corriente total ha aumentado constantemente.

Junto con esto, los problemas comenzaron con la redistribuci贸n del tr谩fico. Nuestro monitoreo, configurado para descargar fragmentos para diferentes tipos de tr谩fico en diferentes formatos, comenz贸 a producir cada vez m谩s errores al descargar fragmentos de video por tiempo de espera. En el servicio MegaFon.TV, la longitud del fragmento es de 8 segundos. Si el fragmento no tiene tiempo para cargar en 8 segundos, pueden producirse errores.

Se esperaba que el pico de errores ocurriera en las horas m谩s ocupadas. 驴C贸mo deber铆a afectar esto a los usuarios? Como m铆nimo, pudieron observar un deterioro en la calidad del video. No siempre se nota a simple vista, debido a un n煤mero suficientemente grande de perfiles de velocidad de bits m煤ltiple. En el peor de los casos, el video se congela.

La b煤squeda del problema comenz贸. Casi de inmediato, qued贸 claro que se produce un error de retroceso en los servidores EDGE de CDN. Aqu铆 tenemos que hacer una peque帽a digresi贸n y decir c贸mo funcionan los servidores con tr谩fico en vivo y VOD. El esquema es un poco diferente. Un usuario que acude al servidor EDGE en busca de contenido (una lista de reproducci贸n o fragmento), si hay contenido en el cach茅, lo obtiene desde all铆. De lo contrario, el servidor EDGE busca contenido en Origin y carga el canal principal. Junto con una lista de reproducci贸n o un fragmento, se proporciona el encabezado Cache-Control: max-age , que le indica al servidor EDGE cu谩nto almacenar en cach茅 esta o aquella unidad de contenido. La diferencia entre LIVE y VOD radica en el tiempo que lleva almacenar en cach茅 los fragmentos. Para fragmentos en vivo, se establece un tiempo de almacenamiento en cach茅 corto, generalmente de 30 segundos a varios minutos, esto se debe al poco tiempo de relevancia del contenido en vivo. Este cach茅 se almacena en la RAM, ya que debe proporcionar constantemente fragmentos y reescribir el cach茅. Para los fragmentos de VOD, se establece m谩s tiempo, desde varias horas hasta semanas e incluso meses, dependiendo del tama帽o de la biblioteca de contenido y la distribuci贸n de sus vistas entre los usuarios. En cuanto a las listas de reproducci贸n, generalmente se almacenan en cach茅 en no m谩s de dos segundos, o no se almacenan en cach茅 en absoluto. Vale la pena aclarar que solo estamos hablando del llamado modo PULL de CDN, en el que funcionaban nuestros servidores. Usar el modo PUSH en nuestro caso no estar铆a completamente justificado.

Pero volvamos a encontrar el problema. Como ya hemos notado, todos los servidores trabajaron simult谩neamente en la devoluci贸n de ambos tipos de contenido. Al mismo tiempo, los propios servidores ten铆an una configuraci贸n diferente. Como resultado, algunas m谩quinas se sobrecargaron con IOPS. Los fragmentos no tuvieron tiempo de escribir / leer debido al peque帽o rendimiento, cantidad, volumen de discos, gran biblioteca de contenido. Por otro lado, las m谩quinas m谩s potentes que recibieron m谩s tr谩fico comenzaron a fallar en el uso de la CPU. Los recursos de la CPU se gastaron en atender el tr谩fico SSL y los fragmentos entregados a trav茅s de https, mientras que los IOPS en los discos apenas alcanzaron el 35%.

Lo que se necesitaba era un esquema que, a un costo m铆nimo, hiciera posible utilizar las capacidades disponibles de manera 贸ptima. Adem谩s, seis meses m谩s tarde comenzar铆a la Copa del Mundo y, seg煤n c谩lculos preliminares, los picos en el tr谩fico en vivo deber铆an haber aumentado seis veces ...

Nuevo enfoque para CDN


Despu茅s de analizar el problema, decidimos separar el VOD y el tr谩fico en vivo de acuerdo con diferentes PAD compuestos por servidores con diferentes configuraciones. Y tambi茅n cree una funci贸n de distribuci贸n de tr谩fico y su equilibrio entre diferentes grupos de servidores. Hab铆a tres de esos grupos en total:

  • Servidores con una gran cantidad de discos de alto rendimiento que son los m谩s adecuados para almacenar en cach茅 el contenido de VOD. De hecho, los discos SSD RI de la capacidad m谩xima ser铆an los m谩s adecuados, pero no hab铆a ninguno, y se necesitar铆a demasiado presupuesto para comprar la cantidad correcta. Al final, se decidi贸 usar lo mejor que estaba disponible. Cada servidor conten铆a ocho discos SAS de 1TB y 10k en RAID5. De estos servidores se compil贸 VOD_PAD.
  • Servidores con una gran cantidad de RAM para almacenar en cach茅 todos los formatos posibles para la entrega de fragmentos en vivo, con procesadores capaces de manejar tr谩fico SSL e interfaces de red "gruesas". Utilizamos la siguiente configuraci贸n: 2 procesadores de 8 n煤cleos / 192 GB de RAM / 4 interfaces de 10 GB. De estos servidores se compil贸 EDGE_PAD.
  • El grupo de servidores restante no puede manejar el tr谩fico VOD, pero es adecuado para peque帽os vol煤menes de contenido en vivo. Se pueden usar como reserva. De los servidores RESERVE_PAD fue compilado.

La distribuci贸n fue la siguiente:

Un m贸dulo l贸gico especial se encargaba de elegir el PAD del que se supon铆a que el usuario recibir铆a el contenido. Aqu铆 est谩n sus tareas:
  • Analice la URL, aplique el esquema anterior para cada solicitud de transmisi贸n y emita el PAD requerido
  • Descargue las interfaces EDGE_PAD cada 5 minutos ( y este fue nuestro error ), y cuando se alcanza el l铆mite, cambie el exceso de tr谩fico a RESERVE_PAD. Para aliviar la carga, se escribi贸 un peque帽o script perl que devolvi贸 los siguientes datos:
    - marca de tiempo : fecha y hora de actualizaci贸n de los datos de carga (en formato RFC 3339);
    - total_bandwidth - carga actual de la interfaz (total), Kbps;
    - rx_bandwidth - carga actual de la interfaz (tr谩fico entrante), Kbps;
    - tx_badwidth : carga actual de la interfaz (tr谩fico saliente), Kbps.
  • Dirija el tr谩fico en modo manual a cualquier PAD u servidor de Origin en caso de situaciones imprevistas, o si es necesario, trabaje en uno de los PAD. La configuraci贸n estaba en el servidor en formato yaml y permit铆a llevar todo el tr谩fico al PAD deseado, o el tr谩fico de acuerdo con uno de los par谩metros:
    - Tipo de contenido
    - cifrado de tr谩fico
    - Tr谩fico pagado
    - tipo de dispositivo
    - Tipo de lista de reproducci贸n
    - Regi贸n

Los servidores de origen han sido SSD con poco personal. Desafortunadamente, al cambiar el tr谩fico a Origin, HIT_RATE en fragmentos VOD dej贸 mucho que desear (alrededor del 30%), pero realizaron su tarea, por lo que no observamos ning煤n problema con los empaquetadores en CNN.

Como hab铆a pocos servidores para la configuraci贸n EDGE_PAD, se decidi贸 asignarlos en las regiones con la mayor proporci贸n de tr谩fico: Mosc煤 y la regi贸n del Volga. Con la ayuda de GeoDNS, el tr谩fico se envi贸 a la regi贸n del Volga desde las regiones de los distritos federales de Volga y Ural. El centro de Mosc煤 sirvi贸 al resto. Realmente no nos gust贸 la idea de entregar tr谩fico a Siberia y el Lejano Oriente desde Mosc煤, pero en total estas regiones representan aproximadamente 1/20 de todo el tr谩fico, y los canales de MegaFon resultaron ser lo suficientemente amplios para tales vol煤menes.
Despu茅s del desarrollo del plan, se realiz贸 el siguiente trabajo:

  • En dos semanas, desarroll贸 la funcionalidad de cambiar CDN
  • Se tard贸 un mes en instalar y configurar los servidores EDGE_PAD, as铆 como expandir los canales para ellos.
  • Tom贸 dos semanas dividir el grupo de servidores actual en dos partes, m谩s otras dos semanas para aplicar la configuraci贸n a todos los servidores en la red y el equipo del servidor
  • Y, finalmente, la semana se dedic贸 a las pruebas (desafortunadamente, no bajo carga, lo que luego afect贸)

Result贸 paralelizar parte del trabajo, y al final todo tom贸 seis semanas.

Primeros resultados y planes futuros


Despu茅s de la optimizaci贸n, el rendimiento general del sistema fue de 250 Gb / s. La soluci贸n con la transferencia del tr谩fico VOD a servidores separados mostr贸 inmediatamente su eficacia despu茅s de su lanzamiento a producci贸n. Desde el comienzo de la Copa del Mundo, no ha habido problemas con el tr谩fico de VOD. Varias veces, por varias razones, tuve que cambiar el tr谩fico de VOD a Origin, pero en principio, tambi茅n se las arreglaron. Quiz谩s este esquema no sea muy efectivo debido al uso muy peque帽o de la memoria cach茅, ya que obligamos a los SSD a sobrescribir constantemente el contenido. Pero el circuito funciona.

En cuanto al tr谩fico en vivo, los vol煤menes correspondientes para probar nuestra decisi贸n aparecieron con el inicio de la Copa del Mundo. Los problemas comenzaron cuando la segunda vez que enfrentamos el cambio de tr谩fico cuando llegamos al l铆mite durante el partido Rusia-Egipto. Cuando el cambio de tr谩fico funcion贸, todo se verti贸 en el PAD de respaldo. En estos cinco minutos, el n煤mero de solicitudes (curva de crecimiento) fue tan grande que la CDN de respaldo se obstruy贸 por completo y comenz贸 a generar errores. Al mismo tiempo, el PAD principal se lanz贸 durante este tiempo y comenz贸 a permanecer inactivo un poco:



De esto se extrajeron 3 conclusiones:

  1. Cinco minutos todav铆a es demasiado. Se decidi贸 reducir el per铆odo de descarga a 30 segundos. Como resultado, el tr谩fico en el PAD en espera dej贸 de crecer espasm贸dicamente:

  2. Como m铆nimo, es necesario transferir usuarios entre PAD cada vez que se activa el interruptor. Esto deber铆a proporcionar suavidad adicional de conmutaci贸n. Decidimos asignar una cookie a cada usuario (o m谩s bien al dispositivo), seg煤n el cual el m贸dulo responsable de la distribuci贸n comprende si el usuario debe dejarse en el PAD actual o si se debe realizar el cambio. Aqu铆 la tecnolog铆a puede quedar a discreci贸n de quien la implemente. Como resultado, no soltamos el tr谩fico en el PAD principal.
  3. El umbral para la conmutaci贸n se estableci贸 demasiado bajo, como resultado, el tr谩fico en el PAD de respaldo creci贸 como una avalancha. En nuestro caso, fue un reaseguro: no est谩bamos completamente seguros de haber hecho el ajuste correcto del servidor (la idea, por cierto, fue tomada de Habr). El umbral se ha incrementado para el rendimiento f铆sico de las interfaces de red.

Las mejoras tomaron tres d铆as, y ya en el partido Rusia-Croacia, verificamos si nuestra optimizaci贸n funcion贸. En general, el resultado nos agrad贸. En su apogeo, el sistema proces贸 215 Gbit / s de tr谩fico mixto. Este no era un l铆mite te贸rico en el rendimiento del sistema: todav铆a ten铆amos un margen sustancial. Si es necesario, ahora podemos conectar cualquier CDN externo, si es necesario, y "tirar" el exceso de tr谩fico all铆. Tal modelo es bueno cuando no desea pagar dinero s贸lido cada mes por usar el CDN de otra persona.

Nuestros planes incluyen un mayor desarrollo de CDN. Para empezar, me gustar铆a extender el esquema EDGE_PAD a todos los distritos federales; esto conducir谩 a un menor uso de canales. Tambi茅n se est谩n realizando pruebas de circuito de redundancia VOD_PAD, y algunos de los resultados ahora parecen bastante impresionantes.

En general, todo lo hecho durante el a帽o pasado me lleva a pensar que la CDN del servicio que distribuye contenido de video es imprescindible. Y ni siquiera porque le permite ahorrar mucho dinero, sino porque el CDN se convierte en parte del servicio en s铆, afecta directamente la calidad y la funcionalidad. En tales circunstancias, entregarlo en las manos equivocadas es al menos irrazonable.

Source: https://habr.com/ru/post/es425229/


All Articles