2013-07-19 28 views
5

Ho una API SOAP che desidero limitare l'accesso a una base Utente dopo che "x" molte chiamate sono state ricevute in "y" quantità di tempo.API Best practice per Throttling

Dopo aver cercato in giro, la considerazione # 1 (ovviamente) è considerare i parametri per quando limitare gli utenti. Tuttavia, non vedo molto in termini di best practice/esempi per che implementano la soluzione. Ho visto lo Leaky Bucket Method che ha senso. Devo credere che ci siano più idee là fuori però.

Qualsiasi altro utente su come è implementare la soluzione di limitazione? Le domande includono:

  • Qualche framework fornisce funzionalità (ad es. Spring, ecc.) Per la regolazione in web apis?
  • A me sembra necessario memorizzare le informazioni di accesso per utente. Come ridurre al minimo l'overhead del database per fare questo OGNI chiamata?
  • Hai bisogno di accedere a un archivio dati per implementarlo?
+0

Solo una nota che il secchio che perde è più mirato al traffico (non numerabile, che scorre il contenuto), dove per la formulazione di richiesta/frequenza delle chiamate si utilizzerà [Algoritmo token bucket] (https://en.wikipedia.org/wiki/Token_bucket). C'è solo una leggera differenza: il meccanismo è lo stesso, ma invece di versare acqua nel secchio, aggiungi token numerabili, che si adattano meglio alle richieste. – botchniaque

risposta

3

Per quale motivo, ho risposto a questa domanda dopo aver lavorato ad altri progetti di produzione.

  1. birra fatta in casa: Utilizzando Spring AOP al pointcut intorno al metodo chiama prima di eseguire codice metodo API è un modo birra fatta in casa se si dispone di un proprio algoritmo da implementare. Questo risulta essere piuttosto elegante e flessibile, in quanto è possibile acquisire molti metadati prima di decidere cosa fare con la richiesta.
  2. Servizio di gestione API: Se si sta parlando di un sistema di produzione e si dispone del budget, probabilmente il modo migliore è delegare questo a un livello di gestione API come Apigee o Mashery.

Advantage è che separa le preoccupazioni così è più facile cambiare e permette di concentrarsi solo sul vostro API. Ciò è particolarmente utile se sono coinvolti gli stakeholder aziendali e hai bisogno di una buona interfaccia utente e di un dizionario di termini.

Svantaggio, naturalmente è il costo e il vendor lock in.

Spero che questo aiuti qualcuno!