caching on the edge with symfony2

53
Caching on the Edge Fabien Potencier

Upload: fabien-potencier

Post on 15-Jan-2015

20.218 views

Category:

Technology


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Caching on the Edge with Symfony2

Caching on the Edge Fabien Potencier

Page 2: Caching on the Edge with Symfony2

Let’s run some benchmarks ;)

Page 3: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.  Sed  cursus  tortor  quis  dolor  aliquet  accumsan.    Curabitur  convallis  egestas  erat,  et  pharetra  neque  faucibus  vitae.  Integer  at  urna  leo.  Suspendisse  poten;.  Nulla  hendrerit  nisl  sit  amet  lorem  semper  nec  porta  mauris  volutpat.  Curabitur  a  velit  erat,  a  viverra  sem.  Duis  a  eros  nec  diam  faucibus  vehicula  a  sed  orci.  Vivamus  vehicula  dapibus  tellus  in  luctus.  Curabitur  luctus,  lorem  ac  pre;um  pharetra,  nisl  risus  condimentum  mi,  sit  amet  placerat  orci  ante  et  velit.  Vivamus  dapibus  nulla  tempor  metus  tris;que  vel  gravida  purus  pre;um.  Curabitur  suscipit  bibendum  massa,  at  imperdiet  purus  interdum  sit  amet.  Donec  ;ncidunt  porta  dictum.  

cacheable for 10 seconds

comes from DB (simulated)

Page 4: Caching on the Edge with Symfony2

0  

100  

200  

300  

400  

500  

600  

10   30   50   70   90  

symfony  

Symfony2  

requests / second

Page 5: Caching on the Edge with Symfony2

For 10 concurrent users, Symfony2 is 5 times faster than symfony

Page 6: Caching on the Edge with Symfony2

0  

100  

200  

300  

400  

500  

600  

10   30   50   70   90  

symfony  

Symfony2  

requests / second

number of concurrent users

Page 7: Caching on the Edge with Symfony2

For 100 concurrent users, Symfony2 is 11 times faster than symfony

Page 8: Caching on the Edge with Symfony2

What if I add an HTTP accelerator?

Page 9: Caching on the Edge with Symfony2

Symfony2 embraces the HTTP specification

Page 10: Caching on the Edge with Symfony2

HTTP Expiration / HTTP Validation

Page 11: Caching on the Edge with Symfony2

$response->setSharedMaxAge(...); $response->setTtl(...); $response->setMaxAge(...); $response->setClientTtl(...); $response->setExpires(...);

$response->setETag(...); $response->setLastModified(...);

Page 12: Caching on the Edge with Symfony2

Cache-Control: s-maxage=10

Page 13: Caching on the Edge with Symfony2

public function showAction() { // ...

$response = $this->render('...', $vars);

$response->setSharedMaxAge(10);

return $response; }

Page 14: Caching on the Edge with Symfony2

public function showAction() { // ...

$response = $this->createResponse(); $response->setSharedMaxAge(10);

return $this->render( '...', $vars, $response); }

Page 15: Caching on the Edge with Symfony2

Symfony 2 comes built-in with an HTTP accelerator

Page 16: Caching on the Edge with Symfony2

$kernel = new HelloCache( new HelloKernel('prod', false) );

$kernel->handle()->send();

Page 17: Caching on the Edge with Symfony2

Let’s run some benchmarks… again

Page 18: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus.  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.    

cacheable for 10 seconds

comes from DB (simulated)

cacheable for 5 seconds

comes from DB (simulated)

Page 19: Caching on the Edge with Symfony2

0  

100  

200  

300  

400  

500  

600  

10   30   50   70   90  

symfony  

Symfony2  

requests / second

number of concurrent requests

Page 20: Caching on the Edge with Symfony2

For 10 concurrent users, Symfony2 is 8 times faster than symfony

Page 21: Caching on the Edge with Symfony2

For 100 concurrent users, Symfony2 is 85 times faster than symfony

Page 22: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus.  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.    

cacheable for 10 seconds cacheable for 5 seconds

NOT cacheable

main action

component in the layout

layout

Page 23: Caching on the Edge with Symfony2

<?php $view->extend('...:layout') ?>

<?php $view->slots->start('sidebar') ?>

<?php echo $view->actions->render('...:list') ?>

<?php $view->slots->stop() ?>

Lorem ipsum...

Page 24: Caching on the Edge with Symfony2

<?php $view->extend('...:layout') ?>

<?php $view->slots->start('sidebar') ?>

<?php echo $view->actions->render('...:list') ?>

<?php $view->slots->stop() ?>

Lorem ipsum...

cacheable for 10 seconds

cacheable for 5 seconds

Page 25: Caching on the Edge with Symfony2

$view->actions->render('...:list', array( 'standalone' => true, ))

Page 26: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus.  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.    

Page 27: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.    

<esi:include src="..." />

Page 28: Caching on the Edge with Symfony2

ESI… or Edge Side Includes

Page 29: Caching on the Edge with Symfony2

Symf

ony2

Appli

catio

n

Reve

rse Pr

oxy

Clien

t Lorem  ipsum  dolor  sit  amet,    

Lorem  ipsum  dolor  

Lorem  ipsum  dolor  sit  amet,    

Lorem  ipsum  dolor  

1

2

3

4

Page 30: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus.  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Nulla  rutrum  erat  id  neque  suscipit  eu  ultricies  odio  sollicitudin.  Aliquam  a  mi  vel  eros  placerat  hendrerit.  Phasellus  por6tor,  augue  sit  amet  vulputate  venena;s,  dui  leo  commodo  odio,  a  euismod  turpis  ligula  in  elit.    

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.    

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.    

main template

layout

base layout

included page included page

included page

Page 31: Caching on the Edge with Symfony2

Goal Be as dynamic as needed

Hit the application as less as possible

Page 32: Caching on the Edge with Symfony2

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  

P1

P2

10S

10S 5S

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam  

Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel  nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim  por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.  Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.  Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor  est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus  metus,  in  pulvinar  lectus  rutrum  sit  amet.  Duis  gravida,  metus  in  dictum  eleifend,  dolor  risus  ;ncidunt  ligula,  non  volutpat  nulla  sapien  in  elit.  

P3

10S 5S ETag ETag

Expiration

Expiration

Expiration &

Validation

Page 33: Caching on the Edge with Symfony2

symfony app

Web Server

Requests

Response

P1 100 P2 100 P3 100

PHP SF 300

Page 34: Caching on the Edge with Symfony2

symfony app

Web Server

symfony cache

Requests

Response

P1 10 P2 100 P3 100

P1 90

PHP SF 300

Page 35: Caching on the Edge with Symfony2

symfony app

Web Server

symfony cache

Requests

Response

P1 1 P2 100 P3 100

P1 99 No HTTP management!

PHP SF 201

Page 36: Caching on the Edge with Symfony2

Symfony2 app

Web Server

Requests

Response

P1 100 P2 100 P3 100

PHP SF2 300

Page 37: Caching on the Edge with Symfony2

Symfony2 app

Symfony2 HTTP proxy

Web Server

Requests

Response

P1 10 P2 10 + 20 P3 100

P1 90 P2 90

PHP SF2 140 PHP LIGHT 180

Page 38: Caching on the Edge with Symfony2

Symfony2 app

Web Server

Reverse proxy

Requests

Response

P1 10 P2 10 + 20 P3 100

P1 90 P2 90

PHP SF2 140 PHP LIGHT 0

Page 39: Caching on the Edge with Symfony2

The power is even bigger than what you think…

Page 40: Caching on the Edge with Symfony2

$view->actions->render('...:list', array( 'standalone' => true, 'ignore_errors' => true, 'alt' => 'BlogBundle:Post:error' ))

<esi:include src="..." alt="..." on-error="ignore" />

Page 41: Caching on the Edge with Symfony2

$view->actions->render( 'http://www.google.com/', array( 'standalone' => true, 'ignore_errors' => true, 'alt' => 'BlogBundle:Post:error' ) )

Page 42: Caching on the Edge with Symfony2

stale-while-revalidate - rfc5861

Page 43: Caching on the Edge with Symfony2

stale-if-error - rfc5861

Page 44: Caching on the Edge with Symfony2

There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton

http://martinfowler.com/bliki/TwoHardThings.html

Page 45: Caching on the Edge with Symfony2

Code is still experimental and buggy

Page 46: Caching on the Edge with Symfony2

http://datatracker.ietf.org/wg/httpbis/

Page 47: Caching on the Edge with Symfony2

Questions?

Page 48: Caching on the Edge with Symfony2

Sensio S.A. 92-98, boulevard Victor Hugo

92 115 Clichy Cedex FRANCE

Tél. : +33 1 40 99 80 80

Contact Fabien Potencier

fabien.potencier at sensio.com

http://www.sensiolabs.com/

http://www.symfony-project.org/

http://fabien.potencier.org/

Page 49: Caching on the Edge with Symfony2

http://tomayko.com/writings/things-caches-do

http://www.slideshare.net/rtomayko/https-bestkept-secret-caching

http://content.newrelic.com/railslab/videos/10-ScalingRails-Client-Side-Caching.mp4

http://content.newrelic.com/railslab/videos/11-ScalingRails-Advanced-HTTP-Caching.mp4

Page 50: Caching on the Edge with Symfony2

// do only what is needed to compute // the ETag and Last-Modified header values

$response = $this->createResponse(); $response->setEtag('post_'.$post->getId()); $response->setLastModified($post->getPublishedAt());

if ($response->isNotModified($this->getRequest())) { return $response; }

// do some heavy stuff here

return $this->render('...:post', $vars, $response);

Page 51: Caching on the Edge with Symfony2

// from http://varnish-cache.org/wiki/FAQ/Compression // normalize Accept-Encoding HTTP header protected function lookup(Request $request) { if ($ae = $request->headers->get('Accept-Encoding')) { if (preg_match('/\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$/', $request->getRequestUri())) { // no point in compressing these $request->headers->delete('Accept-Encoding'); } elseif (false !== strpos($ae, 'gzip')) { $request->headers->set('Accept-Encoding', 'gzip'); } elseif (false !== strpos($ae, 'deflate')) { $request->headers->set('Accept-Encoding', 'deflate'); } else { // unkown algorithm $request->headers->delete('Accept-Encoding'); } }

return parent::lookup($request); }

Page 52: Caching on the Edge with Symfony2

Symfony2 app

Symfony2 HTTP proxy

Web Server

Requests

Response

P2 10 + 20 P3 10 + 20

P3 90 P2 90

Symfony2Validation accel.

PHP SF2 60 PHP LIGHT 180

Page 53: Caching on the Edge with Symfony2

Symfony2 app

Symfony2Validation accel.

Web Server

Reverse proxy

Requests

Response

P2 10 + 20 P3 10 + 20

P3 90

P2 90

PHP SF2 60 PHP LIGHT 90