Skip to content

Alocação de streams

Os streams são distribuídos pelos streamers pelo layouter, um subsistema do central. Você adiciona streamers e cria streams, e ele decide qual máquina captura o stream, qual guarda uma cópia do arquivo dele, qual o serve aos espectadores. A decisão é recalculada a cada mudança, e quando uma máquina falha os streams dela se mudam sozinhos para as que continuam vivas.

Uma decisão do layouter se chama atribuição e liga um stream, um streamer e um papel — o que aquela máquina faz para o stream. Para cada atribuição o central monta a config de servidor do stream e a entrega ao streamer, e é por isso que as configurações dos streams são editadas no central e não nas máquinas.

A alocação é governada por três configurações. Os namespaces dividem o cluster em partes que não se cruzam. As etiquetas definem requisitos e preferências. Os limites limitam quanto uma única máquina assume.

Como os streams são distribuídos

O que o layouter faz

  • Atribui papéis e recalcula atribuições. A execução começa quando a entrada muda — um streamer entrou, um stream foi criado, configurações foram editadas. Não há agenda e não há nada para disparar à mão.
  • Considera as capacidades do streamer. Um stream com codificação em GPU é atribuído só a um streamer com placas. Um stream com arquivo precisa de um streamer com discos de arquivo.
  • Vigia a carga. Entre os streamers aptos é escolhido o menos carregado, por processador, rede e ocupação do arquivo. Um streamer sobrecarregado é aliviado com a mudança de streams para fora dele.
  • Não muda streams sem causa. Enquanto a entrada não muda, as atribuições ficam como estão. Uma máquina vizinha pouco carregada não é motivo para mudar nada.

Papéis de atribuição

Os papéis não são escolhidos nem ligados separadamente. Eles decorrem do que já está configurado: o stream tem fonte, então é preciso ingest; o stream tem um número de cópias de backup do arquivo definido, então aparecem cópias; o cluster tem streamers edge, então aparece a entrega edge. Conhecê-los serve para ler a tabela de atribuições na aba Layout do stream.

ingest — o papel principal, todo stream em funcionamento o tem. O streamer recebe a fonte do stream, transcodifica e grava o arquivo quando estão configurados. Um stream tem um streamer de ingest. É aqui que os requisitos do stream em relação à máquina são verificados, por isso a maioria dos motivos de recusa pertence a este papel.

edge — o stream é servido aos espectadores a partir de um streamer edge. O papel é atribuído a cada stream em cada edge apto e não há nada para ligar à parte. Esse stream não captura fonte nem grava arquivo, ele recebe o resultado pronto do streamer de ingest.

dvr backup — o arquivo é gravado não só no streamer de ingest, mas em vários outros. Quantas cópias manter é definido pelo campo Cópias de backup DVR na aba Layout.

dvr parts — aparece quando um stream se mudou para outro streamer e no anterior ficou arquivo gravado. A atribuição permite servir esse arquivo mais antigo a partir da máquina anterior, assim o espectador o vê na linha do tempo comum e as mudanças não perdem arquivo.

Tolerância a falhas

Os estados do streamer estão descritos no registro, e o layouter reage a eles assim.

  • Sinal perdido. As atribuições congelam — nada é retirado, nada é criado, e a máquina não recebe streams novos. Uma falha curta não muda streams, e assim que o enlace volta a máquina segue levando os mesmos.
  • Offline. Os streams se mudam para máquinas vivas assim que máquinas aptas são encontradas.

A entrega edge é a exceção. Ela se mantém com qualquer estado de conexão, porque o edge levanta o stream quando um espectador pede, e não faz sentido retirar a atribuição por causa do silêncio. Um streamer retirado do cluster perde todas as suas atribuições.

Como influenciar a alocação

As configurações do streamer ficam na aba Cluster da página dele.

A aba Cluster do streamer: papel, namespace, limites e etiquetas

O stream tem namespace e etiquetas próprios, definidos na aba Layout da página dele — o mesmo lugar onde suas atribuições aparecem.

A aba Layout do stream: namespace, etiquetas e número de cópias de backup do arquivo

Namespaces

O namespace é uma fronteira rígida. Um stream é atribuído só a streamers com o mesmo namespace, e não há exceções entre namespaces. O valor vazio também é um namespace, então um stream sem ele é atribuído só a streamers sem ele.

Assim um cluster se divide em partes que não se cruzam — por inquilino ou por site, por exemplo. O namespace do streamer é definido na aba Cluster, o do stream na aba Layout.

Etiquetas

A etiqueta é uma marca livre que você põe no streamer e no stream. O que ela significa quem decide é você: o layouter apenas compara etiquetas quando escolhe a máquina. É assim que entra na alocação uma condição que o sistema não tem como conhecer. Com uma etiqueta dá para proibir a alocação como com um namespace, mas ela age com mais flexibilidade e dentro de um mesmo namespace, e a condição é definida para cada stream separadamente.

As etiquetas do streamer são definidas na aba Cluster, as do stream na aba Layout. A forma de escrever decide o que a etiqueta significa. A palavra fast abaixo é só um exemplo, no lugar dela pode ir qualquer palavra sua.

  • fast — propriedade. É assim que se marca uma máquina ou um stream sem exigir nada.
  • required_fast — requisito. Um stream que a leva é atribuído só a um streamer que também tenha a etiqueta fast. A regra funciona nos dois sentidos — um streamer com required_fast toma só streams com essa etiqueta.
  • preferred_fast — preferência. Em igualdade de condições vence o streamer com a etiqueta fast, mas a ausência dela não impede a atribuição.

O que se compara é a palavra em si, não a forma de escrever. O requisito required_fast é satisfeito por qualquer uma das três formas do outro lado — fast, required_fast ou preferred_fast. A preferência preferred_fast é contada do mesmo jeito.

Limites e carga

A carga do streamer é medida pela máquina inteira — todo o processador dela e todo o tráfego, incluindo a entrega aos espectadores, as transferências entre streamers e processos alheios. Os papéis de atribuição não afetam a medição.

Três campos na aba Cluster definem os tetos.

  • Limite de streams — quantos streams a máquina pode levar. Zero a deixa no cluster, mas vazia.
  • Limite de rede, kbit/s — o teto de tráfego da máquina. Acima dele o layouter não adiciona streams, e ao ser excedido alivia a máquina.
  • Limite de DVR, % — a ocupação dos discos de arquivo com a qual o streamer conta como cheio.

Os tetos restringem as atribuições de ingest e de cópias de backup do arquivo. A entrega edge e dvr parts não são restringidas por eles — esses papéis são atribuídos independentemente da carga da máquina.

O que vem depois

O que o layouter decidiu e por que um stream foi parar onde foi é mostrado por Estado da alocação.