:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

Skalierbarkeit von Memcache

Linux allgemein

Skalierbarkeit von Memcache

Bei der Entwicklung bzw. den Lasttests eines neuen Features, viel uns auf, dass regelmäßig Memcacheverbindungen abbrachen oder gar nicht erst aufgebaut werden konnten. Nachdem lange nach dem Grund geforscht wurde, viel uns auf, dass selbst eine einfache Memcache-Statistik-Abfrage mehrere Sekunden dauerte oder sogar abbrach (nur während Spitzenlastzeiten).
Erst top verriet uns, wo das Bottleneck aufzufinden war.
Auf einem Memcacheserver läuft eine Memcached Instanz mit 16 Threads auf 8 Kernen (2CPUs á 4 Kerne), die Last verteilte sich recht gut, doch beim genaueren Betrachten viel auf, dass ausschließlich die erste CPU, dauerhaft 0-1% idle hatte und nicht die User- oder Systemlast der Grund hierfür war, sondern durch Memcached ausgelöste Software-Interrupts (%si in top), welche sich teilweise mit über 60% auf der ersten CPU bemerkbar machen. Es wurde ein weiterer Server dazugeschaltet, wodurch die Idlezeit der CPU auf 20-30% stieg und alles wieder schnell lief.

Das Bottleneck bei Memcache ist also nicht die größe des Arbeitsspeichers oder die eigentliche Gesamt-CPU-Leistung, sondern nur die Leistung des ersten CPU Kerns (CPU0 in top).

Ausschlaggebend ist hier auch nicht die größe des Caches oder die Anzahl der persistenten Verbindungen, sondern die Frequentierung. Der Haupt-Memcache-Cluster umfasst 16-32GB pro Server und kommt super mit seinen Aufgaben klar, nur der abgekapselte Teil für das neue Feature, der auf einem eigenen Memcacheserver arbeitet, welcher nur eine größe von 6GB umfasst. Hier werden pro Sekunde 3 Keys von rund 15000 Clients abgefragt. Die 40000 persistenten Verbindungen stellen hier kein Problem dar, was andere Tests bewiesen.

Leave a comment

Loading Facebook Comments ...