2016-06-05 3 views
0

Ich versuche, einen Cache zu einer Tornado-Anwendung mit Daten in Mongo hinzuzufügen. Ich verwende Redis als einen gemeinsamen Cache-Speicher.Führt synchroner Redis-Aufruf zu einer langsameren Tornado-App?

Da Tornado ein asynchrones Framework ist, habe ich darüber nachgedacht, einen Async-Client für Redis zu verwenden, der Tornados ioloop verwendet, um Daten vom Redis-Server zu holen. Keine der vorhandenen Lösungen ist sehr ausgereift, und ich habe gehört, dass der Durchsatz dieser Kunden nicht gut ist.

Also meine Frage ist, wenn ich einen synchronen Redis-Client wie Pyredis verwende, wird es die Leistung meiner App negativ beeinflussen?

Ich meine, in Anbetracht der Redis-Instanz im selben LAN lebt, ist die Latenz für einen Redis-Befehl sehr klein, ist es wichtig, ob es blockiert oder nicht?

Antwort

1

Es ist schwer zu sagen, ohne Benchmark die beiden Ansätze nebeneinander in Ihrer Umgebung, aber Redis auf einem schnellen Netzwerk kann schnell genug sein, dass ein synchroner Treiber unter normalen Bedingungen gewinnt (oder vielleicht nicht. Ich bin nicht persönlich mit der Leistung der verschiedenen Redis Treiber vertraut).

Der größte Vorteil eines asynchronen Treibers besteht darin, dass er Ausfälle des Redis-Servers oder des Netzwerks besser bewältigen kann. Während redis Probleme hat, wird es in der Lage sein, andere Dinge zu tun, die nicht von redis abhängig sind. Wenn Ihre gesamte Site von Redis abhängig ist, kann es natürlich in diesem Fall nicht viel mehr geben. Das war die Philosophie von FriendFeed. Als wir Tornado ursprünglich geschrieben haben, verwendeten wir synchrone memcache- und mysql-Treiber, da diese Dienste unter unserer Kontrolle standen und wir uns darauf verlassen konnten, dass sie schnell waren, aber wir verwendeten asynchrone HTTP-Clients für externe APIs, weil sie weniger vorhersehbar waren.

Verwandte Themen