Memcached ist ein Allzweck-Speicher-Caching-System. Das bedeutet, dass Antworten auf Fragen gespeichert (oder zwischengespeichert) werden, deren Berechnung oder Abruf viel Zeit in Anspruch nimmt und werden wahrscheinlich erneut gefragt . Ein häufiger Anwendungsfall besteht darin, die Verwendung einer Datenbank zu beschleunigen:Wenn wir beispielsweise davon ausgehen, dass wir die Liste der „Namen aller Personen, die in Team X sind“, wiederholt benötigen, könnten wir diese Daten in Memcached ablegen, anstatt eine SQL-Abfrage auszuführen jedes Mal. (Hinweis:Memcached wird gelegentlich als „Memcache“ bezeichnet. Wir werden in diesem Artikel beim vollständigen Namen bleiben.)
Caches sind hilfreich beim Erstellen skalierbarer Anwendungen und Infrastrukturen, die den Kern eines Site Reliability Engineers (SRE) ausmachen. Dieser Artikel befasst sich mit den Voraussetzungen für einen effektiven Betrieb von Memcached.
Speicherempfehlungen und Daemonisierung von Memcached
Memcached funktioniert am besten, wenn es auf die Menge an Arbeitsspeicher beschränkt ist, die das System verfügbar hat:Es wird beseitigt Daten, wenn mehr Speicherplatz benötigt wird als das Speicherlimit. Etwas Speicherplatz wird für das benötigt, was wir als „Overhead“ bezeichnen können – Speicherplatz, der für die Verwaltungsvorgänge von Memcached, das Betriebssystem und untergeordnete Prozesse benötigt wird.
Weitere tolle Inhalte
- Kostenloser Online-Kurs:Technischer RHEL-Überblick
- Erfahren Sie fortgeschrittene Linux-Befehle
- Spickzettel herunterladen
- Finden Sie eine Open-Source-Alternative
- Lesen Sie Top-Linux-Inhalte
- Schauen Sie sich Open-Source-Ressourcen an
Dies wird über das -m gesetzt Befehlszeilen-Flag, das wahrscheinlich das einzige Flag ist, das Sie zum Ausführen von Memcached benötigen. Das -d Das Flag (daemonize) ist normalerweise nicht nützlich:Auf modernen systemd-basierten Betriebssystemen sollte sich Memcached nicht selbst daemonisieren. Wenn Sie es unter Docker ausführen, sollte es sich ebenfalls nicht selbst daemonisieren.
Das Ausführen von Memcached in einem Container ist in Ordnung, aber es ist wichtig zu berücksichtigen, was sonst noch auf dem Host ausgeführt wird, und die Speicheranforderungen sorgfältig abzustimmen.
Ansehen von Memcached-Daten mit Statistiken
Wenn Sie Memcached ausführen, ist es oft eine gute Idee, sich direkt zu verbinden und herumzuspielen, um zu sehen, was vor sich geht. Es ist einigermaßen sicher, selbst bei Produktionsinstanzen, solange Sie ein wenig Sorgfalt walten lassen.
Der sicherste auszuführende Befehl ist stats . Es wird dazu führen, dass Memcached eine große Anzahl von Statistiken und Details ausspuckt, die oft nützlich sind:
$ echo stats | nc localhost 11211
...
STAT-Betriebszeit 1346
...
STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT abgelehnte_Verbindungen 4
...
STAT get_hits 0
STAT get_misses 0
STAT get_expired 0
...
END
Die interessantesten Statistiken sind normalerweise "Treffer", "Fehltreffer" und "abgelaufen". Diese können oft eine interessante Geschichte darüber erzählen, wie effektiv der Cache ist. Wenn die Wirksamkeit verringert wird, ist dies ein Grund zur Besorgnis, da dies die Anwendungsleistung beeinträchtigen könnte.
Eine etwas weniger sichere Sache, die Sie ausprobieren sollten, ist ein Store-and-Retrieve. Dies ist eine gute Möglichkeit, "die Reifen zu treten" und zu lernen, wie es funktioniert:
$ echo stats | nc localhost 11211
set my_key 0 0 8
my_value^M
STORED
get my_key
VALUE my_key 0 8
my_value
ENDNach der Eingabe von my_value , müssen Sie ein Zeilenende im DOS-Stil senden:return und newline. Dies geschieht in einer Linux-Konsole mit Strg+V und drücken Sie dann Enter , die die Rückgabe ausgibt Zeichen (ASCII 13) und drücken Sie dann Enter wie gewohnt um den newline auszugeben Zeichen (ASCII 10).
Die erste 0 steht für "Metadaten" und übergibt 0 bedeutet, dass es keine interessanten Metadaten gibt. Sie wird als Bitmaske behandelt, also 0 hat alle Bits ausgeschaltet. Die zweite 0 ist für Ablaufzeit. Es bedeutet „nicht ablaufen“. Im Allgemeinen ist dies zum Testen in Ordnung. In Produktionseinstellungen ist es sinnvoll, eine Ablaufzeit für Schlüssel festzulegen.
Wenn es sich um eine wichtige Instanz handelt, muss darauf geachtet werden, dass kein wichtiger Schlüssel überschrieben wird. Die Fähigkeit zum schnellen Speichern und Abrufen über die Befehlszeile ermöglicht jedoch sicherzustellen, dass Memcached korrekt ausgeführt wird.
Memcached als Dienst teilen
Beachten Sie, dass in einem modernen Microservices-Setup viele Dienste Daten in Memcache speichern möchten, und es sich lohnt, eine Strategie zu entwickeln, um dies zu verwalten. Eine Möglichkeit besteht darin, einen Memcache oder einen Cluster pro Dienst auszuführen. Dies ist jedoch oft kompliziert und wartungsintensiv. Oft ist es das Richtige, Dienste einen Memcache gemeinsam nutzen zu lassen. In diesem Fall ist es eine gute Idee, einige vernünftige Richtlinien zu implementieren; B. vorschreiben, dass der Dienstname dem Schlüssel vorangestellt wird. So kann mit dem cachedump überprüft werden, welche Dienste wie viel Platz verbrauchen Befehl:
$ echo 'Statistiken' | nc -w 1 localhost 11211|grep ':number '
STAT items:1:number 2Dieser Befehl zeigt alle "Slab"-IDs an. Memcache speichert ähnlich große Schlüssel in Slabs; Dieses Beispiel hat nur eine Platte:
$ echo 'stats cachedump 1 1000' | nc -w 1 localhost 11211
ITEM my_key [8 b; 0 s]
ITEM foo [5 b; 0 s]
ENDEHier gibt es zwei Schlüssel:einen mit einem 8-Byte-Wert und einen mit einem 5-Byte-Wert.
In einem realistischeren Szenario mit vielen Schlüsseln möchten Sie diese Daten vielleicht mit awk verarbeiten oder ein Skript und ermitteln Sie anhand einer lokalen Konvention, wie viel Speicherplatz jeder Dienst verwendet.
Dies kann in ein Überwachungssystem wie Prometheus integriert werden, um das Verhalten im Laufe der Zeit zu verfolgen.
Da viele Teams denselben Dienst nutzen, ist es außerdem eine nützliche Richtlinie, vorzuschlagen, dass Dienste die zwischengespeicherten Daten verschlüsseln und authentifizieren. Die symmetrische Verschlüsselung auf modernen CPUs ist performant, was viel einfachere Sicherheitsmodelle ermöglicht. Ein Beispiel für eine Bibliothek, die dies unterstützt, ist Fernet von Cryptography. (Lassen Sie es mich in den Kommentaren wissen, wenn Sie mehr darüber lesen möchten.)
Schlussfolgerung
Memcached ist eine gängige Open-Source-Technologie, die von einem SRE unterstützt wird. In diesem Artikel habe ich mir angesehen, wie allgemeine Statistiken dazu abgefragt werden können, einige Konfigurationshinweise gegeben und gezeigt, wie man mehreren Teams dabei helfen kann, einen einzelnen Memcached-Cluster auf einfach zu überwachende und sichere Weise gemeinsam zu nutzen. Haben Sie weitere Fragen zur Verwaltung von Memcached? Fragen Sie in den Kommentaren und ich werde Ihnen gerne weitere Tipps geben.