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.

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

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 etiquetafast. A regra funciona nos dois sentidos — um streamer comrequired_fasttoma só streams com essa etiqueta.preferred_fast— preferência. Em igualdade de condições vence o streamer com a etiquetafast, 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.