Lançamento de canário quando as filas estão envolvidas

1

Fowler diz que uma pequena porcentagem de tráfego é roteada para a versão Canary enquanto a versão antiga ainda está em execução.

Isso supõe que o roteamento pode ser controlado no nível do balanceador de carga / roteador.

Temos um caso de uso em que um micro-serviço consome uma fila e faz algum processamento. Estávamos imaginando como o roteamento pode ser controlado para direcionar um subconjunto de tráfego para o consumidor canário.

Uma das opções que consideramos é ter uma "fila canária" separada, mas o problema é que agora os produtores precisam estar cientes dessa fila que parece um cheiro.

Isso parece um problema comum em que as filas estão envolvidas. Alguma idéia sobre como Canary foi adotado para tais aplicações?

    
por user1168577 22.12.2017 / 18:45

1 resposta

0

A questão mais importante a ser abordada é como você lida com um funcionário que morre ao processar um item da fila.

Enquanto um trabalhador está processando um item, normalmente você não quer que ele ainda esteja na fila para processamento de outros funcionários. Por outro lado, se o item for removido da fila e apenas o trabalhador souber do item que está sendo processado, essa informação será perdida se o trabalhador travar.

Também é complicado saber se um trabalhador falhou. Muitas vezes, um tempo limite pode ser usado como uma aproximação suficientemente boa para saber se um trabalhador caiu. Mas quantos trabalhadores você permitirá tentar processar esse item? Se você tiver um bug dependente de dados, há um risco de que tentar novamente em um worker diferente apenas faça com que o próximo worker morra. Se você não levar isso em conta, todos os seus funcionários podem falhar. Por outro lado, se um trabalhador caiu devido a uma falha de hardware, você provavelmente não quer perder o item que estava processando no momento.

Se você já resolveu todos os itens acima, então você resolveu a maioria dos riscos associados ao canário. Nesse ponto, você pode decidir simplesmente deixar o canário se comportar como qualquer outro trabalhador.

Existe, no entanto, o risco potencial da nova versão fornecer dados corrompidos. Se o processamento for determinístico, você pode permitir que a versão antiga e o canário processem a mesma entrada e comparem as saídas. Como implementar isso depende do design geral do sistema, em alguns sistemas a solução pode ser fazer com que os funcionários insiram uma pequena porcentagem de itens já processados em uma fila de canários, onde seus canários podem fazer o mesmo processamento novamente e você pode comparar os resultados.

    
por 22.12.2017 / 19:02

Tags