SlideShare ist ein Scribd-Unternehmen logo
Cache me if you can
  Caching im Web-Umfeld
Wer?
● Mario Müller (@xenji / http://www.xenji.com)
● Works @trivago_com
● Likes: @mongodb, @go_nuts


● Andy Grunwald (@andygrunwald / http:
  //andygrunwald.com)
● Works @wmdbsystems
● Likes: @blankomat, @devops_borat
Um was gehts?

● Speicherung von

  ○   (mehr oder weniger aufwendig)
      berechneten Daten

  ○   großen Datenmengen

  ○   wiederkehrenden Daten
Layer

● Unter Verwendung von
  ○ Level 1 Caches
       ● z. B. XCache oder APC


  ○   Level 2 Caches
         ● Memcache, Redis, MongoDB


  ○   Anderer Caches
        ● Der Client (Browser, Rich-Client)
        ● HTTP Caches
Ziele

● Zum Erreichen von

  ○   schnelleren, bzw. garantierten
      Antwortzeiten

  ○   geringerem, bzw. verteiltem
      Rechenaufwand

  ○   geringerer Übertragungsmenge
Warum ist Caching denn so geil?
● Weil Rechnen teuer ist
● Weil RAM billig ist
● Weil gecach'te Architekturen besser
  skalieren

+ Musketier Prinzip "Einer für alle", einer
Rechnet, alle haben etwas davon.
Wir betrachten heute drei Stufen des
                                 Cachings.




                                                          st
                                                        ue
               st
           ue




                                                    eq
          eq




                                                    R
                                  st
      R




                                                m
                               ue
     em




                                             de
                              eq
 rd




                                            h
                          R




                                          ac
Vo




                         Im




                                         N
Vor dem Request
Wer nicht rein kommt, macht keinen Dreck
Varnish to the rescue!
Requests garnicht erst ankommen lassen...
Varnish ist ...
●   ein Reverse Proxy Server
●   ein HTTP Cache
●   verdammt schnell
●   Open-Source
●   erprobt und bei vielen schon im Einsatz
●   die einzige Open-Source Lösung für Edge
    Side Includes (ESI)

Symfony2 unterstütz ESI und damit auch
Varnish von Haus aus. Varnish kann aber auch
allen anderen Web Applikationen helfen!
Varnish ggn. Apache
Requests: 1.000 - Concurrency: 1
- Apache: 9.97 Requests per Second (RAM:50% CPU:100%)
- Varnish:3003.98 Requests per Second (RAM:50%CPU:5%)

Requests: 1.000 - Concurrency: 10
- Apache: 10.60 Requests per Second (RAM:95% CPU:100%)
- Varnish: 6391.29 Requests per Second (RAM:50% CPU:10%)

Requests:10.000 - Concurrency: 100
- Apache: Absturz
- Varnish: 6179.76 Requests per Second (RAM:55% CPU:15%)

Quelle: http://www.slideshare.net/papst23/n3rd-4-speed
Im Request
Andere von der Rechenarbeit profitieren
               lassen
Backend Caching
 Schneller dran kommen...
Cache - Types (Auszug)
● Query Result Cache
  ○   Speichert die reinen DB Ergbnisse von teueren Queries
  ○   Kann in der Applikation beliebig umher gereicht werden, da es
      Rohdaten sind.
● pre-render Cache
  ○   Vorberechnete Werte, meist auf DB oder Webservice Ergebnissen
      basierend
  ○   Kann meistens nur die direkt verbundene Business - Logik nutzen
● Output Cache
  ○   Fertiges HTML, JSON, XML, etc.
  ○   Gut um Last von Servern zu nehmen für Dinge die sich selten ändern
      oder explizit neu berechnet werden können
Große Herausforderungen
● In welchen Cache Layer soll es?

● Wer oder was sagt an, dass ein Cache
  invalide ist?

● Wann wird der Cache neu befüllt?
  ○ Erste Anfrage nach Invalidierung oder
  ○ beim Invalidieren oder
  ○ durch einen Cronjob?

● Wer muss wissen, dass die Daten gecached
  sind? (Architektur - Frage)
Was macht man beim Backend
Caching ?
● Beten, dass alles so wieder raus kommt, wie
  man es rein gesteckt hat
  (Problem von verteilten, konkurrierenden Caches)

● Alles was nur irgendwie geht vorberechnen

● Aufpassen,
  ○ dass das Cache Management nicht die
    ursprüngliche Ersparnis aufbraucht
  ○ dass man auch ohne Cache weiter leben kann.
    (Ausfallszenarien)
Was gibt es und was kann
  man damit machen?
        Cache stores
Von einer relationalen DB zu ..
● Memcached (Key / Value Store)
  ○   Level 2 Cache
  ○   Schnellste wo gibt (meistens)
  ○   Einfach zu implementieren
  ○   Reiner In-Memory Store (=> Server weg, Daten
      weg)
● Redis
  ○   Level 2 Cache
  ○   Wahrscheinlich schneller als Memcached (?)
  ○   Einfach zu implementieren
  ○   Mächtiger als Memcached + persistent
Von einer relationalen DB zu ..
● MongoDB
  ○ Eigenständige, mächtige Document DB
  ○ Kann Level 2 sein oder vollständiger Ersatz
  ○ Performance abhängig vom Nutzungsszenario


Alle aufgelisteten Server können zusammen
mit einer bestehenden MySQL verwendet
werden, Einige können mehr Logik vertragen
als Andere.
Beispieldaten
Wir nehmen uns die "employee database", eine
Demo Datenbank mit ca. 3,2 Mio. Zeilen,
Hm, und nu?
● Wir schauen uns Quellcode an

● Wir probieren den Quellcode aus

=> Live Demo
Nach dem Request
So viel wie geht beim Client lassen
Frontend Caching
Gar nicht erst laden lassen...
Einige Zahlen
● Top 1000 Pages: Durchschnittlich >50
  Resources per page

● http://www5.mercedes-benz.com/de/
  ○ 161 Requests
  ○ 9,48 MB transferred (1. Hit)
  ○ 1,4 Min @ DSL 700 (1. Hit)

  ○ 24,09 KB transferred (2. Hit)
  ○ 5,54 Sek @ DSL 700 (2. Hit)
HTTP Standard und der Rest
● Status Codes

● MIME types

● Expires headers

● ETag

● Minify und concat

● gzip
Status Codes
● 200 OK

● 204 No Content

● 301 Moved Permanently

● 304 Not Modified

● 404 Not Found

● More codes: https://github.com/joho/7XX-rfc
MIME types
● Bekannt aus Film und Fernsehen z.B. HTML
  ○ <form accept="" enctype="">
  ○ <script type="">
  ○ <style type="">

● Server und Client halten "defaults" vor

● Lösung: Vereinheitlichung (via AddType)
Expires headers
● Wann läuft eine Ressource ab?

● Grundlage: Standardisierte MIME types

● Far far away? Depends!
  ExpiresByType text/html                "access plus 0 seconds"
  ExpiresByType text/css                 "access plus 1 year"
  ExpiresByType application/javascript   "access plus 1 year"
  ExpiresByType application/xml          "access plus 0 seconds"
  ExpiresByType application/json         "access plus 0 seconds"
Assets Versionierung
● Doof        :(
<link rel="stylesheet" type="text/css" href="style.css">

● Gut         :|
<link rel="..." type="text/css" href="style.css?131920563">

● Besser :)
<link rel="..." type="text/css" href="style.131920563.css">
Das "böse böse " Entity tag
● Server / Client-Kommunikation

● Hash-Wert im HTTP-Header

● Problematisch bei mehreren Servern zur
  Auslieferung von Assets (Inode)
● Problematisch bei IIS
  ○ Filetimestamp:ChangeNumber

● Lösung: Ausschalten ;)
Entity tag
Entity tag
Minify und concat
● Entfernen von "überflüssigen" Zeichen
● Zusammenfassen von Resourcen

● jQuery
  ○ 247KB, Uncompressed
  ○ 83KB, Compressed (Google Closure, ohne gzip)
  ○ 31Kb, Compressed (Google Closure, mit gzip)

● Google Closure Compiler
● YUI Compressor
● Apache mod_pagespeed
deflate & gzip
● Server packt die Daten zusammen
● Client entpackt die Daten
● Muss vom Client + Server unterstützt
  werden

● Header
  ○ Accept-Encoding (Client)
  ○ Content-Encoding (Server)

● Wunderwaffe? Nein! Einsatz Depends!
Theorie hin oder her ... Testing?!

●   Mozilla: about:cache

●   Mozilla Addon: YSlow

●   Chrome: Developer Tools
Weitere Themen ...
● Cache Manifest

● Local Storage

● SQLite im Browser

● Inline Bilder (base64)

● and many more ...
SQLite im Browser
● Kann Cache sein, kann auch mehr sein

● Übersetzungstexte für die Browser Locale

● Applikationseinstellungen bei
  Individualisierung

● Der Zustand der Seite beim window.
  onunload

● Asset Caching (CSS, JS)
Google sagt ...




    https://developers.google.com/speed/
Tools, Links und Resourcen
● YSlow
● https://github.com/h5bp/html5-boilerplate
● http://danbeam.org/blog/2011/05/06/script-
  not-a-type-ical-tag/
● http://www.websiteoptimization.
  com/speed/tweak/average-web-page/
● http://www.stevesouders.
  com/blog/2008/08/23/revving-filenames-
  dont-use-querystring/
● https://github.com/joho/7XX-rfc
● http://developer.yahoo.

Weitere ähnliche Inhalte

Andere mochten auch

Informalmarketingverdaderoooo2 130802141739-phpapp02
Informalmarketingverdaderoooo2 130802141739-phpapp02Informalmarketingverdaderoooo2 130802141739-phpapp02
Informalmarketingverdaderoooo2 130802141739-phpapp02
Iván Moreno
 
Que canten
Que cantenQue canten
Que canten
ZonaReligion
 
Trastornos alimenticios
Trastornos alimenticiosTrastornos alimenticios
Trastornos alimenticios
Emilio Armando Acosta
 
Las matemáticas en nuestras vidas
Las matemáticas en nuestras vidasLas matemáticas en nuestras vidas
Las matemáticas en nuestras vidas
kelim38
 
Cuadernillo mat 2_sec_web
Cuadernillo mat 2_sec_webCuadernillo mat 2_sec_web
Cuadernillo mat 2_sec_web
Emilio Armando Acosta
 
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
metropolsolar
 
Operaciones con entradas y salidas
Operaciones con entradas y salidasOperaciones con entradas y salidas
Operaciones con entradas y salidas
Victor Mijangos
 
Segundo indicador de desempeño III Periodo
Segundo indicador de desempeño III PeriodoSegundo indicador de desempeño III Periodo
Segundo indicador de desempeño III Periodo
MarquezEspinosa
 
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
metropolsolar
 
El ser humano es un ser cultural
El ser humano es un ser culturalEl ser humano es un ser cultural
El ser humano es un ser cultural
Lilian Yuliza Sanchez Serna
 
Pres web
Pres webPres web
Pres web
SENAComunica
 
Instructivo convenciones directorios
Instructivo convenciones directoriosInstructivo convenciones directorios
Instructivo convenciones directorios
Partido Liberal Colombiano
 
Comunicacion
ComunicacionComunicacion
Comunicacion
cesarnelson
 
Tics
TicsTics
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
metropolsolar
 
Wikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
Wikis Und Blogs Als Neue Wissenschaftliche ArbeitsinstrumenteWikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
Wikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
Thomas Wolf
 
Presentación tutor
Presentación tutorPresentación tutor
Presentación tutor
monica_medina
 
Power point 3 evaluacio
Power point 3 evaluacioPower point 3 evaluacio
Power point 3 evaluacio
ManuTanase
 
164 201109050937
164 201109050937164 201109050937
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
metropolsolar
 

Andere mochten auch (20)

Informalmarketingverdaderoooo2 130802141739-phpapp02
Informalmarketingverdaderoooo2 130802141739-phpapp02Informalmarketingverdaderoooo2 130802141739-phpapp02
Informalmarketingverdaderoooo2 130802141739-phpapp02
 
Que canten
Que cantenQue canten
Que canten
 
Trastornos alimenticios
Trastornos alimenticiosTrastornos alimenticios
Trastornos alimenticios
 
Las matemáticas en nuestras vidas
Las matemáticas en nuestras vidasLas matemáticas en nuestras vidas
Las matemáticas en nuestras vidas
 
Cuadernillo mat 2_sec_web
Cuadernillo mat 2_sec_webCuadernillo mat 2_sec_web
Cuadernillo mat 2_sec_web
 
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
Vortrag Kappenstein - Forum 9 - Energieeffizienz und -sparen - VOLLER ENERGIE...
 
Operaciones con entradas y salidas
Operaciones con entradas y salidasOperaciones con entradas y salidas
Operaciones con entradas y salidas
 
Segundo indicador de desempeño III Periodo
Segundo indicador de desempeño III PeriodoSegundo indicador de desempeño III Periodo
Segundo indicador de desempeño III Periodo
 
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
Vortrag Finger - Forum 4 - Windkraft - VOLLER ENERGIE 2013 - Regionale Steuer...
 
El ser humano es un ser cultural
El ser humano es un ser culturalEl ser humano es un ser cultural
El ser humano es un ser cultural
 
Pres web
Pres webPres web
Pres web
 
Instructivo convenciones directorios
Instructivo convenciones directoriosInstructivo convenciones directorios
Instructivo convenciones directorios
 
Comunicacion
ComunicacionComunicacion
Comunicacion
 
Tics
TicsTics
Tics
 
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
Vortrag Langen - Forum 3 - Beteiligungsprozesse und Gesamtkonzepte - VOLLER E...
 
Wikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
Wikis Und Blogs Als Neue Wissenschaftliche ArbeitsinstrumenteWikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
Wikis Und Blogs Als Neue Wissenschaftliche Arbeitsinstrumente
 
Presentación tutor
Presentación tutorPresentación tutor
Presentación tutor
 
Power point 3 evaluacio
Power point 3 evaluacioPower point 3 evaluacio
Power point 3 evaluacio
 
164 201109050937
164 201109050937164 201109050937
164 201109050937
 
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
Vortrag Schulze - Forum 10 - Mobilität - VOLLER ENERGIE 2013
 

Ähnlich wie Cache me if you can

DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance Tuning
FromDual GmbH
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
FromDual GmbH
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHP
Thomas Burgard
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
Sebastian Springer
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
Mayflower GmbH
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
FromDual GmbH
 
Skalieren einer Web Anwendung
Skalieren einer Web Anwendung Skalieren einer Web Anwendung
Skalieren einer Web Anwendung
Jonathan Weiss
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
AOE
 
Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
Florian Holzhauer
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12
Stefan Frömken
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Jörn Dinkla
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
NETWAYS
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für China
Johann-Peter Hartmann
 
Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQL
FromDual GmbH
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
Blogwerk AG
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
Patrick Paechnatz
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
Jan Gehring
 

Ähnlich wie Cache me if you can (20)

NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
DOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance TuningDOAG 2011: MySQL Performance Tuning
DOAG 2011: MySQL Performance Tuning
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHP
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQLInternet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
Internet Briefing 2010: Performance Tuning & Scale-Out mit MySQL
 
Skalieren einer Web Anwendung
Skalieren einer Web Anwendung Skalieren einer Web Anwendung
Skalieren einer Web Anwendung
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012Varnish PHP Unconference Hamburg 2012
Varnish PHP Unconference Hamburg 2012
 
Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12Präsentation MySQL auf dem T3CM12
Präsentation MySQL auf dem T3CM12
 
in memory datenbanken
in memory datenbankenin memory datenbanken
in memory datenbanken
 
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDASchulung: Einführung in das GPU-Computing mit NVIDIA CUDA
Schulung: Einführung in das GPU-Computing mit NVIDIA CUDA
 
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas GelfOSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
OSMC 2011 | Monitoring at large - die Welt ist nicht genug by Thomas Gelf
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
RoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für ChinaRoofTop Brains & BBQ: Ein Gästbuch für China
RoofTop Brains & BBQ: Ein Gästbuch für China
 
Data Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQLData Warehouse (DWH) with MySQL
Data Warehouse (DWH) with MySQL
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
Docker Workbench
Docker WorkbenchDocker Workbench
Docker Workbench
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 

Cache me if you can

  • 1. Cache me if you can Caching im Web-Umfeld
  • 2. Wer? ● Mario Müller (@xenji / http://www.xenji.com) ● Works @trivago_com ● Likes: @mongodb, @go_nuts ● Andy Grunwald (@andygrunwald / http: //andygrunwald.com) ● Works @wmdbsystems ● Likes: @blankomat, @devops_borat
  • 3. Um was gehts? ● Speicherung von ○ (mehr oder weniger aufwendig) berechneten Daten ○ großen Datenmengen ○ wiederkehrenden Daten
  • 4. Layer ● Unter Verwendung von ○ Level 1 Caches ● z. B. XCache oder APC ○ Level 2 Caches ● Memcache, Redis, MongoDB ○ Anderer Caches ● Der Client (Browser, Rich-Client) ● HTTP Caches
  • 5. Ziele ● Zum Erreichen von ○ schnelleren, bzw. garantierten Antwortzeiten ○ geringerem, bzw. verteiltem Rechenaufwand ○ geringerer Übertragungsmenge
  • 6. Warum ist Caching denn so geil? ● Weil Rechnen teuer ist ● Weil RAM billig ist ● Weil gecach'te Architekturen besser skalieren + Musketier Prinzip "Einer für alle", einer Rechnet, alle haben etwas davon.
  • 7. Wir betrachten heute drei Stufen des Cachings. st ue st ue eq eq R st R m ue em de eq rd h R ac Vo Im N
  • 8. Vor dem Request Wer nicht rein kommt, macht keinen Dreck
  • 9. Varnish to the rescue! Requests garnicht erst ankommen lassen...
  • 10. Varnish ist ... ● ein Reverse Proxy Server ● ein HTTP Cache ● verdammt schnell ● Open-Source ● erprobt und bei vielen schon im Einsatz ● die einzige Open-Source Lösung für Edge Side Includes (ESI) Symfony2 unterstütz ESI und damit auch Varnish von Haus aus. Varnish kann aber auch allen anderen Web Applikationen helfen!
  • 11. Varnish ggn. Apache Requests: 1.000 - Concurrency: 1 - Apache: 9.97 Requests per Second (RAM:50% CPU:100%) - Varnish:3003.98 Requests per Second (RAM:50%CPU:5%) Requests: 1.000 - Concurrency: 10 - Apache: 10.60 Requests per Second (RAM:95% CPU:100%) - Varnish: 6391.29 Requests per Second (RAM:50% CPU:10%) Requests:10.000 - Concurrency: 100 - Apache: Absturz - Varnish: 6179.76 Requests per Second (RAM:55% CPU:15%) Quelle: http://www.slideshare.net/papst23/n3rd-4-speed
  • 12. Im Request Andere von der Rechenarbeit profitieren lassen
  • 13. Backend Caching Schneller dran kommen...
  • 14. Cache - Types (Auszug) ● Query Result Cache ○ Speichert die reinen DB Ergbnisse von teueren Queries ○ Kann in der Applikation beliebig umher gereicht werden, da es Rohdaten sind. ● pre-render Cache ○ Vorberechnete Werte, meist auf DB oder Webservice Ergebnissen basierend ○ Kann meistens nur die direkt verbundene Business - Logik nutzen ● Output Cache ○ Fertiges HTML, JSON, XML, etc. ○ Gut um Last von Servern zu nehmen für Dinge die sich selten ändern oder explizit neu berechnet werden können
  • 15. Große Herausforderungen ● In welchen Cache Layer soll es? ● Wer oder was sagt an, dass ein Cache invalide ist? ● Wann wird der Cache neu befüllt? ○ Erste Anfrage nach Invalidierung oder ○ beim Invalidieren oder ○ durch einen Cronjob? ● Wer muss wissen, dass die Daten gecached sind? (Architektur - Frage)
  • 16. Was macht man beim Backend Caching ? ● Beten, dass alles so wieder raus kommt, wie man es rein gesteckt hat (Problem von verteilten, konkurrierenden Caches) ● Alles was nur irgendwie geht vorberechnen ● Aufpassen, ○ dass das Cache Management nicht die ursprüngliche Ersparnis aufbraucht ○ dass man auch ohne Cache weiter leben kann. (Ausfallszenarien)
  • 17. Was gibt es und was kann man damit machen? Cache stores
  • 18. Von einer relationalen DB zu .. ● Memcached (Key / Value Store) ○ Level 2 Cache ○ Schnellste wo gibt (meistens) ○ Einfach zu implementieren ○ Reiner In-Memory Store (=> Server weg, Daten weg) ● Redis ○ Level 2 Cache ○ Wahrscheinlich schneller als Memcached (?) ○ Einfach zu implementieren ○ Mächtiger als Memcached + persistent
  • 19. Von einer relationalen DB zu .. ● MongoDB ○ Eigenständige, mächtige Document DB ○ Kann Level 2 sein oder vollständiger Ersatz ○ Performance abhängig vom Nutzungsszenario Alle aufgelisteten Server können zusammen mit einer bestehenden MySQL verwendet werden, Einige können mehr Logik vertragen als Andere.
  • 20. Beispieldaten Wir nehmen uns die "employee database", eine Demo Datenbank mit ca. 3,2 Mio. Zeilen,
  • 21. Hm, und nu? ● Wir schauen uns Quellcode an ● Wir probieren den Quellcode aus => Live Demo
  • 22. Nach dem Request So viel wie geht beim Client lassen
  • 23. Frontend Caching Gar nicht erst laden lassen...
  • 24. Einige Zahlen ● Top 1000 Pages: Durchschnittlich >50 Resources per page ● http://www5.mercedes-benz.com/de/ ○ 161 Requests ○ 9,48 MB transferred (1. Hit) ○ 1,4 Min @ DSL 700 (1. Hit) ○ 24,09 KB transferred (2. Hit) ○ 5,54 Sek @ DSL 700 (2. Hit)
  • 25. HTTP Standard und der Rest ● Status Codes ● MIME types ● Expires headers ● ETag ● Minify und concat ● gzip
  • 26. Status Codes ● 200 OK ● 204 No Content ● 301 Moved Permanently ● 304 Not Modified ● 404 Not Found ● More codes: https://github.com/joho/7XX-rfc
  • 27. MIME types ● Bekannt aus Film und Fernsehen z.B. HTML ○ <form accept="" enctype=""> ○ <script type=""> ○ <style type=""> ● Server und Client halten "defaults" vor ● Lösung: Vereinheitlichung (via AddType)
  • 28. Expires headers ● Wann läuft eine Ressource ab? ● Grundlage: Standardisierte MIME types ● Far far away? Depends! ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds"
  • 29. Assets Versionierung ● Doof :( <link rel="stylesheet" type="text/css" href="style.css"> ● Gut :| <link rel="..." type="text/css" href="style.css?131920563"> ● Besser :) <link rel="..." type="text/css" href="style.131920563.css">
  • 30. Das "böse böse " Entity tag ● Server / Client-Kommunikation ● Hash-Wert im HTTP-Header ● Problematisch bei mehreren Servern zur Auslieferung von Assets (Inode) ● Problematisch bei IIS ○ Filetimestamp:ChangeNumber ● Lösung: Ausschalten ;)
  • 33. Minify und concat ● Entfernen von "überflüssigen" Zeichen ● Zusammenfassen von Resourcen ● jQuery ○ 247KB, Uncompressed ○ 83KB, Compressed (Google Closure, ohne gzip) ○ 31Kb, Compressed (Google Closure, mit gzip) ● Google Closure Compiler ● YUI Compressor ● Apache mod_pagespeed
  • 34. deflate & gzip ● Server packt die Daten zusammen ● Client entpackt die Daten ● Muss vom Client + Server unterstützt werden ● Header ○ Accept-Encoding (Client) ○ Content-Encoding (Server) ● Wunderwaffe? Nein! Einsatz Depends!
  • 35. Theorie hin oder her ... Testing?! ● Mozilla: about:cache ● Mozilla Addon: YSlow ● Chrome: Developer Tools
  • 36. Weitere Themen ... ● Cache Manifest ● Local Storage ● SQLite im Browser ● Inline Bilder (base64) ● and many more ...
  • 37. SQLite im Browser ● Kann Cache sein, kann auch mehr sein ● Übersetzungstexte für die Browser Locale ● Applikationseinstellungen bei Individualisierung ● Der Zustand der Seite beim window. onunload ● Asset Caching (CSS, JS)
  • 38. Google sagt ... https://developers.google.com/speed/
  • 39. Tools, Links und Resourcen ● YSlow ● https://github.com/h5bp/html5-boilerplate ● http://danbeam.org/blog/2011/05/06/script- not-a-type-ical-tag/ ● http://www.websiteoptimization. com/speed/tweak/average-web-page/ ● http://www.stevesouders. com/blog/2008/08/23/revving-filenames- dont-use-querystring/ ● https://github.com/joho/7XX-rfc ● http://developer.yahoo.