Caching
Ein Cache ist ein Zwischenspeicher, der eine Sammlung von Daten enthält. Diese werden bereit gehalten, um bei (erneuten) Anfragen Zeit zu sparen sowie wiederholte Rückfragen und aufwändige Neuberechnungen zu vermeiden.
Ab Moodle 2.4 implementiert Moodle eine Basis Caching Architektur, den Moodle Universal Cache (MUC). Dieser MUC wird schrittweise ausgebaut.
Allgemeine Herangehensweise bei Geschwindigkeits-Tests
- Setzen Sie eine Test-Umgebung auf, die so nah wie möglich an Ihre produktive Moodle-Site herankommt (Hardware, Software, Netzwerk, usw.)
- Löschen Sie alle nicht benötigten Variablen in dieser Test-Umgebung (z.B. nicht benötigte Dienste und Services).
- Verwenden Sie ein Werkzeug, das eine realisitische, simulierte und reproduzierbare Last auf dem Test-Server erzeugt (z.B. jmeter oder selenium).
- Überlegen Sie, wie Sie die Geschwindigkeit messen wollen, d.h. welche Daten Sie beobachten wollen (RAM, Last, verbrauchte Zeit usw.).
- Lassen Sie den Test-Server unter dieser definierten Last laufen und messen Sie die Geschwindigkeit.
- Ändern Sie einen Parameter, lassen Sie den Server erneut unter der definierten Last laufen und messen Sie wieder die Geschwindigkeit. Prüfen Sie , ob eine Verbesserung zu beobachten ist und testen Sie dann den nächsten Parameter.
- Wenn Sie signifikante Verbesserungen feststellen, übernehemn Sie die Konfiguration auf Ihr Produktiv-System.
Cache-Konfiguration in Moodle
Seit Moodle 2.4 stellt Moodle ein Caching-Plugin-Framework bereit, so dass die Moodle-Administration konfigurieren kann, wo Daten zwischengespeichert werden.
Für die meisten Moodle-Installationen sollte die Standardkonfiguration ausreichend sein, so dass keine Anpassungen nötig sind.
Bei großen Moodle-Installationen mit mehreren Servern kann die Moodle-Administration Memcached, MongoDB oder andere Systeme verwenden, um Daten zwischenzuspeichern.
Das Caching wird in Moodle durch den Moodle Universal Cache (MUC) gesteuert.
Dieser Artikel gibt einen kurzen Überblick, was der MUC ist und beschreibt die einzelnen Konfigurationsmöglichkeiten im Detail.
Cache-Konzept in Moodle
Das Caching in Moodle ist nicht so komplex wie es auf den ersten Blick scheint. Im Folgenden wird ein kleiner Einblick gegeben, wie das Cache-Konzept funktioniert.
Cache-Typen
Beginnen wir mit den Cache-Typen, manchmal auch als Cache-Modi bezeichnet. Es gibt drei Cache-Grundtypen in Moodle.
Der erste Typ ist der Anwendungs-Cache (Application-Cache). Das ist der am häufigsten im Code verwendete Cache-Typ. Seine Information wird mit allen Nutzer/innen geteilt und seine Daten bleiben während Anfragen persistent.
Informationen, die im Anwendungs-Cache abgelegt werden, werden aus zwei Gründen zwischengespeichert: Entweder handelt es sich um eine Information, die bei fast allen Anfragen benötigt wird und eine oder mehrere Datenbankabfragen erspart oder es handelt sich um eine Information, die zwar bei wenigen Anfragen benötigt wird, die aber mit großem Aufwand generiert werden muss.
Standardmäßig werden solche Informationen in einer wohldefinierten Struktur im Moodle-Datenverzeichnis gespeichert.
Der zweite Cache-Typ ist der Session-Cache. Dieser Cache verwendet standardmäßig die PHP-Sessions. Vielleicht wundern Sie sich, wieso es diesen Cache-Typ überhaupt gibt. MUC ist ein Werkzeug zum Speichern und Löschen von Informationen zwischen Anfragen. Er bietet Entwickler/innen ein Framework zur Nutzung und Verwaltung des Caches, damit sie das Rad nicht neu erfinden müssen.
Beachten Sie, dass dieser Cache-Typ nicht oft genutzt wird, da der Session-Cache standardmäßig in den PHP-Sessions gespeichert werden und PHP-Sessions werden in der Datenbank gespeichert. Der Session-Cache sollte nur für kleine Datensätze verwendet werden, da sonst die Datenbank unnötig aufgeblasen wird.
Der dritte Cache-Typ ist der Abfrage-Cache (Request-Cache). Daten, die in diesem Cache-Typ gespeichert werden, werden nur während der Gültigkeitsdauer einer Anfrage zwischengespeichert. Entwickler/innen können sich das auch als statische Variable vorstellen.
Dieser Cache-Typ wird am seltensten verwendet. Er wird verwendet, wenn eine bestimmte Information innerhalb derselben Anfrage mehrfach benötigt wird. Diese Information wird im RAM gespeichert.
Cache-Typen und Multiple-Server-Systeme
Wenn Sie ein System von mehreren Webservern verwenden, muss der Anwendungs-Cache zwischen diesen Servern geteilt werden. Sie können nicht den schnellen lokalen Speicher verwenden, sondern Sie müssen geteilten Speicher oder geteilten Cache verwenden, z.B. geteilten Memcache.
Dasselbe gilt für den Session-Cache, es sei den Sie stellen sicher, dass Nutzer/innen während einer Session immer auf denselben Webserver zugreifen.
Cache-Backends
Cache-Backends sind die Orte, in denen die Cache-Daten tatsächlich gespeichert werden. Dazu gehören das Dateisystem, PHP-Sessions, Memcached und der RAM.
Standardmäßig verwendet Moodle das Dateisystem, PHP-Sessions und den RAM.
Es ist nicht erforderlich, dass andere Systeme wie z.B. Memcached bereitgestellt werden müssen.
Wenn vom Cache-Backend die Rede ist, können Sie sich das als Systeme außerhalb von Moodle vorstellen, in denen Daten gespeichert werden, z.B. MongoDB Srver, Memcache Server und ähnliche Server-Anwendungen.
Cache-Speicher
Cache-Speicher sind ein Plugin-Typ in Moodle. Sie stellen die Verbindung von Moodle zum Cache-Backend wie oben beschrieben her.
Moodle unterstützt standardmäßig die drei oben genannten Cache-Typen sowie Memcache, Memcached, MongoDB sowie ab Moodle 3.2 APC User Cache und Redis Cache.
Weitere Cache-Speicher-Plugins finden Sie in der Moodle-Plugins.Datenbank. Der Code für diese Plugins befindet sich im Moodle-Verzeichnis moodle/cache/stores.
Sie können in Moodle so viele Cache-Speicher konfigurieren, wie Ihre System-Architektur es erfordert. Wenn Sie z.B. mehrere Memcache-Server haben, können Sie für jeden Server eine Cache-Speicher-Instanz anlegen.
In Moodle sind standardmäßig drei Cache-Speicher-Instanzen vorkonfiguriert, die verwenden werden, wenn Sie keine Änderungen an der Cache-Speicher-Konfiguration vornehmen:
- Datei-Cache: Dieser wird für alle Anwendungs-Caches verwendet. Er speichert Daten im Moodle-Datenverzeichnis.
- Session-Cache: Dieser wird für alle Session-Caches verwendet. Er speichert Daten in den PHP-Sessions in der Moodle-Datenbank.
- Statischer Abfrage-Cache: Dieser wird für alle Abfrage-Caches. Die Daten werden während der Gültigkeitsdauer der Anfrage im RAM gespeichert.
Cache: Was passiert im Code?
Caches werden im Code erzeugt und verwendet, um Daten zwischenzuspeichern.
Wenn Entwickler/innen im Code einen Cache erzeugen wollen, müssen sie folgende Informationen angeben:
- den Cache-Typ
- den Codeabschnitt, zum dem der Cache gehört (die API)
- den Cache-Namen, aus dem hervorgeht, was dieser Cache zwischenspeichert
Darüber hinaus gibt es weitere optionale Informationen, die angegeben werden können.
Wichtig: Entwickler/innen können nur den Cache-Typ angeben, aber nicht welches Cache-Backend verwendet wird.
Wie passt alles zusammen?
- Die System-Administration installiert die Cache-Backends, die Sie verwenden wollen: Memcache, XCache, APC usw.
Moodle weiß über diese Backends nichts, sie liegen außerhalb von Moodle. Die Cache-Backends liegen in der vollen Verantwortung der System-Administration. - Die Moodle-Administration konfiguriert für jedes Cache-Backend, das Moodle verwenden soll, eine Cache-Speicher-Instanz.
Für jedes Cache-Backend kann es mehrere Cache-Speicher-Instanzen geben. Einige Backends, z.B. Memcached, haben Einstellungen, um getrennte Bereiche innerhalb eines Backends zu erzeugen. - Entwickler/innen erzeugen Caches im Code und verwenden diese, um Daten zwischenzuspeichern.
Sie wissen nichts darüber, wie das Cache-Backend aussieht. Sie sagen Moodle lediglich, welcher Cache-Typ für die erzeugten Caches am besten passt. - Die Moodle-Administratration konfiguriert eine Zuordnung zwischen einer Cache-Speicher-Instanz und einem Cache.
Diese Zuordnung teilt Moodle mit, welches Cache-Backend verwendet werden soll.
Darüber hinaus können Sie folgendes tun:
- Sie können mehrere Caches einer einzigen Cache-Speicher-Instanz zuordnen.
- Sie können mehrere Cache-Speicher-Instanzen einem einzigen Cache zuordnen (mit Prioritäten: erster, ..., letzter).
- Sie können eine Cache-Speicher-Instanz als Standard-Cache für einen bestimmten Cache-Typ festlegen.
Wenn Sie sich zum ersten Mal mit dem MUC beschäftigen, dann klingt das vermutlich sehr komplex. Aber keine Sorge, wir schauen uns das genauer an, wenn wir die einzelnen Konfigurationsmöglichkeit im Detail besprechen (siehe weiter unten).
Erweiterte Cache-Konzepte
Erweiterte Cache-Konzepte werden auf den meisten Moodle-Servern nicht erforderlich sein. Dieser Abschnitt ist für Sie nur interessant, wenn Sie große Moodle-Installationen betreiben, die auf verteilten Servern oder verteilten Cache-Backends laufen und Sie die Geschwindigkeit optimieren wollen.
Sperren (Locking)
Die Idee des Sperrens ist nicht neu, hier geht es um die Zugriffskontrolle bei gleichzeitigen Zugriffen.
Der MUC stellt ein Cache-Lock-Plugin zur Verfügung, das dann zum Einsatz kommt, wenn bestimmte Caches dies erfordern. Bislang ist dieser Fall noch nicht vorgekommen. Ein Cache ist naturgemäß "flüchtig" und jede Information, die kritisch ist, sollte besser in einem permanenten datenspeicher gespeichert werden, z.B. in einer Datenbank.
Nichtdestotrotz gibt es ein Locking-System, das bei der Cache-Definition angefordert werden kann und das bei der Interaktion mit einer Cache-Speicher-Instanz verwendet wird.
Teilen (Sharing)
Zu jedem Datenbit, das im Cache gespeichert wird, gehört ein eindeutiger Schlüssel. Standardmäßig ist ein Teil des Schlüssel der Site-Identifier Ihrer Moodle-Site, so dass jeder Inhalt, der im Cache gespeichert wird, genau der Moodle-Site zugeordnet ist, die den Inhalt zwischenspeichert. Für die meisten Moodle-Sites ist das genau passend.
Es gibt jedoch Situationen, in denen mehrere Moodle-Instanzen die zwischengespeicherten Daten teilen sollen. Natürlich können nicht alle Caches geteilt werden, aber bei einigen ist es möglich und durch das Teilen kann die Last reduziert und die Geschwindigkeit erhöht werden.
Wenn Sie Caches über mehrere Moodle-Sites hinweg teilen wollen, dann müssen Sie zuerst in allen Moodle-Sites identische Cache-Speicher-Instanzen konfigurieren und danach in jeder Moodle-Site die Einstellung für das Teilen identisch vornehmen:
- Moodle-Sites mit derselben Site-ID
- Das ist die Standardeinstellung. Sie ermöglicht, dass Moodle-Sites mit demselben Site-Identifier Informationen teilen, die im Cache gespeichert sind. Das ist die restriktivste Einstellung, aber sie funktioniert für alle Caches. Bei alle anderen Einstellungen müssen Sie sicherstellen, dass die Information im Cache für alle Moodle-Sites, die auf diesen Cache zugreifen, sinnvoll und verwendbar ist.
- Moodle-Sites mit derselben Version
- Alle Moodle-Sites mit derselben Moodle-Version, die auf das Backend zugreifen, können die Information im Cache teilen.
- Angepasster Schlüssel
- Hier legen Sie den Schlüssel fest, der für das Teilen des Caches verwendet wird. Derselbe Schlüssel muss in allen Moodle-Sites eingetragen werden, die den Cache teilen sollen.
- Jeder
- Die Information im Cache ist für alle Moodle-Sites verfügbar, die auf den Cache zugreifen. Damit liegt es in der Verantwortung der Moodle-Administration, die alles Sites geeignet konfigurieren muss.
Beispiel: Sie haben mehrere Moodle-Sites mit derselben Version, die auf Servern laufen, auf denen APC installiert ist. Dann könnten Sie den Sprach-Cache dem APC-Cache zuordnen und diesen Cache so konfigurieren, dass alle Moodle-Sites darauf zugreifen können.
In vielen Situationen ist das Teilen des Sprach-Cache wie im Beispiel beschrieben geeignet. Der Sprach-Cache wird auf fast jeder Moodle-Seite verwendet und APC ist extrem schnell. Beachten Sie, dass alle Sprachanpassungen dann ebenfalls geteilt werden.
Cache-Konfiguration
Die Cache-Konfigurationsseite gibt Ihnen einen Überblick, wie der Cache in Ihrer Moodle-Site konfiguriert ist. Auf dieser Seite können Sie auch alle Anpassungen der Cache-Konfiguration vornehmen.
Zugriff auf die Cache-Konfigurationsseite
Die Moodle-Administration hat Zugriff auf die Cache-Konfigurationsseite: Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration.
Installierte Cache-Speicher
In diesem Abschnitt sehen Sie alle Cache-Speicher-Plugins, die installiert sind.
Bei jedem Plugin können Sie sofort sehen, ob es bereit zur Nutzung ist (entsprechende PHP-Erweiterungen installiert sind), wie viele Cache-Speicher-Instanzen es bereits auf Ihrer Moodle-Site gibt, welchen Cache-Typ und welche Funktionalitäten sowie alle Aktivitäten, die sie für diese Instanzen ausführen können.
Häufig ist die einzige verfügbare Aktivität diese: Instanz hinzufügen.
Speicher-Instanzen konfigurieren
Hier sehen Sie die Liste der Cache-Speicher-Instanzen Ihrer Moodle-Site:
- Speichername
- Name der Cache-Speicher-Instanz - kann beliebig sein, dient nur zur Identifizierung.
- Plugin
- Cache-Speicher-Plugin, das zu dieser Instanz gehört - gibt den Cache-Typ an.
- Fertig
- Sie sehen ein grünes Häkchen, wenn alle erforderlichen PHP-Erweiterungen installiert und verfügbar sind und auch sonst alle Voraussetzungen für diesen Cache-Speicher erfüllt sind.
- Speicher-Zuordnungen
- Anzahl der Caches, die dieser Cache-Instanz zugeordnet wurden (ohne die Standardzuordnungen, siehe unten).
- Modi
- Modi, die diese Instanz bedienen kann.
- Unterstützungen
- Funktionalitäten, die diese Instanz unterstützt.
- Sperrung
- Sperrung (Locking) ist ein Mechanismus, der den Zugriff auf die zwischengespeicherten Daten auf nur einen Prozess beschränkt beschränkt (und damit verhindert, dass die Daten - von einem anderen Prozess - überschrieben werden ).
Die Sperrungsmethode legt fest, wie die Sperrung erzeugt und geprüft wird.
- Aktivitäten
- Aktionen, die mit dieser Instanz durchgeführt werden können.
Bekannte Cachedefinitionen
Das Konzept der Cache-Definitionen wurde bisher noch nicht angesprochen. Cache-Definitionen werden von den Entwickler/innen erstellt. Für das Anlegen eines Caches haben Entwickler/innen zwei Möglichkeiten:
- Erstellen einer Cache-Definition: Damit wird Moodle das Wichtigste zu diesem Cache mitgeteilt.
- Erstellen eines Adhoc-Caches.
Entwickler/innen sind angehalten, die erste Variante zu wählen. Nur wenn eine Cache-Definition vorliegt, kann der Cache durch die Moodle-Administration zugeordnet und weiter konfiguriert werden. Adhoc-Caches sind normalerweise nur in Situationen erlaubt, wenn der Cache sehr klein ist und der Konfigurationsaufwand in keinem Verhältnis dazu steht und der Moodle-Administration auch keinen weiteren Nutzen bringt.
In diesem Abschnitt sehen Sie zu jeder Cache-Definition folgende Informationen:
- Definition
- Prägnante Beschreibung des Caches
- Modus
- Cache-Typ
- Komponente
- Moodle-Komponente, zu der der Cache gehört
- Bereich
- Code-Abschnitt, der den Cache innerhalb der Komponente verwendet
- Speicher-Zuordnungen
- Cache-Typen, die dieser Cache verwendet
- Sharing
- Wie ist das Teilen des Caches für die Moodle-Site konfiguriert
- Aktivitäten
- Aktionen, die mit diesem Cache durchgeführt werden können (Bearbeiten, Sharing bearbeiten, Verwerfen)
Unten in diesem Abschnitt gibt es einen Link Definitionen erneut auswerten. Wenn Sie diesen Link anklicken, dann prüft Moodle den gesamten Code auf Änderungen in den Cache-Definitionen. Diese Prüfung wird standardmäßig bei jeder Aktualisierung von Moodle durchgeführt und wenn eine neue Cache-Definition erkannt wird. Wenn Sie nach einer Cache-Definition suchen, die in der Liste nicht angezeigt wird, dann klicken Sie den Link an, um die Überprüfung manuell zu starten.
Weitere Information zu Cache-Definitionen finden Sie in diesem Artikel (englisch).
Zusammenstellung der Speicher-Sperr-Instanzen
Wie bereits oben erwähnt ist das Sperren eine erweiterte Funktionalität des MUC.
Die Liste in diesem Abschnitt zeigt Informationen zu den konfigurierten Sperr-Mecahnismen an, die der MUC verwenden kann. Standardmäßig ist nur ein Mechanismus verfügbar: die Dateisperre.
Bisher gibt es jedoch keinen Cache, der Sperrung verwendet.
Speicherort wenn keine Definition erstellt wurde
Die Liste in diesem Abschnitt zeigt, welche Cache-Speicher-Instanzen verwendet werden, wenn keine Zuordnung konfiguriert wurde. Sie zeigt die standardmäßigen Cache-Speicher für die verschiedenen Cache-Typen an.
Unterhalb der Liste finden Sie einen Link Bearbeiten. Anklicken führt zu einer Seite, auf der Sie die Liste bearbeiten können.
Cache-Speicher-Instanzen hinzufügen
Die Standard-Cache-Konfiguration funktioniert grundsätzlich für alle Moodle-Sites. Sie können jedoch die Geschwindigkeit verbessern, wenn Sie verschiedene Caching-Backend und Caching-Mechanismen verwenden. In diesem Zusammenhang wird es nötig sein, eine neue Cache-Speicher-Instanz hinzuzufügen und sie mit einem Cache-Backend zu verknüpfen.
Datei-Cache
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und klicken Sie in der Liste im obersten Abschnitt Installierte Cache-Speicher beim Plugin Datei-Cache auf den Link Instanz hinzufügen (ganz rechts in der Spalte Aktivitäten).
Geben Sie der Instanz einen Speichernamen. Dieser Name wird verwendet, um die Instanz auf der Cache-Konfigurationsseite zu identifizieren. Der Name muss eindeutig sein, d.h. jede Cache-Instanz in Ihrer Moodle-Site muss einen eindeutigen Namen haben. Wählen Sie am besten einen Namen, der etwas über die Bedeutung des Caches aussagt.
Zusätzlich können Sie weitere Einstellungen vornehmen:
- Cache-Pfad
- Hier können Sie ein Verzeichnis auf Ihrem Moodle-Server angeben, wenn Daten in Dateisystem gespeichert werden sollen. Der Webserver-Nutzer muss auf diesem Verzeichnis Les- und Schreibrechte haben. Wenn Sie das Feld leer lassen, wird standardmäßig das Moodle-Datenverzeichnis verwendet.
- Verzeichnis automatisch anlegen
- Wenn Sie diese Checkbox markieren, dann legt Moodle beim Initialisieren des Caches das Verzeichnis an, falls es noch nicht existiert.
- Speichern in einem einzigen Verzeichnis
- Standardmäßig wird der Datei-Cache eine Unterverzeichnisstruktur anlegen, in der die Daten gespeichert werden. Dabei werden die ersten drei Buchstaben des Schlüssels als Unterverzeichnisname verwendet. Das ist sinnvoll, wenn Ihr Dateisystem so konfiguriert ist, dass nur eine bestimmte Zahl an Dateien maximal in einem Verzeichnis abgelegt werden kann. Wenn Sie diese Checkbox markieren, dann verwendet der Datei-Cache keine solche Unterverzeichnisstruktur. Stattdessen werden die Daten "flach" in einem einzigen Verzeichnis gespeichert. Dann kann es jedoch passieren, dass Sie an die eben beschriebenen Grenzen Ihrer Dateisystem-Konfiguration stoßen.
- Verzeichnis vorher durchsuchen
- Eine Funktionalität des Datei-Caches ist das Durchsuchen des gesamten Dateispeicherbereichs, wenn der Cache zum ersten Mal verwendet wird. Das führt zur schnelleren Dateiprüfung, geht jedoch zu Lasten des In-die-Tiefe-Lesens.
Der Datei-Cache ist der Standard-Cache-Speicher für Anwendungs-Caches. Der Dateizugriff kann unter großer Last viel Zeit kosten. Es gibt in diesem Zusammenhang folgende Möglichkeiten, die Geschwindigkeit zu verbessern:
- Gibt es die Möglichkeit, auf Ihrem Server ein schnelleres Dateisystem zu verwenden? Wahrscheinlich haben Sie SSD installiert, nutzen es aber nicht für das Moodle-Datenverzeichnis. Prüfen Sie, ob Sie ein Verzeichnis oder eine kleine Partition auf Ihrem SSD und dort einen Datei-Cache anlegen, anstelle des Standard-Verzeichnisses im Moodle-Datenverzeichnis.
- Wenn Sie kein schnelleres Dateisystem zur Verfügung haben, aber über genügend freien Speicher verfügen: Legen Sie für den Datei-Cache eine kleine Partition auf Ihrer Festplatte an, die ein Permanz-orientiertes Dateisystem verwendet. Viele Linux-Distributionen verwenden dafür heutzutage EXT4.
- Wenn Sie genügend Speicherkapazität auf Ihrem Server haben, können Sie ramdisk/tmpfs verweden und den Datei-Cache darauf verweisen.
Beachten Sie , dass alle Möglichkeiten nur Ideen zum Ausprobieren sind. Egal wofür Sie sich entscheiden, testen Sie gründlich!
Memcache
Bevor Sie eine Memcache-Speicher-Instanz hinzufügen können, benötigen Sie Zugriff auf einen Memcache-Server. Außerdem müssen Sie die PHP-Erweiterung memcache installieren und aktivieren.
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und klicken Sie in der Liste im obersten Abschnitt Installierte Cache-Speicher beim Plugin Memcache auf den Link Instanz hinzufügen (ganz rechts in der Spalte Aktivitäten).
Geben Sie der Instanz einen Speichernamen. Dieser Name wird verwendet, um die Instanz auf der Cache-Konfigurationsseite zu identifizieren. Der Name muss eindeutig sein, d.h. jede Cache-Instanz in Ihrer Moodle-Site muss einen eindeutigen Namen haben. Wählen Sie am besten einen Namen, der etwas über die Bedeutung des Caches aussagt.
Zusätzlich müssen Sie den Memcache-Server angeben: URL oder IP-Adresse. Zusätzlich können Sie (durch Doppelpunkt getrennt) den Port und die Priorität (weight) angeben. Sie können mehrere Server angeben: Verwenden Sie dann pro Server eine Zeile.
Beispiel: Sie haben auf Ihrem Server zwei Memcache-Instanzen laufen - eine auf dem Satndard-Port und eine auf dem Port 11212. Dann geben Sie folgendes ein:
127.0.0.1
127.0.0.1:11212
Außerdem können Sie einen Prefix-Schlüssel (Key Prefix) angeben. Was Sie hier eingeben, wird allen Schlüsseln vorangestellt. So können Sie den Memcache-Speicher effektiv aufteilen. Das ist nützlich, wenn Sie ein Verwaltungs-Tool für Ihren Memcache-Server haben, um zu schauen, was dort gespeichert ist.
Wichtige Hinweise:
- Die Memcache-PHP-Erweiterung bietet keine Möglichkeit, einzelne Einträge zu löschen. Wenn Sie also den Memcache-Cache löschen, werden ALLE Einträge im Memcache-Backend gelöscht, nicht nur die, die zu Moodle gehören! Deshalb empfehlen wir dringend, einen Memcache-Server exklusiv für Moodle aufzusetzen und diesen Server für keine anderen Anwendungen zu nutzen.
- Dasselbe gilt, wenn Sie Memcache für das Caching und die Sessions verwenden wollen: Auch in diesem Fall müssen Sie zwei Memcache-Server verwenden. Andernfalls kann es passieren, dass beim Löschen des Caches Ihre Sessions gelöscht werden!
Memcached
Wie bei Memcache gilt: Bevor Sie eine Memcached-Speicher-Instanz hinzufügen können, benötigen Sie Zugriff auf einen Memcached-Server. Außerdem müssen Sie die PHP-Erweiterung memcached installieren und aktivieren.
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und klicken Sie in der Liste im obersten Abschnitt Installierte Cache-Speicher beim Plugin Memcached auf den Link Instanz hinzufügen (ganz rechts in der Spalte Aktivitäten).
Geben Sie der Instanz einen Speichernamen. Dieser Name wird verwendet, um die Instanz auf der Cache-Konfigurationsseite zu identifizieren. Der Name muss eindeutig sein, d.h. jede Cache-Instanz in Ihrer Moodle-Site muss einen eindeutigen Namen haben. Wählen Sie am besten einen Namen, der etwas über die Bedeutung des Caches aussagt.
Zusätzlich müssen Sie den Memcached-Server angeben: URL oder IP-Adresse. Zusätzlich können Sie (durch Doppelpunkt getrennt) den Port und die Priorität (weight) angeben. Sie können mehrere Server angeben: Verwenden Sie dann pro Server eine Zeile.
Beispiel: Sie haben auf Ihrem Server zwei Memcached-Instanzen laufen - eine auf dem Satndard-Port und eine auf dem Port 11212. Dann geben Sie folgendes ein:
127.0.0.1
127.0.0.1:11212
Weitere Einstellungen sind folgende:
- Komprimierung verwenden
- Die Komprimierung ist standardmäßig aktiviert, kann jedoch bei Bedarf deaktiviert werden.
- Serialiser verwenden
- Hier können Sie wählen, welcher Serialiser für die Kommunikation mit dem Memcached-Server verwendet wird. Standardmäßig steht nur ein Serialiser zur Verfügung, Sie können jedoch weitere installieren, z.B. igbinary.
- Prefix-Schlüssel
- Der Prefix-Schlüssel wird allen Schlüsseln vorangestellt, bevor mit dem Memcached-Server kommuniziert wird.
- Hash-Verfahren
- Standardmäßig wird das Hash-Verfahren verwendet, das die Memcached-PHP-Erweiterung bereitstellt. Sie können jedoch auch Alternativen wählen. Detaillierte Informationen finden Sie hier. Sie können die Standard-Hash-Funktion, die PHP verwendet, auch in der PHP-Konfigurationsdatei php.ini überschreiben.
- Buffer schreiben
- Diese Option ist standardmäßig deaktiviert. Wenn Sie die Option aktivieren, wir die Kommunikation zwischen Moodle und dem Memcached-Server minimiert. Der Nachteil ist, dass es bei konkurrenten Zugriff sehr leicht passieren kann, dass mehrere Zugriffe daten erzeugen, weil kein Zugriff die Daten in den Cache geschrieben hat.
Wichtige Hinweise:
- Die Memcached-PHP-Erweiterung bietet keine Möglichkeit, einzelne Einträge zu löschen. Wenn Sie also den Memcached-Cache löschen, werden ALLE Einträge im Memcached-Backend gelöscht, nicht nur die, die zu Moodle gehören! Deshalb empfehlen wir dringend, einen Memcached-Server exklusiv für Moodle aufzusetzen und diesen Server für keine anderen Anwendungen zu nutzen.
- Dasselbe gilt, wenn Sie Memcached für das Caching und die Sessions verwenden wollen: Auch in diesem Fall müssen Sie zwei Memcached-Server verwenden. Andernfalls kann es passieren, dass beim Löschen des Caches Ihre Sessions gelöscht werden!
MongoDB
MongoDB ist eine Open Source orientierte NoSQL-Datenbank. Detaillierte Informationen finden Sie unter www.mongodb.org.
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und klicken Sie in der Liste im obersten Abschnitt Installierte Cache-Speicher beim Plugin MongoDB auf den Link Instanz hinzufügen (ganz rechts in der Spalte Aktivitäten).
Sie können folgende Einstellungen vornehmen:
- Speichername
- Dieser Name wird verwendet, um die Instanz auf der Cache-Konfigurationsseite zu identifizieren. Der Name der Cache-Instanz muss eindeutig sein.
- Server
- This is the connection string for the server you want to use. Multiple servers can be specified using a comma-separated list.
- Datenbank
- Name der verwendeten Datenbank
- Nutzername
- Name des Datenbank-Nutzers
- Kennwort
- Kennwort des Datenbank-Nutzers
- Replica Set
- Name des Replica Sets; Wenn dieser Wert gesetzt ist, wird der Master durch den Datenbank-Befehl ismaster bestimmt. So kann der Treiber sogar eine Verbindung zu einem Server herstellen, der nicht aufgelistet wurde.
- Sichere Verbindung benutzen
- Wenn Sie diese Checkbox markieren, dann werden alle INSERT, GET und REMOVE Befehle mit der Option usesafe ausgeführt. Wenn Sie ein Replica Set angegeben haben, dann wird die Option usesafe ohnehin verwendet.
- Sicheren Wert benutzen
- Hier können Sie einen spezifischen Wert für die Option usesafe eintragen. Dieser Wert bestimmt die Anzahl der Server, dessen Befehle abgeschlossen sein müssen, bevor sie als abgeschlossen gekennzeichnet werden.
- Erweiterte Schlüssel verwenden
- Wenn Sie diese Checkbox markieren, werden erweiterte Schlüssel verwendet. Momentan wird das nicht verwendet, aber es ermöglich das manuelle Durchsuchen der MongoDB-Datenbank. Sie sollten die Option nur aktivieren, wenn es unbedingt erforderlich ist.
Einen Cache einer Cache-Speicher-Instanz zuordnen
Wenn Sie einen Cache einer Cache-Speicher-Instanz zuordnen, dann teilen Sie Moodle mit, für den Cache eine bestimmte Speicher-Instanz zu verwenden. So kann die Moodle-Administration kontrollieren, wo Informationen zwischengespeichert werden und somit die Geschwindigkeit zu verbessern, indem sie die bestmöglichen Speicheroptionen bereitstellt.
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und suchen Sie im Abschnitt Bekannte Cachedefinitionen nach dem Cache, den Sie zuordnen möchten. Klicken Sie in der zugehörigen letzten Spalte auf den Link Bearbeiten.
Wählen Sie den Primären Speicher: Das ist der erste Speicher, der beim Caching verwendet wird. Wählen Sie den Endgültigen Speicher: Das ist der letzte Cache-Speicher, der verwendet wird.
Wenn dem Cache keine Cache-Speicher-Instanz zugeordnet wurde, dann werden die Standard-Cache-Speicher verwendet.
Wenn dem Cache eine einzelne Cache-Speicher-Instanz zugeordnet wurde, dann passiert folgendes:
- Daten aus dem Cache holen
- Moodle verlangt vom Cache, Daten zu holen. Der Cache versucht, diese Daten aus dem Cache-Speicher zu holen. Der Cache-Speicher übergibt die Daten an den Cache und der Cache übergibt die Daten an Moodle. Wenn der Cache-Speicher die Daten nicht liefern kann, erzeugt Moodle die Daten neu und schickt sie an den Cache zum Zwischenspeichern.
- Daten im Cache speichern
- Moodle schickt Daten zum Cache, um sie zu speichern. Der Cache schickt die Daten weiter an den Cache-Speicher.
Wenn dem Cache mehrere Cache-Speicher-Instanzen zugeordnet wurden, dann passiert folgendes:
- Daten aus dem Cache holen
- Moodle verlangt vom Cache, Daten zu holen. Der Cache versucht, diese Daten aus dem ersten Cache-Speicher zu holen. Wenn der erste Cache-Speicher diese Daten gespeichert hat, übergibt übergibt er sie an den Cache und der Cache übergibt die Daten an Moodle. Wenn der erste Cache-Speicher die Daten nicht liefern kann, dann wird der zweite Cache-Speicher angefragt. Wenn der zweite Cache-Speicher die Daten hat, übergibt er sie an den ersten Cache-Speicher, der die Daten speichert, bevor er sie an den Cache übergibt. Wenn auch der zweite Cache-Speicher die Daten nicht hat, wird der nächste Daten-Speicher angefragt, solange bis die Daten gefunden sind oder der letzte Cache-Speicher erreicht ist.
- Daten im Cache speichern
- Moodle schickt Daten zum Cache, um sie zu speichern. Der Cache schickt die Daten weiter an alle zugeordneten Cache-Speicher.
Der Hauptvorteil von mehreren Cache-Speicher-Instanzen ist, dass Cache-Redundanzen erzeugt werden. Das bedeutet jedoch einen kleinen Zusatzaufwand.
Beispiel für den Vorteil von mehreren Cache-Speicher-Instanzen:
- Szenario:
- Sie haben einen Web-Server, der eine Moodle-Site und andere Web-Anwendungen bereitstellt. Außerdem haben Sie einen Memcache-Server, der für verschiedene Web-Anwendungen genutzt wird, u.a. für Moodle. Memcache hat eine begrenzte Cache-Größe. Wenn dieser Platz voll ist und weitere Daten zwischengespeichert werden sollen, dann wird der zuletzt gespeicherte Eintrag gelöscht. Sie wollen Memcache für Ihre Moodle-Site verwenden, weil es schnell ist. Ihnen ist jedoch bewusst, dass Cache-Zugriffe erfolglos sind, weil der Memcache-Server eine hohe Last hat.
- Lösung:
- Verwenden Sie zwei Cache-Speicher-Instanzen, die Sie Memcache zuordnen. Wählen Sie Memcache als Primären Speicher und den Standard-Cache-Speicher als Endgültigen Speicher
- Erklärung:
- Auf diese Weise erzeugen Sie Redundanz. Wenn eine Anfrage erfolgt, dann versucht Moodle zuerst, die Daten von Memcache zu holen (der schnellste Speicher) und wenn das fehlschlägt, dann wird der Datei-Cache geprüft.
Weitere interessante Punkte sind:
- Das Zuordnen von mehreren Cache-Speicher-Instanzen erzeugt eine gewisse zusätzliche Last. Die Last ist umso größer, je mehr Instanzen verwendet werden.
- Testen Sie Ihre Konfiguration immer ausgiebig! Aktivieren Sie die Geschwindigkeits-Info-Anzeige Performance auf der Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Entwicklung > Debugging und beobachten Sie, welche Cache-Speicher von Moodle verwendet werden.
Speicherort definieren wenn keine Definition erstellt wurde
Das ist die Stelle, an der Sie die Standard-Cache-Speicher definieren, wenn keine Zuordnung definiert ist.
Gehen Sie auf die Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Plugins > Caching > Konfiguration und klicken Sie ganz unten unter dem Abschnitt Speicherort wenn keine Definition erstellt wurde auf den Link Bearbeiten.
Wählen Sie für jeden Cache-Typ einen Standard-Speicher. Dieser wird verwendet, wenn der entsprechende Cache von Moodle angefordert wird und keine Zuordnung definiert wurde.
Caching für Ihre Moodle-Site konfigurieren
Das ist die Stelle, an der es wirklich kompliziert wird, und leider gibt es keine Schritt-für-Schritt-Anleitung für diesen Prozess.
Wir stellen jedoch ein paar Tipps und Tricks bereit:
- Planen Sie gut. Caching ist eine komplexe Sache. Versuchen Sie, Ihre Moodle-Site und Ihre Server-Umgebung zu verstehen und überlegen Sie, wie Ihre Nutzer/innen Moodle nutzen.
- Wenn Sie eine kleine Moodle-Site betreiben, dann müssen Sie sich nicht um das Caching kümmern. Bei großen Moodle-Sites können Sie durch eine gute Cache-Konfiguration signifikante Geschwindigkeitsverbesserungen erreichen.
- Wenn Sie nach geeigneten Cache-Backends suchen, prüfen Sie die Vor- und Nachteile der einzelnen Optionen (immer mit Blick auf Ihre Moodle-Site und wie diese genutzt wird).
- Normalerweise ist es nicht einfach damit getan, ein Cache-Backend auszuwählen, zu installieren und dann zu verwenden. Wichtig ist eine passende Konfiguration - versuchen Sie diese für Ihr System zu optimieren. Testen Sie die Konfiguration außerhalb von Moodle. Der Cache ermöglicht es, Last von der Datenbank zu nehmen. Wenn Sie z.B. Memcache installiert haben, aber Ihre Verbindungen nicht dafür optimiert sind, dann sind Sie auf verlorenem Posten, noch bevor Sie irgend etwas in Moodle konfiguriert haben.
- Bedenken Sie, dass Ihre Standard-Cache-Speicher-Instanzen mit Datenmengen verschiedener Größen und Anfragehäufigkeiten arbeiten müssen. Bei großen Moodle-Sites schauen Sie sich jede Cache-Definition einzeln an und wählen Sie die bestmögliche Zuordnung einer Cache-Speicher-Instanz. Siehe auch cache-Definitionen (englisch).
- Behalten Sie bei der Zuordnung den Cache, der dahinterliegt.
- Testen Sie Ihre Konfiguration, am besten auch unter großer Last. Aktivieren Sie dazu die Geschwindigkeits-Info-Anzeige Performance auf der Seite Website-Administration (oder im Block Einstellungen) > Website-Administration) > Entwicklung > Debugging. Auf diese Weise können Sie den verwendeten Cache beobachten.
- Beobachten Sie auch das Cache-Backend außerhalb von Moodle. Memcache überschreibt z.B. die zuletzt gespeicherten Daten, wenn der Speicher voll ist und Platz für neue Einträge benötigt wird. APC dagegen speichert keine weiteren Einträge, wenn der Platz voll ist. Beides hat Einfluss auf die Geschwindigkeit, wenn kein Paltz mehr vorhanden ist.
Mehr zu Geschwindigkeits-Tests
Hier sind zwei Links für alle, die diese neue Funktionalität auf ihren eigenen Servern testen wollen:
- Moodle performance testing: how much more horsepower do each new versions of Moodle require?
- How to load test your Moodle server using Loadstorm
Hinweise für load-balancierte Web-Server
Beachten Sie folgende Hinweise, wenn Sie load-balancierte Web-Server verwenden:
- Ab Moodle 2.4 verwenden Sie NICHT die Standard-Cache-Einstellung, die Daten im Moodle-Datenverzeichnis auf einem Netzlaufwerk speichert. Verwenden Sie stattdessen Memcached. Siehe dieser Artikel von Tim Hunt (englisch).
- Ab Moodle 2.6 stellen Sie sicher, dass die Variable
$CFG->localcachedir
in der Moodle-Konfigurationsdatei config.php auf ein lokales Verzeichnis zeigt. Das beschleunigt das Caching, das außerhalb des MUCs passiert, z.B. das Caching von Designs, Javascript, Bibliotheken usw.
Weitere Informationen
Mehr Informationen finden Sie in der englischen (Entwickler-)Dokumentation:
- Cache-Definitionen
- Cache API (für Entwickler/innen)
- Cache API - Quick reference Kurzbeschreibung der Cache API
- Moodle Universal Cache (MUC) - Cache-Spezifikation
Cache-spezifische Diskussionsbeiträge im Kurs Using Moodle auf moodle.org:
- MUC is here, now what?
- Status of MUC?
- Putting cachedir on local disks in cluster
- moodle cachestore_file
Siehe auch
- MUC FAQ
- MUC is here, now what? - Diskussionsbeitrag im Kurs Using Moodle auf moodle.org
Entwickler-Dokumentation: