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; no streamer ficou o arquivo de um stream mudado, então aparece dvr parts ou dvr cleanup. 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 — o stream se mudou para outro streamer e no anterior ficou arquivo gravado. A atribuição serve esse arquivo aos vizinhos, assim o espectador o vê na linha do tempo comum, e o apaga pela profundidade de retenção do stream. O streamer não grava nada novo: ele não tem as entradas do stream.
dvr cleanup — no streamer há arquivo do stream, mas servi-lo não é possível ou não faz sentido. A atribuição só apaga o arquivo pela profundidade de retenção: o stream não tem entradas, e os vizinhos não leem deste streamer. É o papel mais fraco: cabe ao resto ao qual nenhum outro papel se aplica. Quando um resto recebe dvr parts e quando dvr cleanup está na seção Restos do 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.
Restos do arquivo¶
Quando um stream se muda para outro streamer, o arquivo gravado fica na máquina anterior. O central registra esse arquivo como resto e o atende com um de dois papéis até a profundidade de retenção do stream expirar.
- dvr parts — o streamer serve ao stream por namespace e etiquetas, não é edge nem a máquina de ingest ou de cópia de backup, e tem um endereço interno do cluster definido.
- dvr cleanup — em todos os outros casos: sem endereço, namespace diferente, etiquetas exigidas que não coincidem, stream desabilitado, gravação retirada do stream. A limpeza só precisa do papel Streamer, de armazenamento de arquivo e de uma máquina viva e aprovada. O limite de streams não a conta.

Um dvr parts devido mas não criado aparece como demanda não atendida na aba Layout do stream — em geral com o motivo sem endereço utilizável. Um dvr cleanup no lugar de dvr parts fora do namespace ou das etiquetas não gera demanda: o namespace e as etiquetas agiram como configurados, e o papel só aparece na tabela de atribuições. Um resto que nem a limpeza atende é uma demanda não atendida do papel dvr cleanup, por exemplo com o motivo papel do nó incompatível.

Gravação retirada e stream desabilitado¶
Desligar a gravação não apaga o arquivo na hora. O stream permanece nos streamers onde está o seu arquivo, e cada um apaga o gravado com um dvr cleanup de profundidade padrão — um dia. Ligue a gravação antes disso e o arquivo volta a valer por inteiro. Um stream desabilitado só recebe dvr cleanup: seus restos são apagados pela profundidade de retenção do stream.
Órfãos¶
Um arquivo sem stream é um órfão. É o que resta do arquivo de um stream excluído; o mesmo vale para o arquivo em um streamer que voltou ao cluster depois de uma longa ausência.
O próprio streamer encontra esse arquivo e o reporta ao central, que atribui um dvr cleanup com o motivo arquivo órfão. Não é preciso fazer nada: em um dia o arquivo está apagado e o espaço, livre. Se existe um stream com esse nome, o arquivo conta como dele e é atendido pelas regras dele.
Um órfão não tem página de stream. Sua atribuição aparece na página do streamer, no slice de streams: a linha com a marca sem documento, o papel dvr cleanup, o motivo arquivo órfão. Quanto desse arquivo há nos discos é mostrado pelo DVR do cluster.
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, dvr parts e dvr cleanup não são restringidos 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.