Sono in fase di pianificazione di un'applicazione web che fa un uso pesante dei dati recuperati dall'API REST di terze parti. Questi dati sono memorizzati nella cache sul server e richiesti dai client tramite AJAX. L'API REST ha un limite di velocità e prevedo di utilizzare lo schema del token bucket per aderire ad esso. Tuttavia, ho difficoltà a trovare un modo sicuro per la memorizzazione del valore del bucket. Per questo motivo, sto considerando due tecnologie per le mie esigenze lato server. Io programma solo come hobby quindi ... tieni con me.
PHP
Qui, ho preso in considerazione l'ipotesi di inserire la variabile bucket nella cache APCu, ma non sono del tutto sicuro di quale thread-safe sia. Immagino uno scenario: c'è un gettone lasciato nel secchio. Il client A preleva i dati dalla cache, quindi il client B subito dopo. A nota ne rimane uno e sottrae un token, quindi B fa lo stesso, il bucket è a -1 ed entrambi pensano di essere chiari per richiedere. Se un mucchio di discussioni lo fa, io rompo il limite. È uno scenario realistico? C'è un modo migliore per implementare questo limite API a livello di sito (non per utente)? Preferirei non ricorrere a una sceneggiatura esterna.
node.js
Node sembra perfetto, data l'architettura del sito, ma è un enorme cambiamento nel modo di pensare. Ha solo un thread di esecuzione, e ci sono anche vars globali che i documenti dicono siano locali al modulo. Presumo che 'locale al modulo' significhi che è disponibile solo per quel modulo, ma 'globale' indica ogni volta che un modulo si presenta nella coda degli eventi, la variabile globale sarà lì. È questo il caso? In tal caso, quando il bucket è vuoto e il modulo deve attendere per effettuare la richiesta, ciò bloccherà tutto il resto del nodo, vero? E se ci sono più istanze node.js in esecuzione, il globale non è condiviso tra loro, vero? Ho visto diversi pacchetti npm per la limitazione della velocità, ma sembrano tutti per utente.
Ho altre domande sul nodo, ma questo post è già abbastanza lungo.
Qualche consiglio?