wichtige Veröffentlichung des In-Memory-Datencaching-Systems , das mit Daten im Schlüssel/Wert-Format arbeitet und sich durch einfache Handhabung auszeichnet. Memcached wird häufig als leichtgewichtige Lösung eingesetzt, um die Leistung stark belasteter Websites durch Caching des Zugriffs auf Datenbanken und Zwischendaten zu verbessern. Code unter der BSD-Lizenz.
In der neuen Version wurde die Implementierung des Speichers „“ stabilisiert, der jetzt standardmäßig aktiviert ist (zur Deaktivierung im configure-Skript steht die Option „—disable-extstore“ zur Verfügung), jedoch eine ausdrückliche Aktivierung beim Start erfordert (alte Installationen funktionieren nach dem Update weiterhin ohne Änderungen). Obwohl der Speicher „extstore“ insgesamt als stabil gilt, wird Vorsicht bei der Implementierung in sehr großen Systemen empfohlen.
Extstore ermöglicht die Verwendung von SSD/Flash-Speichern zur Erweiterung der Cache-Größe. Wie bei der Nutzung von RAM ist auch der Flash-Speicher nicht dauerhaft und wird beim Neustart zurückgesetzt. Ein Anwendungsgebiet des neuen Modus ist die effiziente Speicherung großer Datenmengen im Cache. Bei Verwendung von "extstore" werden die Schlüssel und Metadaten weiterhin nur im Arbeitsspeicher gespeichert, während die mit den Schlüsseln verknüpften großen Daten, die den festgelegten Threshold überschreiten, im externen Speicher abgelegt werden. Im RAM bleibt lediglich ein Verweis stehen.
Wenn mit einem Schlüssel kleine Daten verknüpft sind, arbeitet 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 nachgefragten Daten zusätzlich vollständig im Cache im Arbeitsspeicher gehalten werden (zum Beispiel kann festgelegt werden, dass nur Objekte größer als 1024 Byte, die in den letzten 3600 Sekunden nicht aufgerufen wurden, auf Flash gespeichert werden).
Die Implementierung ist optimiert, um maximale Leistung bei minimaler CPU-Belastung zu gewährleisten, was allerdings auf Kosten der Speichereffizienz (hoher Fragmentierungsgrad) geht. Um die Lebensdauer von Flash-Speichern zu verlängern, werden die Daten gepuffert und sequenziell in den Speicher geschrieben. Um den Cache-Zustand zwischen Neustarts zu erhalten, kann die in Version 1.5.18 eingeführte Möglichkeit, einen Dump des Caches in eine Datei zu schreiben, verwendet werden. Bei der nächsten Ausführung kann der Cache aus dieser Datei wiederhergestellt werden, um Spitzenlasten auf die Content-Handler aufgrund eines leeren Caches zu vermeiden (der Cache wird sofort "warm").
Eine der wichtigsten Änderungen in Memcached 1.6 ist die Überarbeitung des Codes für die Netzwerkinteraktion, der nun zur automatischen Bearbeitung von Batch-Anfragen innerhalb eines einzigen Systemaufrufs angepasst wurde. Früher, bei der Übertragung mehrerer "GET"-Befehle in einem TCP-Paket, führte memcached die Ergebnisse durch separate Systemaufrufe aus. In Memcached 1.6 werden die Antworten aggregiert und durch einen einzigen Systemaufruf zurückgegeben. Das Ergebnis ist, dass im Durchschnitt nun 1,5 Schlüssel pro Systemaufruf verarbeitet werden, was in Tests eine Reduzierung der CPU-Belastung um bis zu 25 % und eine Verringerung der Latenzzeiten um mehrere Prozent zeigt.
Die Überarbeitung des Netzwerk-Subsystems ermöglicht nun eine dynamische Zuweisung von Puffern nach Bedarf, anstelle einer statischen Zuordnung. Diese Optimierung reduzierte den Speicherverbrauch im Leerlauf auf 400-500 Byte anstelle von 4,5 KB bei einer aktiven Verbindung des Clients und beseitigte viele Aufrufe von malloc, realloc und free, die zu überflüssiger Speicherfragmentierung bei Systemen mit einer hohen Anzahl von Verbindungen führten. Jeder Worker-Thread verarbeitet jetzt seinen eigenen Pool von Lese- und Schreibpuffern für aktive Client-Verbindungen. Für die Anpassung der Größe dieser Puffer
stehen die Optionen „-o resp_obj_mem_limit=N“ und „-o read_buf_mem_limit=N“ zur Verfügung.
In der Version 1.6 wurde ebenfalls angekündigt, dass der binäre Protokollbetrieb als veraltet gilt. Die Unterstützung des binären Protokolls und die Behebung von Fehlern werden fortgesetzt, aber neue Funktionen und Aktualisierungen bestehender Funktionen werden nicht mehr übertragen. wird weiterhin unverändert weiterentwickelt. An die Stelle des binären Protokolls tritt ein neues Protokoll (textuelle Variante 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 Text- und Binärprotokolle verfügbar waren.
Quelle: opennet.ru
