2013-04-24 8 views
11

Wir verfügen über eine iOS-App, die über die REST-API mit einem Django-Server kommuniziert. Die meisten Daten bestehen aus ziemlich großen Item-Objekten, die einige verwandte Modelle enthalten, die in ein einzelnes flaches Wörterbuch rendern, und diese Daten ändern sich selten.Verwenden von Redis als Zwischenspeicher für die REST-API

Wir haben festgestellt, dass das Abfragen von Postgres kein Problem ist, aber das Generieren von JSON-Antworten nimmt eine merkliche Zeit in Anspruch. Auf der anderen Seite variieren Artikel-Sammlungen pro Benutzer.

Ich dachte über ein Rendering-System nach, wo wir einfach ein Dictionary für Item-Objekt erstellen und es in redis als JSON-String speichern, so können wir API direkt von redis bereitstellen (zB HMGET (ID von Elementen in Benutzerbibliothek), Das ist schnell und macht es relativ einfach, "gerenderte Instanzen" zu regenerieren, im Grunde nur ein paar post_save Signale.

Ich frage mich, wie gut dieses Design ist, gibt es irgendwelche größeren Mängel darin? Vielleicht gibt es einen besseren Weg für Die Aufgabe?

+0

Wie groß sind die JSON-Antworten und wie lange dauert es, bis JSON dump ist? –

+0

sagen etwa 300 dicts mit 20 Schlüsseln in ihnen mit einigen verschachtelten dicts, tastypie und django-rest-framework rendern diese für bis zu 1s auf MBPr –

+0

hast du schon versucht cjson oder ultra json zu benutzen? –

Antwort

16

Sicher, wir machen das gleiche bei unserer Firma, mit Redis zu speichern nicht JSON aber große XML-Strings, die aus Backend-Datenbanken für RESTful Anfragen generiert werden, und es spart viel von Netzwerk-Hops und Overhead.

Ein paar Dinge im Auge zu behalten, wenn dies das erste Mal ist, dass Sie verwenden Redis ...

Dedicated Server Redis
Redis ist single-threaded und sollte auf einem dedizierten Server bereitgestellt werden ausreichende CPU-Leistung. Machen Sie nicht den Fehler, es auf Ihrer App oder Ihrem Datenbankserver bereitzustellen.

Hochverfügbarkeit
Redis für hohe Verfügbarkeit mit Master/Slave-Replikation einrichten. Ich weiß, dass es mit Redis cluster viele Fortschritte gegeben hat, also sollten Sie das auch für HA überprüfen.

Cache-Hit/Miss
Bei der Überprüfung Redis für einen Cache- „Treffer“, wenn die Verbindung tot ist oder eine Ausnahme auftritt, nicht die Anforderung fehlschlagen, nur auf die Datenbank standardmäßig; Caching sollte immer "bestmöglich" sein, da die Datenbank immer als letztes Mittel verwendet werden kann.

+0

Danke für die Tipps! Welche Art von Belastung haben Sie auf Ihren Redis-Servern? Wir fangen gerade an und bis jetzt sieht es so aus, als ob eine EC2-Instanz genug ist. –

+0

Redis wird der letzte Ort sein, an dem es zu Engpässen kommen wird. Unser Redis-Server läuft auf RedHat Linux Enterprise mit 1 Dual-Core-CPU/4 GB RAM; basierend auf unseren Tests schreibt 25K in unter Sekunde und zweimal das für Lesevorgänge basierend auf unseren Nutzlasten (25-100Kb) und Redis kommt nicht einmal ins Schwitzen; es tritt total Arsch. – raffian

Verwandte Themen