Sto cercando di implementare alcune limitazioni sulla nostra API REST. Un typical approach si trova dopo una determinata soglia per bloccare la richiesta (con la risposta 403
o 429
). Tuttavia, ho visto one api che aggiunge un ritardo alla risposta.limitazione delle chiamate http api con ritardo
Mentre effettui le chiamate all'API, guarderemo le tue chiamate medie al secondo (c/s) nel corso dei precedenti cinque minuti. Ecco cosa succederà:
oltre 3c/s e aggiungiamo un ritardo di 2 secondi
oltre 5c/s ed aggiungiamo a 4 secondi di ritardo
oltre 7c/s e noi aggiungere un ritardo di 5 secondi
Dal punto di vista del cliente, vedo questo essere meglio di tornare un errore. Il peggio che può succedere è che rallenterai.
Mi chiedo come sia possibile ottenere questo risultato senza influire negativamente sul server dell'applicazione. Ad esempio, per aggiungere tali ritardi, il server deve mantenere aperta la richiesta, causando un numero sempre maggiore di processori di richieste in arrivo.
Qual è il modo migliore per farlo? (cioè è qualcosa che può essere fatto sul server web/bilanciamento del carico in modo che il server dell'applicazione non sia influenzato negativamente? C'è un tipo di livello di limitazione che può essere aggiunto per questo scopo?)
We ' usando Django/Tastypie, ma la domanda è più a livello di architettura/concettuale.
Grazie! Sembra esattamente la cosa che stavo cercando (non sono sicuro di quale, ma probabilmente lo farebbe). – gingerlime
Questo 'nginx-delay-module' è in grado di ricevere istruzioni da Django in qualche modo? Ad esempio, se l'abuso viene identificato tramite viste Django, posso chiedere a quel plugin di ritardare la risposta da parte di nginx? Idealmente mi piacerebbe scrivere una classe Throttle personalizzata per DRF usando questo. – dtgq