Caching-Lösungen für Plone Oberseminar Content Management mit Plone/Zope Hochschule für Technik, Wirtschaft und Kultur Leipzig Fakultät Informatik, Mathematik und Naturwissenschaften 30. November 2010
Caching allgemein Motivation Oft benötigte Inhalte für einen schnelleren / leichteren Zugriff bereitstellen Ressourcen zur Bereitstellung von Inhalten einsparen Inhalte dezentralisieren
Caching allgemein Probleme Aktualität der Caches Effizienzoptimierung durch geschickte Verdrängungsstrategien Aufwärmen des Caches Größe Schnelligkeit des Caches
Caching auf Plone bezogen Besonderheiten Konstruktion der ausgelieferten Seiten ggf. aufwändig Möglichst seltene Generierung der auszuliefernden Seiten Von Vorteil: bausteinbasiertes Caching
Arbeitsweise von Caches Cache Hits und Cache Misses Bewertung von Anfragen als Cache Hit oder Cache Miss Cache Hit = Die Anfrage konnte aus dem Cache beantwortet werden Cache Miss = Die Anfrage konnte nicht aus dem Cache beantwortet werden Mögliches Qualitätskriterium für die Wirksamkeit eines Caches Hit Rate r h = n n h h... Anzahl Cache Hits n h +n m n m... Anzahl Cache Misses
Arbeitsweise von Caches Verdrängungsstrategien Behandlung der Frage, welcher alte Cache-Eintrag von einem neuen verdrängt werden soll FIFO (First In First Out) = Der älteste Eintrag wird verdrängt LRU (Last Recently Used) = Der Eintrag, welcher am längsten nicht gelesen wurde, wird verdrängt Random = Ein zufälliger Eintrag wird verdrängt Optimal = Es wird immer der Eintrag verdrängt, auf den danach am längsten nicht zugegriffen werden wird (setzt Kenntnis des weiteren Zugriffsverlaufs voraus) Weitere...
Produkte zur Caching-Konfiguration plone.app.caching Tools zum Verwalten des Cachingverhaltens CacheFU Plone 2.x, 3 plone.app.caching Plone 4 zahlreiche Konfigurationsmöglichkeiten zentrale Steuerung der Cache-Parameter Einbindung Caching-bezogener HTTP Header in die ausgelieferten Dokumente Wirkung auf externen Cache Einbindung von Proxies (Squid, Varnish, Pound, etc.)
Produkte zur Caching-Konfiguration Installation plone.app.caching 1 eggs = 2 plone. app. caching 3... 4 extends = buildout.conf 5 http :// good -py. appspot. com / release / plone. app. caching /1.0 b1 /bin/buildout ausführen Aktivierung in Add-Ons/Erweiterungen im Plone-Setup Neuer Unterpunkt Caching im Konfigurationsmenü
Caching-Einstellungen in Plone Konfiguration Global settings Abbildung: Global settings
Caching-Einstellungen in Plone Konfiguration Caching proxies Abbildung: Caching proxies
Caching-Einstellungen in Plone Konfiguration In-memory cache Abbildung: In-memory cache
Caching-Einstellungen in Plone Konfiguration Caching operations Abbildung: Caching operations
Weiterführende Möglichkeiten Bereinigung von in einem Proxy gespeicherten Inhalten Abbildung: Purge caching proxy
Weiterführende Möglichkeiten RAM-Cache Statistiken Abbildung: RAM cache statistics
Allgemeines Allgemeines über Varnish Caching-Proxy für 64 bit Systeme mit Linux, FreeBSD oder Solaris Arbeitet auf dem virtuellen Speicher eines Systems Nutzt systemeigene Speicherverwaltung (malloc oder Filesystem) Freie Software, lizensiert unter einer 2-Klausel BSD-Lizenz Bevorzugter HTTP Cache von Facebook 1 1 http://www.varnish-software.com/customers/facebook
Inbetriebnahme Varnish installieren und starten Installationsmöglichkeiten Über den Paketmanager des jeweiligen Systems einfach und sollte bevorzugt werden, wenn möglich Über das Buildout-System von Plone ebenfalls einfach, verstrickt die Komponenten aber unnötig Selbst kompilieren aus dem Quelltext Abhängigkeiten müssen selbst bereitgestellt werden Installation über Paketmanager und Start unter Ubuntu 10.10 1 sudo apt-get install varnish 2 sudo varnishd -f /etc/varnish/default.vcl -s malloc,1g -T 127.0.0.1:2000 -a 0.0.0.0:8080
Inbetriebnahme Varnish installieren und starten Installationsmöglichkeiten Über den Paketmanager des jeweiligen Systems einfach und sollte bevorzugt werden, wenn möglich Über das Buildout-System von Plone ebenfalls einfach, verstrickt die Komponenten aber unnötig Selbst kompilieren aus dem Quelltext Abhängigkeiten müssen selbst bereitgestellt werden Installation über Paketmanager und Start unter Ubuntu 10.10 1 sudo apt-get install varnish 2 sudo varnishd -f /etc/varnish/default.vcl -s malloc,1g -T 127.0.0.1:2000 -a 0.0.0.0:8080
Inbetriebnahme Varnish über Buildout installieren deployment.cfg 1 parts = 2... 3 varnish - build 4 varnish - instance 5... 6 [ varnish - build ] 7 recipe = zc. recipe. cmmi 8 url = ${ varnish - instance : download - url } 9 10 [ varnish - instance ] 11 recipe = plone. recipe. varnish 12 daemon = ${ buildout : parts - directory }/ varnish - build / sbin / varnishd 13 bind = 8000 14 cache - size = 1G 15 config = ${ buildout : directory }/ etc / plone. vcl
Administration Konfigurationsbeispiel (1) default.vcl 1 backend www { 2. host = " www. example. com "; 3. port = "80"; 4 } 5 6 backend images { 7. host = " images. example. com "; 8. port = "80"; 9 }
Administration Konfigurationsbeispiel (2) 11 sub vcl_ recv { default.vcl 12 if ( req. http. host ~ "^( www.)? example. com$ ") { 13 set req. http. host = " www. example. com "; 14 set req. backend = www ; 15 } elsif ( req. http. host ~ "^ images. example. com$ ") { 16 set req. backend = images ; 17 } else { 18 error 404 " Unknown virtual host "; 19 } 20 }
Administration Das textuelle Administrationsinterface varnishadm Benutzung des Administrationsinterfaces 1 root@cache :~# varnishd -f / etc / varnish / default. vcl -s malloc,1g -T 127.0.0.1:2000 -a 0.0.0.0:8080 2 storage_malloc : max size 1024 MB. 3 Using old SHMFILE 4 root@cache :~# varnishadm -T :2000 5 200 154 6 ----------------------------- 7 Varnish HTTP accelerator CLI. 8 ----------------------------- 9 purge. url.* 10 200 0 11 12 quit 13 500 22 14 Closing CLI connection
Squid Squid - ein HTTP-Cache-Proxy
Grundlagen Eckdaten OpenSource HTTP, FTP, SSL (HTTPS) Unterstützung transparentes Caching (WCCP) Loadbalancing differenzierte Rechtevergabe und Zugriffssteuerung (ACLs) Authentifizierung (LDAP, etc.) umfangreiche Protokollierung Bandbreitensteuerung (Delay Pools) für zahlreiche Plattformen verfügbar
Grundlagen Wikipedia
Grundlagen Wikipedia
Grundlagen Installation Installation über Buildout 1 [ squid - build ] 2 recipe = plone. recipe. squid : build 3 url = http :// www. squid - cache. org / Versions /v2 /2.7/ squid -2.7. STABLE9. tar.gz 4 5 [ squid - instance ] 6 recipe = plone. recipe. squid : instance 7 bind = 127.0.0.1:3128 8 backends = 127. 0. 0. 1: 8080 9 cache - size = 1000
Grundlagen Installation /bin/buildout ausführen Anlegen des Caches: /bin/squid -z cache-effective-user: nobody chown -R nobody pfad Start über /bin/squid auf Port 3128
Architekturen Squid als Reverse Cache Nutzung existierender Ressourcen Mehr Anfragen für Inhalte realisierbar Beschleunigung von Zugriffszeiten Transparent bei Nutzung auf Port 80 Inhalte sollten cache aware sein
Architekturen Konfiguration als Reverse Cache 1 # Squid Socket 2 http_ port 3128 accel defaultsite = websitename 3 4 # Squid Instanz + Cache Directory 5 pid_filename / usr / local / Plone / zinstance / var / squid. pid 6 cache_dir ufs / usr / local / Plone / zinstance / var / cache 1000 16 256 7 10 8 # Plone 9 cache_ peer webserver - ip 80 0 no - query originserver name = server_0 11 # ACL 12 acl all src 0.0.0.0/0.0.0.0 13 http_ access allow all 14 # acl our_sites 192.168.0.0/255.255.255.0 15 # http_ access allow our_ sites 16 # http_ access deny all
Architekturen Multipler Cache mit ICP Loadbalancing nutzbar Kommunikation über ICP Vorteile für Caches analog zu Client Cache-Proxy
Cacheverhalten Cacheverhalten Aktualität eines Objekts kann 2 Zustände haben aktuell = fresh nicht mehr aktuell = stale Wie errechnet sich die Aktualität? Einflussfaktoren: Last Modified (LM) Datum der Speicherung im Cache (OBJ Date) Objektalter beim Abspeicherns (LM Age = OBJ Date - LM) Haltbarkeitsfaktor (Percentage) X = OBJ Date + (LM Age*Percentage)
Cacheverhalten Cacheverhalten - HTTP-Header
Benchmarks Benchmarks - Apache Benchmark
Benchmarks Benchmarks - Apache Benchmark
Benchmarks Benchmarks - Siege Belastungstest mit Siege 2 10 min. lang randomisierte Anfragen, parallel 50 User Plone Ressourcen: ca. 100 Images, Public Folder Proxy Transaktionen Daten Rate (Trans./s) Squid 10.529 hits 247.56 MB 17.55 trans/sec Varnish 1.675 hits 40.10 MB 2.79 trans/sec - 788 hits 18.19 MB 1.31 trans/sec 2 Http-Load Tester, http://www.joedog.org/index/siege-home
Vor- und Nachteile von Varnish und Squid Varnish Vorteile schnell Nachteile leichte Installation Performance skaliert mit OS-Weiterentwicklungen Performance abhängig vom OS (keine eigene Speicherimplementierung) keine Cache-Hierarchien möglich
Vor- und Nachteile von Varnish und Squid Squid Vorteile große Community umfangreich dokumentiert flexibel einsetzbar Verbund aus benachbarten Proxys über ICP Nachteile umfangreich dokumentiert je nach Version Syntaxänderungen
Probleme Buildout führte öfters zu Problemen Produkte selten ausgereift Schwierigkeiten beim Aufbau der Testumgebung (Dummysite) Finden eines realistischen Belastungszenarios nicht trivial Konfiguration der Proxys Schwierig (Fülle an Optionen)
Danke Vielen Danke für die Aufmerksamkeit!!! Fragen?