Question

J'ai une API REST où je voudrais mettre en cache la réponse JSON de l'indice (GET / foo) et les actions de lecture (GET / foo / 1) pour augmenter de manière significative la performance. Quand il y a un POST ou PUT sur une ressource les entrées du cache de l'index et lire les résultats doivent être expiré, donc pas vieux contenu est servi.

Est-ce un scénario qui est le mieux fait avec un proxy inverse comme Squid / ou Varnish choisiriez-vous memcache (d)?

Était-ce utile?

La solution

L'utilisation d'un proxy inverse qui se trouve sur la couche HTTP est plus transparent . Cela signifie qu'il est possible de voir ce qui se passe sur le fil. La mauvaise chose est que peu d'entre eux le soutien mise en cache des réponses authentifiées , de sorte que leur efficacité peut tomber à 0 si vos ressources nécessitent une authentification. Les serveurs proxy inverses également n'expirent généralement pas automatiquement ressource A (/foo) lorsque cette ressource sans aucun rapport B (/foo/1) est modifié. C'est le comportement exact que vous auriez à ajouter à votre solution en quelque sorte.

peut être résolu deux de ces problèmes si vous utilisez Memcached, car il ne dispose pas à l'exigence de transparence.

Autres conseils

J'aller pour un proxy inverse comme vernis parce que vous pouvez mettre en œuvre (et test) votre service sans impliquer la logique du cache et ajouter la mise en cache comme une couche séparée. Vous pouvez mettre à niveau / redémarrer votre service tout en vernis sert les anciens résultats pour la demande GET (idéal pour la disponibilité), et il est facile de configurer des règles dans le vernis à Invalide (purge) en cache les résultats existants basés sur GET spécifiques / actions POST.

Si vous voulez employer la mémoire distribuée memcached est une bonne solution. https://github.com/cpatni/middleman est un proxy inverse qui utilise memcached pour la mise en cache.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top