Quindi il mio caso esatto è che ho ~ 1400 domini su un server di bind antico, auto-ospitato e sto cercando di migrarli a un servizio ospitato. Il problema è che l'API del servizio ospitato ha un limite di velocità di 150 richieste per 300 secondi e ogni dominio richiederà almeno 3 richieste di migrazione. [Nota: questa API non fornisce informazioni sulle quote, semplicemente smette di funzionare con un messaggio di errore generico. :I
]
Se dovessi semplicemente codificare a caldo un intervallo di 2 secondi tra le richieste, avrei finito con 6+ secondi di chiamate API, oltre a 2 secondi aggiuntivi per recuperare / riformattare i record dal server precedente. Questo mi fa salire a circa 3,1 ore per la migrazione, che è una domanda pesante.
Un'altra alternativa che ho considerato è stata l'aggiunta di una variabile $last_call
che potrei utilizzare per calcolare un sonno da aggiungere fino a 2 secondi dall'ultima chiamata, ma che non tiene conto del tempo trascorso al di fuori del client API / chiamate.
Infine ho provato a mantenere un elenco di timestamp millisecondi che rappresentano ciascuna chiamata, contando quanti si sono verificati negli ultimi 300 secondi e dividendo la finestra equamente tra loro. Tuttavia, ho scoperto che questo tende a provocare un sonno più lungo del necessario all'inizio della prima finestra, un sonno freneticamente piccolo alla fine e una frequenza di chiamata leggermente inferiore al limite configurato. Questo si ripete in un ciclo e non sembra ponderare molto anche nel corso di un paio d'ore.
Esiste un metodo o un algoritmo particolare che sarebbe adatto per coordinare più equamente queste richieste entro il limite di velocità specificato?