Ich habe eine REST-API, in der ich die JSON-Antwort des Indexes (GET / foo) und die Leseaktionen (GET / foo / 1) zwischenspeichern möchte, um die Performance deutlich zu steigern. Wenn für eine Ressource ein POST oder ein PUT vorhanden ist, müssen die Cache-Einträge für den Index und die Leseergebnisse abgelaufen sein, sodass kein alter Inhalt bereitgestellt wird.
Ist das ein Szenario, das am besten mit einem Reverse-Proxy wie Squid / Varnish gemacht wird oder würden Sie Memcache (d) wählen?
Wenn Sie einen Reverseproxy verwenden, der auf der HTTP-Schicht sitzt, ist transparent . Das bedeutet, dass man sehen kann, was über den Draht passiert. Das Schlimme ist, dass nur wenige von ihnen die /foo
), wenn diese vollständig nicht verwandte Ressource B ( /foo/1
) modifiziert wird. Das ist das richtige Verhalten, das Sie Ihrer Lösung irgendwie hinzufügen müssten.
Beide Probleme können gelöst werden, wenn Sie memcached verwenden, da die Transparenzanforderung nicht erfüllt ist.
Ich würde für einen Reverse-Proxy wie Lack gehen, weil Sie Ihren Service implementieren (und testen) können, ohne Cachelogik einzubeziehen, und Caching als separate Schicht hinzufügen. Sie können Ihren Dienst upgraden / neustarten, während Lack alte Ergebnisse für die GET-Anfrage bereitstellt (großartig für die Verfügbarkeit), und es ist einfach, Regeln in Lack einzurichten, um vorhandene Cache-Ergebnisse basierend auf bestimmten GET / POST-Aktionen zu entfernen (zu löschen).
Wenn Sie verteilte Speicher memcached verwenden möchten, ist eine gute Lösung. Ссылка ist ein Reverse-Proxy, der memcached zum Caching verwendet.
Tags und Links rest memcached reverse-proxy varnish squid