Caching: Unterschied zwischen den Versionen

Aus MoodleDocs
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
 
(27 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Geschwindigkeit}}
{{Geschwindigkeit}}
{{Zum Überarbeiten}}
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.
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.


Zeile 64: Zeile 61:
Cache-Speicher sind ein Plugin-Typ in Moodle. Sie stellen die Verbindung von Moodle zum Cache-Backend wie oben beschrieben her.
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 und MongoDB.
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 [https://moodle.org/plugins/browse.php?list=category&id=48 Moodle-Plugins.Datenbank]. Der Code für diese Plugins befindet sich im Moodle-Verzeichnis ''moodle/cache/stores''.
Weitere Cache-Speicher-Plugins finden Sie in der [https://moodle.org/plugins/browse.php?list=category&id=48 Moodle-Plugins.Datenbank]. Der Code für diese Plugins befindet sich im Moodle-Verzeichnis ''moodle/cache/stores''.
Zeile 73: Zeile 70:
* Datei-Cache: Dieser wird für alle Anwendungs-Caches verwendet. Er speichert Daten im [[Moodle-Datenverzeichnis]].
* 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.
* 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 Lebensdauer der Anfrage im RAM gespeichert.
* 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?===
===Cache: Was passiert im Code?===
Caches are created in code and are used by the developer to store data they see a need to cache.<br />
Caches werden im Code erzeugt und verwendet, um Daten zwischenzuspeichern.
Lets keep this section nice and short because perhaps you are not a developer. There is one very important point you must know about.<br />
 
The developer does not get any say in where the data gets cached. They must specify the following information when creating a cache to use.
Wenn Entwickler/innen im Code einen Cache erzeugen wollen, müssen sie folgende Informationen angeben:
# The type of cache they require.
# den Cache-Typ
# The area of code this cache will belong to (the API if you will).
# den Codeabschnitt, zum dem der Cache gehört  (die API)
# The name of the cache, something they make up to describe in one word what the cache stores.
# den Cache-Namen, aus dem hervorgeht, was dieser Cache zwischenspeichert
 
Darüber hinaus gibt es weitere optionale Informationen, die angegeben werden können.


There are several optional requirements and settings they can specify as well, but don't worry about that at this point.<br />
'''Wichtig''': Entwickler/innen können nur den Cache-Typ angeben, aber nicht welches Cache-Backend verwendet wird.
The important point is that they can't choose which cache backend to use, they can only choose the type of cache they want from the three detailed above.


===Wie passt alles zusammen?===
===Wie passt alles zusammen?===


This is best described in relation to roles played in an organisation.
# Die System-Administration installiert die Cache-Backends, die Sie verwenden wollen: Memcache, XCache, APC usw.<br />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. <br/>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.<br/>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.<br />Diese Zuordnung teilt Moodle mit, welches Cache-Backend verwendet werden soll.


# The system administrator installs the cache backends you wish to use. Memcache, XCache, APC and so on.<br />Moodle doesn't know about these, they are outside of Moodle's scope and purely the responsibility of your system administrator.
Darüber hinaus können Sie folgendes tun:
# The Moodle administrator creates a cache store instance in Moodle for each backend the site will make use of.<br />There can be one or more cache stores instances for each backend. Some backends like Memcached have settings to create separated spaces within one backend.
* Sie können mehrere Caches einer einzigen Cache-Speicher-Instanz zuordnen.
# The developer has created caches in code and is using them to store data.<br />He doesn't know anything about how you will use your caches, he just creates a "cache" and tells Moodle what type it is best for it.
* Sie können mehrere Cache-Speicher-Instanzen einem einzigen Cache zuordnen (mit Prioritäten: erster, ..., letzter).
# The Moodle administrator creates a mapping between a cache store instance and a cache.<br />That mapping tells Moodle to use the backend you specify to store the data the developer wants cached.
* Sie können eine Cache-Speicher-Instanz als Standard-Cache für einen bestimmten Cache-Typ festlegen.


In addition to that you can take things further still.
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).
* You can map many caches to a single cache store instance.
* You can map multiple cache store instances to a single cache with priority (primary ... final)
* You can map a cache store instance to be the default store used for all caches of a specific type that don't otherwise have specific mappings.
 
If this is the first time you are reading about the Moodle Universal Cache this probably sounds pretty complex but don't worry it will be discussed in better detail as we work through how to configure the caching in Moodle.


==Erweiterte Cache-Konzepte==
==Erweiterte Cache-Konzepte==
These concepts are things that most sites will not need to know or concern themselves about.
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.


You should only start looking here if you are looking to maximise performance on large sites running over clustered services with shared cache backends, or on multi-site architecure again where information is being shared between sites.
===Sperren (Locking)===
Die Idee des Sperrens ist nicht neu, hier geht es um die Zugriffskontrolle bei gleichzeitigen Zugriffen.


===Locking===
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.


The idea of locking is nothing new, it is the process of controlling access in order to avoid concurrency issues.
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.


MUC has a second type of plugin, a cache lock plugin that gets used when caches require it. To date no caches have required it. A cache by nature is volatile and any information that is absolutely mission critical should be a more permanent data store likely the database.
===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.


Nonetheless there is a locking system that cache definitions can require within their options and that will be applied when interacting with a cache store instance.
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.


===Sharing===
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:


Every bit of data that gets stored within a cache has a calculated unique key associated with it.<br />
; 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.
By default part of that key is the site identifier making any content stored in the cache specific to the site that stored it. For most sites this is exactly what you want.<br />
; Moodle-Sites mit derselben Version: Alle Moodle-Sites mit derselben Moodle-Version, die auf das Backend zugreifen, können die Information im Cache teilen.
However in some situations its beneficial to allow mutiple sites, or somehow linked sites to share cached data.<br />
; 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.  
Of course not all caches can be shared, however some certainly can and by sharing you can further reduce load and increase performance by maximising resource use.
; 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.


This is an advanced feature, if you choose to configure sharing please do so carefully.
'''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.


To make use of sharing you need to first configure identical cache store instances in the sites you want to share information, and then on each site set the sharing for the cache to the same value.
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.
 
; Sites with the same site ID : This is the default, it allows for sites with the same site ID to share cached information. It is the most restrictive but is going to work for all caches. All other options carry an element of risk in that you have to ensure the information in the cache is applicable to all sites that will be accessing it.
; Sites running the same version : All sites accessing the backend that have the same Moodle version can share the information this cache has stored in the cache store.
; Custom key : For this you manually enter a key to use for sharing. You must then enter the exact same key into the other sites you want to share information.
; Everyone : The cached data is accessible to all other sites accessing the data. This option puts the ball entirely in the Moodle administrators court.
 
As an example if you had several Moodle sites all the same version running on server with APC installed you could decide to map the language cache to the APC store and configure sharing for all sites running the same version.<br />
The language cache for sites on the same version is safe to share in many situations, it is used on practically every page, and APC is extremely fast. These three points may result in a nice wee performance boost for your sites.<br />
It is important to consider with the language cache that by sharing it between sites any language customisations will also be shared.


==Cache-Konfiguration==
==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.


The cache configuration screen is your one stop shop for configuring caching in Moodle.<br />
===Zugriff auf die Cache-Konfigurationsseite===
It gives you an overview of how caching is currently configured for your site and it provides links to all of the actions you can perform to configure caching to your specific needs.
Die Moodle-Administration hat Zugriff auf die Cache-Konfigurationsseite: ''Website-Administration'' (oder im Block ''[[Einstellungen-Block|Einstellungen]]) > Website-Administration'')'' > Plugins > Caching > Konfiguration''.
 
===Zugriff auf die Cache-Konfiguration===
 
[[Image:cacheadmin29.png|thumb|500px|The cache configuration screen]]
 
The cache configuration screen can only be accessed by users with the ''moodle/site:config'' capability. By default this is only admins.<br />
Once logged in the configuration screen can be found in  '''Site Administration > Plugins > Caching > Configuration'''.


===Installierte Cache-Speicher===
===Installierte Cache-Speicher===
[[Image:cache0.jpg|600px]]


[[Image:ist29.png|thumb|500px|Installed cache stores screenshot]]
In diesem Abschnitt sehen Sie alle Cache-Speicher-Plugins, die installiert sind.


This is showing you a list of cache store plugins that you have installed.<br />
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.
For each plugin you can quickly see whether it is ready to be used (any php requirements have been met), how many store instances already exist on this site, the cache types that this store can be used for, what features it supports (advanced) and any actions you can perform relating to this store.


Often the only action available is to create a new store instance.<br />
Häufig ist die einzige verfügbare Aktivität diese: ''Instanz hinzufügen''.
Most stores support having multiple instances, however not all as you will see that that the session cache and static request cache do not. For those two stores it does not make sense to have multiple instances.


===Speicher-Instanzen konfigurieren===
===Speicher-Instanzen konfigurieren===


[[Image:csi29.png|thumb|500px|Configured store instances screenshot]]
[[Image:cache2.jpg|600px]]


Here you get a list of the cache store instances on this site.
Hier sehen Sie die Liste der Cache-Speicher-Instanzen Ihrer Moodle-Site:


; '''Store name''' : The name given to this cache store instance when it is created so that you can recognise it. It can be anything you want and is only used so that you can identify the store instance.
; '''Speichername''': Name der Cache-Speicher-Instanz - kann beliebig sein, dient nur zur Identifizierung.
; '''Plugin''' : The cache store plugin of which this is an instance of.
; '''Plugin''': Cache-Speicher-Plugin, das zu dieser Instanz gehört - gibt den Cache-Typ an.
; '''Ready''' : A tick gets shown when all PHP requirements have been met as well as any connection or set-up requirements have been verified.
; '''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.  
; '''Store mappings''' : The number of caches this store instance has been mapped to explicitly. Does not include any uses through default mappings (discussed below).
; '''Speicher-Zuordnungen''': Anzahl der Caches, die dieser Cache-Instanz zugeordnet wurden (ohne die Standardzuordnungen, siehe unten).
; '''Modes''' : The modes that this cache store instance can serve.
; '''Modi''': Modi, die diese Instanz bedienen kann.
; '''Supports''' :  The features supported by this cache store instance.
; '''Unterstützungen''':  Funktionalitäten, die diese Instanz unterstützt.
; '''Locking ''' : Locking is a mechanism that restricts access to cached data to one process at a time to prevent the data from being overwritten. The locking method determines how the lock is acquired and checked.
; '''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 ).
; '''Actions''' : Any actions that can be performed against this cache store instance.
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 Cache-Definitionen===
===Bekannte Cachedefinitionen===


[[Image:caching-27-04-known-cache-definitions.png|thumb|500px|Known cache definitions screenshot]]
[[Image:cache3.jpg|600px]]


The idea of a cache definition hasn't been discussed here yet. It is something controlled by the developer. When they create a cache they can do so in two ways, the first is by creating a cache definition. This is essentially telling Moodle about the cache they've created. The second way is to create an Adhoc cache. Developers are always encouraged to use the first method. Only caches with a definition can be mapped and further configured by the admin. Adhoc caches will make use of default settings only.<br />
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:
Typically Adhoc caches are only permitted in situations where the cache is small and configuring it beyond defaults would provide no benefit to administrators. Really its like saying you the administrator doesn't need to concern yourself with it.
#Erstellen einer Cache-Definition: Damit wird Moodle das Wichtigste zu diesem Cache mitgeteilt.
#Erstellen eines Adhoc-Caches.


For each cache shown here you get the following information:
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.


; '''Definition''' : A concise description of this cache.
In diesem Abschnitt sehen Sie zu jeder Cache-Definition folgende Informationen:
; '''Mode''' : The cache type this cache is designed for.
;'''Definition''': Prägnante Beschreibung des Caches
; '''Component''' : The code component the cache is associated with.
; '''Modus''': Cache-Typ
; '''Area''' : The area of code this cache is serving within the component.
; '''Komponente''': Moodle-Komponente, zu der der Cache gehört
; '''Store mappings''' : The store or stores that will be used for this cache.
; '''Bereich''': Code-Abschnitt, der den Cache innerhalb der Komponente verwendet
; '''Sharing''' : How is sharing configured for this site.
; '''Speicher-Zuordnungen''': Cache-Typen, die dieser Cache verwendet
; '''Actions''' : Any actions that can be performed on the cache. Typically you can edit the cache store instance mappings, edit sharing, and purge the cache.
; '''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'')


You'll also find at the bottom of this table a link title "Rescan definitions". Clicking this link will cause Moodle to go off an check all core components, and installed plugins looking for changes in the cache definitions.<br />
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.
This happens by default during upgrade, and if a new cache definition is encountered. However should you find yourself looking for a cache that isn't there this may be worth a try.<br />
It is also handy for developers as it allows them to quickly apply changes when working with caches. It is useful when tweaking cache definitions to find what works best.


Information on specific cache definitions can be found on the [[Cache definitions]] page.
Weitere Information zu Cache-Definitionen finden Sie in [[:en:Cache definitions|diesem Artikel]] (englisch).


===Zusammenstellung der Speicher-Sperr-Instanzen===
===Zusammenstellung der Speicher-Sperr-Instanzen===
[[Image:cache4.jpg|600px]]


[[Image:caching-27-05-summary-of-cache-lock-instances.png|thumb|500px|Summary of cache lock instances screenshot]]
Wie bereits oben erwähnt ist das Sperren eine erweiterte Funktionalität des MUC.  


As mentioned above cache locking is an advanced concept in MUC.<br />
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.
The table here shows information on the configured locking mechanisms available to MUC. By default just a single locking mechanism is available, file locking.
 
At present there are no caches that make use of this and as such I won't discuss it further here.
Bisher gibt es jedoch keinen Cache, der Sperrung verwendet.


===Speicherort wenn keine Definition erstellt wurde===
===Speicherort wenn keine Definition erstellt wurde===
[[Image:cache5.jpg|600px]]


[[Image:caching-27-06-stores-used-when-no-mapping-is-present.png|thumb|500px|Mapping of default stores screenshot]]
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.


This table quickly shows which cache store instances are going to be used for cache types if there are no specific mappings in place.<br />
Unterhalb der Liste  finden Sie einen Link ''Bearbeiten''. Anklicken führt zu einer Seite, auf der Sie die Liste bearbeiten können.
To simplify that, this show the default cache stores for each type.
 
At the bottom you will notice there is a link "Edit mappings" that takes you to a page where you can configure this.


==Cache-Speicher-Instanzen hinzufügen==
==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.
The default configuration is going to work for all sites, however you may be able to improve your sites performance by making use of various caching backends and techniques. The first thing you are going to want to do is add cache store instances configured to connect to/use the cache backends you've set up.


===Datei-Cache===
===Datei-Cache===
[[Image:cache6.jpg|400px]]


[[Image:caching-27-07-add-file-cache-store.png|thumb|300px|Adding a file cache store screenshot]]
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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'').
 
When on the cache configuration screen within the ''Installed cache stores'' table you should be able to see the File cache plugin, click ''`Add instance`'' to start the process of adding a file cache store instance.
 
When creating a file cache there is in fact only one required param, the store name. The store name is used to identify the file store instance in the configuration interface and must be unique to the site.
It can be anything you want, but we would advice making it something that describes you intended use of the file store.
 
The following properties can also be specified, customising where the file cache will be located, and how it operates.
 
; '''Cache path''' : Allows you to specify a directory to use when storing cache data on the file system. Of course the user the webserver is running as must have read/write access to this directory. By default (blank) the Moodledata directory will be used.
; '''Auto create directory''' : If enabled when the cache is initialised if the specified directory does not exist Moodle will create it. If this is specified and the directory does not exist the the cache will be deemed not ready and will not be used.
; '''Single directory store''' : By default the file store will create a subdirectory structure to store data in. The first 3 characters of the data key will be used as a directory. This is useful in avoiding file system limits it the file system has a maximum number of files per directory. By enabling this option the file cache will not use subdirectories for storage of data. This leads to a flat structure but one that is more likely hit file system limits. Use with care.
; '''Prescan directory''' : One of the features the file cache provides is to prescan the storage directory when the cache is first used. This leads to faster checks of files at the expense of an in-depth read.


The file cache store is the default store used for application caches and by default the moodledata directory gets used for the cache.
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.
File access can be a taxing resource in times of increased load and the following are some ideas about configuring alternative file stores in order to improve performance.


First up is there a faster file system available for use on your server.<br />
Zusätzlich können Sie weitere Einstellungen vornehmen:
Perhaps you've an SSD installed but are not using it for your moodledata directory because space is a premium.<br />
; '''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.
You should consider creating a directory or small partition on your SSD and creating a file store to use that instead of your Moodle data directory.
; '''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.


Next you've not got a faster drive available for use, but you do have plenty of free space.<br />
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:
Something that may be worth giving a shot would be to create a small partition on the drive you've got installed that uses a performance orientated file system.<br />
* 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.
Many linux installations these days for example use EXT4, a nice file system but one that has overheads due to the likes of journalling.<br />
* 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.
Creating a partition and using a file system that has been optimised for performance may give you that little boost you are looking for. Remember caches are designed to be volatile and choosing a file system for a cache is different decision to choosing a file system for your server.<br />
* Wenn Sie genügend Speicherkapazität auf Ihrem Server haben, können Sie ramdisk/tmpfs verweden und den Datei-Cache darauf verweisen.


Finally if you're ready to go to lengths and have an abundance of memory on your server you could consider creating a ramdisk/tmpfs and pointing a file store at that.
Beachten Sie , dass alle Möglichkeiten nur Ideen zum Ausprobieren sind. Egal wofür Sie sich entscheiden, testen Sie gründlich!
Purely based in memory, it is volatile exactly like the cache is, and file system performance just isn't going to get much better than this.<br />
Of course you will be limited in space and you are essentially taking that resource away from your server.
 
Please remember with all of these ideas that they are just ideas.<br />
What ever you choose - test, test, test, be sure of the decision you make.


===Memcache===
===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.


[[Image:caching-27-08-add-memcache-store.png|thumb|300px|Add Memcache store screenshot]]
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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'').


Before you can add a Memcache store instance you must first have a Memcached server you can access and have the Memcache php extension installed and enabled on your web server.
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.


Like the file store you must provide a the store name. It is used to identify the store instance in the configuration interface and must be unique to the site.<br />
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.
For a Memcache store you must also enter the Memcache server, or servers you wish it to make use of.
Sie können mehrere Server angeben: Verwenden Sie dann pro Server eine Zeile.
Servers should be added one per line and each line can contain 1 to 3 properties separated by colons.
# The URL or IP address of the server (required)
# The port the server is listening on (optional)
# The weight to give this server (optional)


For example, if you had two Memcached instances running on your server, one configured for the default port, and one configured for 11212 you would use the following:
'''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:
<code>
<code>
127.0.0.1
127.0.0.1
Zeile 270: Zeile 233:
</code>
</code>


Optionally you can also specify a key prefix to use. What you enter here will prefixed to all keys before accessing the server and can be used to effectively partition the Memcache space in a recognisable way. This can be handy if you have a management tool for you Memcached server that you use to inspect what is stored there.
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.


'''Important implementation notes'''
'''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.  
* The Memcache extension does not provide a means of deleting a set or entries. Either a single entry is deleted, or all entries are deleted.<br />Because of this it is important to note that when you purge a Memcache store within Moodle it deletes ALL entries in the Memcache backend. Not just those relating to Moodle.<br />For that reason it is highly recommended to use dedicated Memcached servers and to '''NOT''' configure any other software to use those servers. Doing so may lead to performance depreciation and adverse affects.
* 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!
* Likewise if you want to use Memcache for caching and for sessions in Moodle it is essential to use two Memcached servers. One for sessions, and one for caching. Otherwise a cache purge in Moodle will purge your sessions!


===Memcached===
===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.


[[Image:caching-27-09-add-memcached-store.png|thumb|300px|Add Memcached store screenshot]]
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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'').


Like the Memcache store you must first have a Memcached server you can access and have the Memcached php extension installed and enabled on your server.
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.


Also like the Memcache store there are two required parameters in configuring a Memcached store.
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.


; '''Store name''' : It is used to identify the store instance in the configuration interface and must be unique to the site.
'''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:
; '''Servers''' : The servers you wish this cache store use. See below for details.
 
Servers should be added one per line and each line can contain 1 to 3 properties separated by colons.
# The URL or IP address of the server (required)
# The port the server is listening on (optional)
# The weight to give this server (optional)
 
For example, if you had two Memcached instances running on your server, one configured for the default port, and one configured for 11212 you would use the following:
<code>
<code>
127.0.0.1
127.0.0.1
Zeile 299: Zeile 255:
</code>
</code>


There are also several optional parameters you can set when creating a Memcached store.
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. [https://github.com/igbinary/igbinary 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 [http://www.php.net/manual/en/memcached.constants.php 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.  


; '''Use compression''' : Defaults to true, but can be disabled if you wish.
'''Wichtige Hinweise''':
; '''Use serialiser''' : Allows your to select which serialiser gets used when communicating with the Memcache server. By default the Memcached extension and PHP only provide one serialised, however there is a couple of others available for installation if you go looking for them. One for example is the igbinary found at https://github.com/igbinary/igbinary.
* 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.  
; '''Prefix key''' : Allows you to set some characters that will be prefixed to all keys before interacting with the server.
* 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!
; '''Hash method''' : The hash method provided by the Memcached extension is used by default here. However you can select to use an alternative if you wish. http://www.php.net/manual/en/memcached.constants.php provides a little information on the options available. Please note if you wish to you can also override the default hash function PHP uses within your php.ini.
; '''Buffer writes''' : Disabled by default, and for good reason. Turning on buffered writes will minimise interaction with the Memcached server by buffering io operations. The downside to this is that on a system with any concurrency there is a good chance multiple requests will end up generating the data because no one had pushed it to the Memcached server when they first requested it. Enabling this can be advantageous for caches that are only accessed in capability controlled areas for example where multiple interaction is taking a toll on network resources or such. But that is definitely on the extreme tweaking end of the scale.
 
'''Important implementation notes'''
 
* The Memcached extension does not provide a means of deleting a set or entries. Either a single entry is deleted, or all entries are deleted.<br />
Because of this it is important to note that when you purge a Memcached store within Moodle it deletes ALL entries in the Memcached server. Not just those relating to Moodle.<br />
For that reason it is highly recommended to use dedicated Memcached servers and to '''NOT''' configure any other software to use the same servers. Doing so may lead to performance depreciation and adverse affects.
* Likewise if you want to use Memcached for caching and for sessions in Moodle it is essential to use two Memcached servers. One for sessions, and one for caching. Otherwise a cache purge in Moodle will purge your sessions!


===MongoDB===
===MongoDB===
MongoDB ist eine Open Source orientierte NoSQL-Datenbank. Detaillierte Informationen finden Sie unter www.mongodb.org.


[[Image:caching-27-10-add-mongodb-store.png|thumb|300px|Add MongoDB store screenshot]]
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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'').
 
MongoDB is an open source document orientated NoSQL database. Check out their website www.mongodb.org for more information.
 
; '''Store name''' : Used to identify the store instance in the configuration interface and must be unique to the site.
; '''Server''' : This is the connection string for the server you want to use. Multiple servers can be specified using a comma-separated list.
; '''Database''' : The name of the database to make use of.
; '''Username''' : The username to use when making a connection.
; '''Password''' : The password of the user being used for the connection.
; '''Replica set''' : The name of the replica set to connect to. If this is given the master will be determined by using the ismaster database command on the seeds, so the driver may end up connecting to a server that was not even listed.
; '''Use''' : If enabled the usesafe option will be used during insert, get, and remove operations. If you've specified a replica set this will be forced on anyway.
; '''Use safe value''' : You can choose to provide a specific value for use safe. This will determine the number of servers that operations must be completed on before they are deemed to have been completed.
; '''Use extended keys''' : If enabled full key sets will be used when working with the plugin. This isn't used internally yet but would allow you to easily search and investigate the MongoDB plugin manually if you so choose. Turning this on will add an small overhead so should only be done if you require it.
 
==Mapping a cache to a store instance==
 
[[Image:caching-27-11-store-mapping.png|thumb|300px|Cache definition store mapping screenshot]]
 
Mapping a store instance to a cache tells Moodle to use that store instance when the cache is interacted with. This allows the Moodle administrator to control where information gets stored and to most importantly optimise performance of your site by making the most of the resources available to your site.
 
To set a mapping first browse to the cache configuration screen.<br />
Proceed to find the ''Known cache definitions'' table and within it find the cache you'd like to map.
In the actions column select the link for '''Edit mappings'''.
 
The screen you are presented allows you to map one or more cache store instances to be used by this cache.<br />
You are presented with several drop-downs that allow you to map one or more cached. All mapped caches get interacted with. The "Primary" store is the store that will be used first when interacting with the cache.
The "Final" mapped store will be the last cache store interacted with.<br />
How this interaction occurs is documented below.
 
If no stores are mapped for the cache then the default stores are used. Have a look at the section below for information on changing the default stores.
 
If a single store instance is mapped to the cache the following occurs:
; ''Getting data from the cache'' : Moodle asks the cache to get the data. The cache attempts to get it from the store. If the store has it it gives it to the cache, and the cache gives it to Moodle so that it can use the data. If the store doesn't have it the a fail is returned and Moodle will have to generate the data and will most likely then send it to the cache.
; ''Storing data in the cache'' : Moodle will ask the cache to store some data, and the cache will give it to the cache store.
 
If multiple store instances are mapped to the cache the following occurs:
; ''Getting data from a store'' : Moodle asks the cache to get the data. The cache attempts to get it from the first store. If the first store has it then it returns the data to the cache and the cache returns it to Moodle. If the first store doesn't have the data then it attempts to get the data from the second store. If the second store has it it returns it to the first store that then stores it itself before returning it to the cache. If it doesn't then the next store is used. This continue until either the data is found or there are no more stores to check.
; ''Storing data in the cache'' : Moodle will ask the cache to store some data, the cache will give it to every mapped cache store for storage.
 
The main advantage to assigning multiple stores is that you can introduce cache redundancy. Of course this introduces an overhead so it should only be used when actually required.
The following is an example of when mapping multiple stores can provide an advantage:
<pre>
Scenario:
You have have a web server that has a Moodle site as well as other sites.
You also have a Memcache server that is used by several sites including Moodle.
 
Memcache has a limited size cache, that when full and requested to store more information frees space by dropping the least used cache entries.
 
You want to use Memcache for your Moodle site because it is fast, however you are aware that it may introduce more cache misses because it is a heavily used Memcache server.


Solution:
Sie können folgende Einstellungen vornehmen:
To get around this you map two stores to caches you wish to use Memcache.
; '''Speichername''':  Dieser Name wird verwendet, um die Instanz auf der Cache-Konfigurationsseite zu identifizieren. Der Name der Cache-Instanz muss eindeutig sein.
You make Memcache the primary store, and you make the default file store the final cache store.
; '''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.


Explanation:
==Einen Cache einer Cache-Speicher-Instanz zuordnen==
By doing this you've created redundancy, when something is requested Moodle first tries to get it from Memcache (the fastest store) and if its not there it proceeds to check the file cache.
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.
</pre>
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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''.


Just a couple more points of interest:
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.


* Mapping multiple caches will introduce overhead, the more caches mapped the more overhead.
Wenn dem Cache keine Cache-Speicher-Instanz zugeordnet wurde, dann werden die Standard-Cache-Speicher verwendet.
* Consider the cache stores you are mapping to, if data remains there once set then there is no point mapping any further stores after it. This technique is primarily valuable in situations where data is not guaranteed to remain after being set.
* Always test your configuration. Enable the display of performance information and then watch which stores get used when interacting with Moodle in such a way as to trigger the cache.


==Setting the stores that get used when no mapping is present==
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.


[[Image:caching-27-12-default-store-mapping.png|thumb|300px|Setting which stores get used when no mapping is present screenshot]]
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.


This is really setting the default stores that get used for a cache type when there is not a specific mapping that has been made for it.
Der Hauptvorteil von mehreren Cache-Speicher-Instanzen ist, dass Cache-Redundanzen erzeugt werden. Das bedeutet jedoch einen kleinen Zusatzaufwand.


To set a mapping first browse to the cache configuration screen.<br />
'''Beispiel für den Vorteil von mehreren Cache-Speicher-Instanzen''':
Proceed to find the ''Stores used when no mapping is present'' table.<br />
After the table you will find a link '''Edit mappings''', click this.


On the screen you are presented with you can select one store for each cache type to use when a cache of the corresponding type gets initialised and there is not an explicit mapping for it.
:'''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.


Note that on this interface the drop downs only contain store instances that are suitable for mapping to the type.
:'''Lösung''':
Not all instances will necessarily be shown. If you have a store instance you don't see then it is not suitable for '''ALL''' the cache definitions that exist.<br />
: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''
You will not be able to make that store instance the default, you will instead need to map it explicitly to each cache you want/can use it for.


==Configuring caching for your site==
:'''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.


This is where it really gets tricky, and unfortunately there is no step-by-step guide to this.
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-Block|Einstellungen]]) > Website-Administration'')'' > Entwicklung > Debugging'' und beobachten Sie, welche Cache-Speicher von Moodle verwendet werden.


How caching can be best configured for a site comes down entirely to the site in question and the resources available to it.
==Speicherort definieren wenn keine Definition erstellt wurde==
Das ist die Stelle, an der Sie die Standard-Cache-Speicher definieren, wenn keine Zuordnung definiert ist.


What can be offered are some tips and tricks to get you thinking about things and to perhaps introduce ideas that will help you along the way.
Gehen Sie auf die Seite ''Website-Administration'' (oder im Block ''[[Einstellungen-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''.


If you are reading this document and you've learnt a thing or two about configuring caching on your site share your learnings by adding to the points here.
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.


* Plan it. It's a complex thing. Understand your site, understand your system, and really think how users will be using it all.
==Caching für Ihre Moodle-Site konfigurieren==
* If you've got a small site the gains aren't likely to be significant, if you've got a large site getting this right can lead to a substantial boost in performance.
Das ist die Stelle, an der es wirklich kompliziert wird, und leider gibt es keine Schritt-für-Schritt-Anleitung für diesen Prozess.
* When looking at cache backends really research the advantages and disadvantages of each. Keep your site in mind when thinking about them. Depending upon your site you may find that no one cache backend is going to meet the entire needs of your site and that you will benefit from having a couple of backends at your disposal.
* Things aren't usually as simple as installing a cache backend and then using it. Pay attention to configuration and try to optimise it for your system. Test it separately and have an understanding of its performance before tell Moodle about it. The cache allows you to shift load off the database and reduce page request processing.<br />If for instance you have Memcache installed but your connection has not been optimised for it you may well find yourself in a losing situation before you even tell Moodle about the Memcache server.
* When considering your default store instances keep in mind that they must operate with data sets of varying sizes and frequency. For a large site really your best bet is to look at each cache definition and map it to a store that is best suited for the data it includes and the frequency of access.<br />Cache definitions have been documented [[Cache definitions]].
* Again when mapping store instances to caches really think about the cache you are mapping and make a decision based upon what you understand of your site and what you know about the cache.<br />Cache definitions have been documented [[Cache definitions]].
* Test your configuration. If you can stress test it even better! If you turn on performance information Moodle will also print cache access information at the bottom of the screen. You can use this to visually check the cache is being used as you expect, and it will give you an indication of where misses etc are occurring.
* Keep an eye on your backend. Moodle doesn't provide a means of monitoring a cache backend and that is certainly something you should keep an eye on. Memcache for instance drops least used data when full to make room for new entries. APC on the other hand stops accepting data when full. Both will impact your performance if full and you're going to encounter misses. However APC when full is horrible, but it is much faster.


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 [[:en:Cache definitions|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-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===
===Mehr zu Geschwindigkeits-Tests===
Zeile 422: Zeile 348:




===Performance advice for load-balanced web servers===
===Hinweise für load-balancierte Web-Server===
 
Beachten Sie folgende Hinweise, wenn Sie load-balancierte Web-Server verwenden:
# In Moodle 2.4 onwards with load-balanced web servers, don't use the default caching option that stores the data in moodledata on a shared network drive.   Use memcached instead.   See Tim Hunt's article on http://tjhunt.blogspot.de/2013/05/performance-testing-moodle.html
# 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 [http://tjhunt.blogspot.de/2013/05/performance-testing-moodle.html dieser Artikel von Tim Hunt] (englisch).
# In Moodle 2.6 onwards make sure you set $CFG->localcachedir to some local directory in config.php (for each node)This will speed up some of the disk caching that happens outside of MUC, such as themes, javascript, libraries etc.
# Ab Moodle 2.6 stellen Sie sicher, dass die Variable <code>$CFG->localcachedir</code> 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.


==Troubleshooting==
==Weitere Informationen==
Mehr Informationen finden Sie in der englischen (Entwickler-)Dokumentation:
* [[:en:Cache definitions|Cache-Definitionen]]
* [[:dev:Cache API|Cache API]] (für Entwickler/innen)
* [[:dev:Cache API - Quick reference|Cache API - Quick reference]] Kurzbeschreibung der Cache API
* [[:dev:The Moodle Universal Cache (MUC)|Moodle Universal Cache (MUC)]] - Cache-Spezifikation


Have you encountered a problem, or found yourself in a conundrum? Perhaps the answer is in this section. If its not when you find have an answer how about sharing it here.


==More information==
Cache-spezifische Diskussionsbeiträge im Kurs ''Using Moodle'' auf moodle.org:
* [[Cache definitions]] Information on the cache definitions found within Moodle.
* [[:dev:Cache API|Cache API]] Details of the Cache API.
* [[:dev:Cache API - Quick reference|Cache API - Quick reference]] A short, code focused page of on the Cache API.
* [[:dev:The Moodle Universal Cache (MUC)|The Moodle Universal Cache (MUC)]] The original cache specification.
 
 
Cache related forum discussions that may help in understanding MUC:
* [https://moodle.org/mod/forum/discuss.php?d=217195 MUC is here, now what?]  
* [https://moodle.org/mod/forum/discuss.php?d=217195 MUC is here, now what?]  
* [https://moodle.org/mod/forum/discuss.php?d=226123 Status of MUC?]
* [https://moodle.org/mod/forum/discuss.php?d=226123 Status of MUC?]
* [https://moodle.org/mod/forum/discuss.php?d=222250 Putting cachedir on local disks in cluster]
* [https://moodle.org/mod/forum/discuss.php?d=222250 Putting cachedir on local disks in cluster]
* [https://moodle.org/mod/forum/discuss.php?d=232122 moodle cachestore_file]
* [https://moodle.org/mod/forum/discuss.php?d=232122 moodle cachestore_file]
Other:
* [http://jfilip.ca/2013/08/20/moodle-2-4-5-vs-2-5-1-performance-and-muc-apc-cache-store/ Moodle 2.4.5 vs. 2.5.1 performance and MUC APC cache store] blog post by Justin Filip


==Siehe auch==
==Siehe auch==
Zeile 459: Zeile 378:


[[en:Caching]]
[[en:Caching]]
[[es:Cacheando]]

Aktuelle Version vom 26. März 2019, 16:16 Uhr

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

  1. Setzen Sie eine Test-Umgebung auf, die so nah wie möglich an Ihre produktive Moodle-Site herankommt (Hardware, Software, Netzwerk, usw.)
  2. Löschen Sie alle nicht benötigten Variablen in dieser Test-Umgebung (z.B. nicht benötigte Dienste und Services).
  3. Verwenden Sie ein Werkzeug, das eine realisitische, simulierte und reproduzierbare Last auf dem Test-Server erzeugt (z.B. jmeter oder selenium).
  4. Überlegen Sie, wie Sie die Geschwindigkeit messen wollen, d.h. welche Daten Sie beobachten wollen (RAM, Last, verbrauchte Zeit usw.).
  5. Lassen Sie den Test-Server unter dieser definierten Last laufen und messen Sie die Geschwindigkeit.
  6. Ä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.
  7. 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:

  1. den Cache-Typ
  2. den Codeabschnitt, zum dem der Cache gehört (die API)
  3. 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?

  1. 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.
  2. 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.
  3. 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.
  4. 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

cache0.jpg

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

cache2.jpg

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

cache3.jpg

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:

  1. Erstellen einer Cache-Definition: Damit wird Moodle das Wichtigste zu diesem Cache mitgeteilt.
  2. 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

cache4.jpg

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

cache5.jpg

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

cache6.jpg

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:


Hinweise für load-balancierte Web-Server

Beachten Sie folgende Hinweise, wenn Sie load-balancierte Web-Server verwenden:

  1. 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).
  2. 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-spezifische Diskussionsbeiträge im Kurs Using Moodle auf moodle.org:

Siehe auch

Entwickler-Dokumentation: