Rilascio canarino quando sono coinvolte le code


1

Fowler afferma che una piccola percentuale di traffico viene instradata alla versione delle Canarie mentre la vecchia versione è ancora in esecuzione.

Ciò presuppone che il routing possa essere controllato a livello di bilanciamento del carico / router.

Abbiamo un caso d'uso in cui un micro-servizio consuma una coda e fa un po 'di elaborazione. Ci chiedevamo come controllare il routing per indirizzare un sottoinsieme di traffico verso il consumatore canarino.

Una delle opzioni che abbiamo considerato è quella di avere una "coda delle Canarie" separata, ma il problema è che i produttori ora devono essere consapevoli di questa coda che sembra un odore.

Questo sembra un problema comune in cui sono coinvolte le code. Qualche idea su come è stato adottato Canary per tali applicazioni?


Risposte:


0

La domanda più importante che devi affrontare è come hai a che fare con un lavoratore che muore mentre elabora un oggetto dalla coda.

Mentre un lavoratore elabora un articolo di solito non vuoi che sia ancora in coda per l'elaborazione da parte di altri lavoratori. D'altra parte, se l'elemento viene rimosso dalla coda e solo il lavoratore è a conoscenza dell'elemento in elaborazione, le informazioni andranno perse in caso di arresto anomalo del lavoratore.

È anche difficile sapere se un lavoratore si è schiantato. Spesso un timeout può essere usato come una buona approssimazione se un lavoratore si è schiantato. Ma quanti lavoratori hai intenzione di consentire di provare a elaborare quell'elemento. Se hai un bug dipendente dai dati c'è il rischio che riprovare su un altro lavoratore causi la morte del lavoratore successivo. Se non lo prendi in considerazione, tutti i tuoi dipendenti potrebbero andare in crash. D'altra parte, se un lavoratore si è arrestato in modo anomalo a causa di un errore hardware, probabilmente non vorrai perdere l'oggetto che stava elaborando in quel momento.

Se hai già affrontato tutto quanto sopra, hai affrontato la maggior parte dei rischi associati al canarino. A quel punto potresti decidere di lasciare semplicemente che il canarino si comporti come qualsiasi altro lavoratore.

Esiste tuttavia anche il potenziale rischio che la nuova versione produca dati danneggiati. Se l'elaborazione è altrimenti deterministica, è possibile consentire alla versione precedente e al canary di elaborare entrambi lo stesso input e confrontare gli output. Come implementarlo dipende dalla progettazione generale del sistema, in alcuni sistemi la soluzione potrebbe essere quella di far inserire una piccola percentuale di elementi già elaborati in una coda canaria in cui i canarini possono ripetere la stessa elaborazione e confrontare i risultati.


Come possiamo assicurarci che un lavoratore delle Canarie ottenga il carico utile delle Canarie? Stai suggerendo che ci dovrebbe essere una coda "canaria"? Se lo sei, ora il produttore (che è un diverso micro-servizio) deve sapere di questa coda canaria che non si sente bene.
user1168577
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.