Come posso avere un valore di timeout variabile in base alle prestazioni della macchina?

4

Ho un problema simile a Criteri per la selezione del valore di timeout? . Ma la mia domanda è leggermente diversa.

Il processo A dipende dal processo B e ha un valore di timeout di 5 secondi, a volte il processo B potrebbe impiegare più tempo per rispondere (ad esempio macchine lente), in questo caso il processo A penserà che il processo B sia finito e terminerà.

Abbiamo un requisito di rendimento, quindi l'obiettivo è di rispondere sempre nel minor tempo possibile. Questa applicazione funziona su tablet, notebook, desktop e persino server. In uno scenario le prestazioni della macchina host possono variare notevolmente, in che modo è possibile regolare il timeout tenendo conto delle prestazioni della macchina?

    
posta Tulio F. 18.09.2015 - 19:40
fonte

2 risposte

4

Vedo due diverse opzioni, usa quella che ha più senso per i dettagli del tuo caso d'uso:

Opzione 1: ritorno immediato dalla richiamata con timeout più lungo

Non importa se il timeout è più lungo su un sistema più veloce, se può immediatamente tornare e interrompere il periodo di attesa una volta completato il processo. Quindi, mentre il timeout è "10 secondi", su un sistema veloce potrebbe essere effettivamente "1 secondo" o anche più veloce.

Opzione 2: non rinunciare al primo tentativo

Puoi aspettare i 5 secondi, se non c'è risposta, riprova. Forse ci vogliono tre tentativi prima di arrendersi e terminare. È possibile modificare l'interfaccia utente per dire qualcosa come "connettersi al processo B tentativo # 1, connettersi al processo B tentativo # 2", ecc. In modo che non sia troppo lungo all'utente, in modo che sembri qualcosa che sta succedendo.

    
risposta data 18.09.2015 - 20:28
fonte
0

Sembra che tu abbia più problemi di ridimensionamento delle prestazioni piuttosto che un classico scenario di "smetti di aspettare se impiega troppo tempo"

Ad es., la mia app mi avvisa quando viene segnato un goal in una partita di calcio. Ogni X secondi esegue il polling di un server per verificare se è stato segnato un goal.

Se il server è inattivo o lento, posso passare a un server di backup, quindi non voglio aspettare per sempre. Ma il backup è più lento del server principale. quindi non voglio passare inutile. Voglio anche sapere l'obiettivo il prima possibile dopo che è successo.

Se eseguo il polling ogni secondo, il server verrà sovraccaricato e inizierà a rispondere lentamente, ritardando le notizie. ma se scrivo solo ogni minuto il server può essere in grado di rispondere molto più rapidamente.

Qui un semplice timeout statico di X secondi non è di aiuto. se è troppo corto, cambierò troppo spesso il backup. Se è troppo lungo, aspetterò troppo a lungo prima di passare. La mia app richiede un valore di aspettativa di spostamento dinamico per quanto tempo si aspetta che il server prenda.

Per ottenere questo ho bisogno di registrare per quanto tempo ogni richiesta richiede e modificare il comportamento delle app in base. cioè passa al backup, fai più o meno richieste o nel tuo caso interrompi il processo A

    
risposta data 18.09.2015 - 21:53
fonte

Leggi altre domande sui tag