bedeutendes Release des Systems zur Daten-Caching im Arbeitsspeicher , das mit Daten im Schlüssel/Wert-Format arbeitet und sich durch Benutzerfreundlichkeit auszeichnet. Memcached wird normalerweise als leichtgewichtige Lösung verwendet, um die Leistung von stark frequentierten Websites durch das Caching des Zugriffs auf Datenbanken und Zwischenspeicher zu beschleunigen. Code unter der BSD-Lizenz stehen.
In der neuen Version wurde die Implementierung des Speichers „„ stabilisiert, der jetzt standardmäßig kompiliert wird (um dies im Configure-Skript zu deaktivieren, gibt es die Option „—disable-extstore“), jedoch eine explizite Aktivierung beim Start erfordert (ältere Installationen funktionieren nach dem Update weiterhin unverändert). Obwohl der Speicher „extstore“ insgesamt als stabil anerkannt ist, wird empfohlen, bei der Implementierung in sehr großen Systemen Vorsicht walten zu lassen.
Extstore ermöglicht die Nutzung von SSD/Flash-Speichern zur Erweiterung der Cache-Größe. Wie bei der Verwendung von RAM ist der Speicher auf Flash nicht dauerhaft und wird beim Neustart zurückgesetzt. Der neue Modus wird verwendet, um eine effiziente Zwischenspeicherung großer Datenmengen zu gewährleisten. Bei Verwendung von „extstore“ werden Schlüssel und Metadaten, wie zuvor, nur im RAM gespeichert, aber die mit den Schlüsseln verknüpften großen Daten, die den festgelegten Schwellenwert überschreiten, werden im externen Speicher gespeichert, während im RAM nur ein Zeiger bleibt.
Wenn mit dem Schlüssel kleine Daten verbunden sind, funktioniert Memcached wie gewohnt, hält die Daten im Speicher und greift nicht auf den externen Speicher zu. Wenn viel freier Speicher vorhanden ist, können die am häufigsten nachgeforderten Daten zusätzlich vollständig im Cache im RAM liegen (zum Beispiel kann angegeben werden, dass nur Objekte über 1024 Byte auf Flash zurückgesetzt werden, auf die in 3600 Sekunden nicht zugegriffen wurde).
Die Implementierung ist optimiert, um maximale Leistung und minimale CPU-Last zu gewährleisten, auf Kosten der Speichereffizienz (hohes Fragmentierungsniveau). Um die Lebensdauer von Flash-Speichermedien zu verlängern, werden die Daten gepuffert und sequenziell im Speicher zurückgesetzt. Zum Erhalt des Cache-Zustands zwischen Neustarts kann die in der Version 1.5.18 eingeführte Möglichkeit verwendet werden, einen Dump mit dem Cache in eine Datei zu speichern. Beim nächsten Start kann der Cache aus dieser Datei wiederhergestellt werden, um Spitzenlasten bei den Content-Handlern aufgrund eines leeren Caches zu vermeiden (der Cache wird sofort „warm“).
Die zweite wichtige Änderung in Memcached 1.6 war die Überarbeitung des Codes für die Netzwerkinteraktion, der für die automatische Verarbeitung von Batch-Anfragen innerhalb eines Systemaufrufs angepasst wurde. Zuvor sendete Memcached bei der Übertragung mehrerer „GET“-Befehle in einem TCP-Paket die Ergebnisse durch Ausführung separater Systemaufrufe. In Memcached 1.6 werden die Antworten aggregiert und mit einem einzigen Systemaufruf zurückgegeben. Das Ergebnis ist, dass nun durchschnittlich 1,5 Schlüssel pro Systemaufruf erforderlich sind, was in Tests eine Verringerung der CPU-Belastung um bis zu 25 % und eine Reduzierung der Latenz um einige Prozente zeigt.
Die Überarbeitung der Netzwerksubsysteme ermöglichte auch eine dynamische Zuweisung von Puffern nach Bedarf, anstelle einer statischen Zuordnung von Puffern. Diese Optimierung reduzierte den Speicherverbrauch im Leerlauf auf neue Befehle über eine vom Client etablierte Verbindung von 4,5 KB auf 400-500 Byte und beseitigte viele Aufrufe von malloc, realloc und free, die zu unnötiger Speicherfragmentierung in Systemen mit vielen Verbindungen führten. Jeder Arbeits-Thread verarbeitet jetzt seinen eigenen Pufferpool zum Lesen und Schreiben für aktive Clientverbindungen. Zur Anpassung der Größe dieser Puffer
Es sind die Optionen „-o resp_obj_mem_limit=N“ und „-o read_buf_mem_limt=N“ vorgesehen.
In der Version 1.6 wurde ebenfalls bekannt gegeben, dass der binäre Protokoll Das Textprotokoll meta (textbasierte Version des Protokolls mit kompakten Meta-Befehlen), die eine optimale Kombination aus Leistung und Zuverlässigkeit demonstriert. Das neue Protokoll umfasst alle Operationen, die zuvor über die text- und binären Protokolle verfügbar waren.
Quelle: opennet.ru
