Skip to content

Layouter

cluster.control.layouter

Los streams los reparte por los streamers el layouter, un subsistema de central. Usted añade streamers y crea streams, y él decide qué máquina captura el stream, cuál guarda una copia de su archivo, cuál lo sirve a los espectadores. La decisión se recalcula ante cada cambio, y si una máquina falla, sus streams se mudan solos a las que siguen vivas.

Una decisión del layouter se llama asignación y une un stream, un streamer y un rol — lo que esa máquina hace para el stream. Por cada asignación central arma la config de servidor del stream y la entrega al streamer, y por eso los ajustes de los streams se editan en central y no en las máquinas.

La colocación se gobierna con tres ajustes. Los namespaces dividen el clúster en partes que no se cruzan. Las etiquetas fijan requisitos y preferencias. Los límites acotan cuánto toma una sola máquina.

Cómo se reparten los streams

Qué hace el layouter

  • Asigna roles y recalcula asignaciones. La ejecución arranca cuando cambia la entrada — se unió un streamer, se creó un stream, se editaron ajustes. No hay calendario y no hay nada que lanzar a mano.
  • Tiene en cuenta las capacidades del streamer. Un stream con codificación en GPU se asigna solo a un streamer con tarjetas. Un stream con archivo necesita un streamer con discos de archivo si en su namespace no hay streamer DVR: entonces el archivo lo graba el streamer DVR, y el streamer de ingest no necesita discos.
  • Vigila la carga. Entre los streamers aptos se elige el menos cargado, por procesador, red y ocupación del archivo. Un streamer sobrecargado se alivia mudando streams fuera de él.
  • No muda streams sin causa. Mientras la entrada no cambia, las asignaciones se quedan como están. Que una máquina vecina esté poco cargada no es motivo para mudar nada.

Roles de asignación

Los roles no se eligen ni se activan por separado. Se derivan de lo que ya está configurado: el stream tiene fuente, así que hace falta ingest; al stream se le fijó un número de copias de respaldo del archivo, así que aparecen copias; el clúster tiene streamers edge, así que aparece la entrega edge; en un streamer quedó el archivo de un stream mudado, así que aparece dvr parts o dvr cleanup. Conocerlos sirve para leer la tabla de asignaciones en la pestaña Layout del stream.

ingest — el rol principal, lo tiene todo stream en funcionamiento. El streamer recibe la fuente del stream, la transcodifica y graba el archivo cuando están configurados. Un stream tiene un streamer de ingest. Aquí es donde se comprueban los requisitos del stream hacia la máquina, por eso la mayoría de los motivos de rechazo pertenecen a este rol.

dvr record — el archivo del stream no lo graba el streamer de ingest sino un streamer DVR de su namespace. Una asignación por stream; la recibe todo stream con archivo en cuanto el namespace tiene un streamer DVR. El streamer DVR recibe el directo del streamer de ingest, como una copia de respaldo.

edge — el stream se sirve a los espectadores desde un streamer edge. El rol se asigna a cada stream en cada edge apto y no hay nada que activar aparte. Ese stream no captura fuente ni graba archivo, recibe el resultado terminado del streamer de ingest.

dvr backup — el archivo se graba en varios streamers más además del de ingest o de dvr record. Cuántas copias mantener lo fija el campo Copias de respaldo DVR en la pestaña Layout. En un namespace con streamer DVR las copias se colocan solo en streamers DVR.

dvr parts — el stream se mudó a otro streamer y en el anterior quedó archivo grabado. La asignación sirve ese archivo a los vecinos, así el espectador lo ve en la línea de tiempo común, y lo borra según la retención del stream. El streamer no graba nada nuevo: no tiene entradas del stream.

dvr cleanup — en el streamer hay archivo del stream, pero no se puede o no hace falta servirlo. La asignación solo borra el archivo según la retención: el stream no tiene entradas y los vecinos no leen de este streamer. Es el rol más débil: le toca al resto al que no le corresponde ningún otro. Cuándo un resto recibe servicio y cuándo limpieza — en la sección Restos del archivo.

Tolerancia a fallos

El layouter reacciona al estado de conexión del streamer de la siguiente manera.

  • Señal perdida. Las asignaciones se congelan — no se retiran, no se crean, y la máquina no recibe streams nuevos. Un corte breve no muda streams, y en cuanto vuelve el enlace la máquina sigue llevando los mismos.
  • Offline. Los streams se mudan a máquinas vivas en cuanto se encuentran aptas.

La entrega edge es la excepción. Se mantiene con cualquier estado de conexión, porque el edge levanta el stream cuando lo pide un espectador, y no tiene sentido retirar la asignación por el silencio. Un streamer sacado del clúster pierde todas sus asignaciones.

Restos del archivo

Cuando un stream se muda a otro streamer, el archivo grabado se queda en la máquina anterior. Central lo contabiliza como resto y lo atiende con uno de dos roles hasta que venza la retención del stream.

  • dvr parts — el streamer encaja con el stream por namespace y etiquetas, no es edge ni la máquina de ingest ni la de dvr backup, y tiene URL privada de payload.
  • dvr cleanup — en todos los demás casos: no hay dirección, el namespace es otro, las etiquetas requeridas no coinciden, el stream está deshabilitado, la grabación del stream se quitó. La limpieza solo necesita el rol Streamer, almacenamiento de archivo y una máquina viva y aprobada. El límite de streams no la cuenta.

Un servicio que corresponde pero no se creó se ve como demanda sin cubrir en la pestaña Layout del stream — normalmente con el motivo sin dirección utilizable. La limpieza en lugar del servicio fuera del namespace o de las etiquetas no genera demanda: el namespace y las etiquetas funcionaron como se configuraron, y el rol se ve solo en la tabla de asignaciones. Un resto que ni siquiera la limpieza atiende es una demanda sin cubrir del rol dvr cleanup, por ejemplo con el motivo rol del nodo no compatible.

Grabación quitada y stream deshabilitado

Apagar la grabación no borra el archivo al instante. El stream se queda en los streamers donde está su archivo, y cada uno borra lo grabado con una limpieza de retención por defecto — un día. Vuelva a encender la grabación antes, y el archivo entero vuelve a estar en uso. Un stream deshabilitado recibe solo limpieza: sus restos se borran según la retención del stream.

Huérfanos

Un archivo sin stream es un huérfano. Así queda el archivo de un stream eliminado; así se ve también el archivo de un streamer que vuelve al clúster tras una ausencia larga.

El streamer encuentra ese archivo por sí mismo y lo reporta a central, y central le asigna limpieza con el motivo archivo huérfano. No hay que hacer nada: en un día el archivo está borrado y el espacio, libre. Si existe un stream con ese nombre, el archivo cuenta como suyo y se atiende según sus reglas.

Cómo influir en la colocación

Los ajustes del streamer viven en la pestaña Clúster de su página.

El stream tiene su propio namespace y sus propias etiquetas, y se fijan en la pestaña Layout de su página — el mismo sitio donde se ven sus asignaciones.

Namespaces

El namespace es una frontera estricta. Un stream se asigna solo a streamers con el mismo namespace, y no hay excepciones entre namespaces. El valor vacío también es un namespace, así que un stream sin él se asigna solo a streamers sin él.

Así se divide un clúster en partes que no se cruzan — por inquilino o por sitio, por ejemplo. El namespace del streamer se fija en la pestaña Clúster, el del stream en la pestaña Layout.

Etiquetas

La etiqueta es una marca libre que usted pone al streamer y al stream. Qué significa lo decide usted: el layouter solo compara etiquetas cuando elige máquina. Así entra en la colocación una condición que el sistema no puede conocer.

La etiqueta y el namespace saben hacer lo mismo — prohibir la colocación — y en ambos casos la frontera no se puede cruzar. La diferencia está en la escala. El namespace divide el clúster entero: hay que marcarlo todo y ningún stream se mueve entre las partes. La etiqueta ata streams concretos y admite un repliegue mediante preferred_. Si se necesita aislar todo el clúster, tome un namespace; si la condición es de streams concretos, una etiqueta.

Las etiquetas del streamer se fijan en la pestaña Clúster, las del stream en la pestaña Layout. La forma de escribirla decide qué significa. La palabra fast de abajo es solo un ejemplo, en su lugar puede ir cualquier palabra suya.

  • fast — propiedad. Así se marca una máquina o un stream sin exigir nada.
  • required_fast — requisito. Un stream que la lleva se asigna solo a un streamer que también tenga la etiqueta fast. La regla funciona en ambos sentidos — un streamer con required_fast toma solo streams con esa etiqueta.
  • preferred_fast — preferencia. En igualdad de condiciones gana el streamer con la etiqueta fast, pero su ausencia no impide la asignación.

Se compara la palabra en sí, no la forma de escribirla. El requisito required_fast lo satisface cualquiera de las tres formas del otro lado — fast, required_fast o preferred_fast. La preferencia preferred_fast se cuenta igual.

Ejemplos de colocación

Dos centros de datos con un canal estrecho entre ellos. Mientras el layouter ve el clúster entero, coloca los streams y sus copias de archivo en cualquier máquina: el tráfico de transferencia del archivo cruza el canal entre centros, y al fallar una sede sus streams pasan en masa al otro centro, donde sus fuentes no se pueden recibir de todos modos. Divida el clúster en los namespaces dc1 y dc2 — y cada stream con todos sus papeles vive dentro de su sede. Hay que marcarlo todo: cada stream y cada streamer necesitan un namespace, y un streamer sin él es inaccesible para los streams dc1 y dc2.

Una fuente multicast no llega desde cada centro. Diez nodos están repartidos entre dos centros de datos, y el multicast se enruta solo dentro del suyo. Hay que atar a la sede solo un stream, no todo el clúster — por eso no un namespace, sino una etiqueta: dc1 y dc2 a los streamers, required_dc1 al stream. Los demás streams siguen colocándose en todo el clúster.

Las máquinas GPU primero, pero no solo ellas. Un stream puede transcodificar tanto en CPU como en GPU, pero las máquinas con tarjetas son pocas. Ponga a las máquinas con tarjetas la etiqueta gpu y al stream preferred_gpu: en igualdad de condiciones cae en una máquina con GPU, y cuando estas se llenan rebosa a las demás. La transcodificación en GPU se describe en la página Transcodificador.

El stream está mejor en su centro, pero el traslado es admisible. preferred_dc1 mantiene el stream en el primer centro mientras la sede tenga capacidad y lo rebose al segundo cuando se llene. Un namespace no puede expresar semejante repliegue.

Una máquina y un stream con varias etiquetas. Una máquina y un stream pueden llevar muchas etiquetas: un streamer del primer centro con GPU lleva dc1 y gpu, y un stream con required_dc1 y preferred_gpu se queda dentro del primer centro, primero en las máquinas con GPU.

Límites y carga

La carga del streamer se mide por la máquina entera — todo su procesador y todo su tráfico, incluida la entrega a espectadores, las transferencias entre streamers y los procesos ajenos. Los roles de asignación no afectan a la medición.

Tres campos en la pestaña Clúster fijan los topes.

  • Límite de streams — cuántos streams puede llevar la máquina. Cero la deja en el clúster, pero vacía.
  • Límite de red, kbit/s — el tope de tráfico de la máquina. Por encima el layouter no añade streams, y al superarse alivia la máquina.
  • Límite de DVR, % — la ocupación de los discos de archivo con la que el streamer cuenta como lleno.

Los topes restringen las asignaciones de ingest, de dvr record y de copias de respaldo del archivo. La entrega edge, dvr parts y dvr cleanup no quedan restringidos por ellos — esos roles se asignan sin importar la carga de la máquina.