Caching on the Edge
Fabien Potencier
Let’s run some benchmarks ;)
cacheable for 10 seconds
Lorem	
  ipsum	
  dolor	
  sit	
  amet,	
  consectetur	
  adipiscing	
  elit.	
  In	
  vel	
  nul...
requests / second
      600	
  




      500	
  




      400	
  




      300	
                                       ...
For 10 concurrent users,
Symfony2 is 5 times faster than symfony
requests / second
      600	
  




      500	
  




      400	
  




      300	
                                       ...
For 100 concurrent users,
Symfony2 is 11 times faster than symfony
What if I add an HTTP accelerator?
Symfony2 embraces the HTTP specification
HTTP Expiration / HTTP Validation
$response->setSharedMaxAge(...);
$response->setTtl(...);
$response->setMaxAge(...);
$response->setClientTtl(...);
$respons...
Cache-Control: s-maxage=10
public function showAction()
{
  // ...

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

    $response->setSharedMaxAge(10);...
public function showAction()
{
  // ...

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

   ...
Symfony 2 comes built-in with an HTTP accelerator
$kernel = new HelloCache(
   new HelloKernel('prod', false)
);

$kernel->handle()->send();
Let’s run some benchmarks… again
cacheable for 10 seconds
                                                                       cacheable for 5 seconds
Lo...
requests / second
       600	
  




       500	
  




       400	
  




       300	
                                   ...
For 10 concurrent users,
Symfony2 is 8 times faster than symfony
For 100 concurrent users,
Symfony2 is 85 times faster than symfony
cacheable for 10 seconds                                    cacheable for 5 seconds
         Lorem	
  ipsum	
  dolor	
  si...
<?php $view->extend('...:layout') ?>

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

  <?php echo $view->actions->render('...:li...
cacheable for 10 seconds
<?php $view->extend('...:layout') ?>

<?php $view->slots->start('sidebar') ?> for 5 seconds
     ...
$view->actions->render('...:list', array(
   'standalone' => true,
))
Lorem	
  ipsum	
  dolor	
  sit	
  amet,	
  consectetur	
              Lorem	
  ipsum	
  dolor	
  sit	
  
adipiscing	
  eli...
<esi:include src="..." />
Lorem	
  ipsum	
  dolor	
  sit	
  amet,	
  consectetur	
  
adipiscing	
  elit.	
  In	
  vel	
  n...
ESI… or Edge Side Includes
Lorem	
  ipsum	
  
                                                                      dolor	
  sit	
  
                ...
base layout

       layout

Lorem	
  ipsum	
  dolor	
  sit	
  amet,	
                                                     ...
Goal
     Be as dynamic as needed
Hit the application as less as possible
P2Lorem	
  ipsum	
  dolor	
  sit	
  amet,	
                       Lorem	
  ipsum	
  dolor	
  sit	
  
                     ...
PHP SF 300


                                             Web Server




           P1 100 P2 100 P3 100               sym...
PHP SF 300


                                            Web Server

                                        symfony cache...
PHP SF 201


                                           Web Server

                                       symfony cache

...
PHP SF2 300


                                             Web Server




           P1 100 P2 100 P3 100              Sym...
PHP SF2 140
           PHP LIGHT 180

                                                Web Server

                        ...
PHP SF2 140
           PHP LIGHT 0
                                           Reverse proxy

                             ...
The power is even bigger than what you think…
$view->actions->render('...:list', array(
   'standalone' => true,
   'ignore_errors' => true,
   'alt' => 'BlogBundle:Pos...
$view->actions->render(
  'http://www.google.com/',
  array(
    'standalone' => true,
    'ignore_errors' => true,
    'a...
stale-while-revalidate - rfc5861
stale-if-error - rfc5861
There are only two hard things in Computer Science:
cache invalidation and naming things. -- Phil Karlton




            ...
Code is still experimental and buggy
http://datatracker.ietf.org/wg/httpbis/
Questions?
Sensio S.A.
   92-98, boulevard Victor Hugo
       92 115 Clichy Cedex
             FRANCE
      Tél. : +33 1 40 99 80 80
...
http://tomayko.com/writings/things-caches-do

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

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

$response = $this->createResponse();
$re...
// from http://varnish-cache.org/wiki/FAQ/Compression
// normalize Accept-Encoding HTTP header
protected function lookup(R...
PHP SF2 60
           PHP LIGHT 180
                                              Web Server

                            ...
PHP SF2 60
           PHP LIGHT 90
                                         Reverse proxy

                               ...
Upcoming SlideShare
Loading in...5
×

Caching on the Edge with Symfony2

20,742

Published on

Published in: Technology
2 Comments
28 Likes
Statistics
Notes
No Downloads
Views
Total Views
20,742
On Slideshare
0
From Embeds
0
Number of Embeds
13
Actions
Shares
0
Downloads
252
Comments
2
Likes
28
Embeds 0
No embeds

No notes for slide

Caching on the Edge with Symfony2

  1. 1. Caching on the Edge Fabien Potencier
  2. 2. Let’s run some benchmarks ;)
  3. 3. cacheable for 10 seconds 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   comes from DB 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   (simulated) 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.  
  4. 4. requests / second 600   500   400   300   symfony   Symfony2   200   100   0   10   30   50   70   90  
  5. 5. For 10 concurrent users, Symfony2 is 5 times faster than symfony
  6. 6. requests / second 600   500   400   300   symfony   Symfony2   200   100   0   10   30   50   70   90   number of concurrent users
  7. 7. For 100 concurrent users, Symfony2 is 11 times faster than symfony
  8. 8. What if I add an HTTP accelerator?
  9. 9. Symfony2 embraces the HTTP specification
  10. 10. HTTP Expiration / HTTP Validation
  11. 11. $response->setSharedMaxAge(...); $response->setTtl(...); $response->setMaxAge(...); $response->setClientTtl(...); $response->setExpires(...); $response->setETag(...); $response->setLastModified(...);
  12. 12. Cache-Control: s-maxage=10
  13. 13. public function showAction() { // ... $response = $this->render('...', $vars); $response->setSharedMaxAge(10); return $response; }
  14. 14. public function showAction() { // ... $response = $this->createResponse(); $response->setSharedMaxAge(10); return $this->render( '...', $vars, $response); }
  15. 15. Symfony 2 comes built-in with an HTTP accelerator
  16. 16. $kernel = new HelloCache( new HelloKernel('prod', false) ); $kernel->handle()->send();
  17. 17. Let’s run some benchmarks… again
  18. 18. cacheable for 10 seconds cacheable for 5 seconds Lorem  ipsum  dolor  sit  amet,  consectetur   Lorem  ipsum  dolor  sit   adipiscing  elit.  In  vel  nulla  arcu,  vitae   amet,  consectetur   cursus  nunc.  Integer  semper  turpis  et  enim   adipiscing  elit.  In  vel  nulla   por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum   arcu,  vitae  cursus  nunc.   dolor  sit  amet,  consectetur  adipiscing  elit.   Integer  semper  turpis  et   Mauris  vehicula  ves;bulum  dictum.   enim  por6tor  iaculis.   Aenean  non  velit  tortor.  Nullam  adipiscing   Nulla  facilisi.  Lorem  ipsum   malesuada  aliquam.  Mauris  dignissim,  urna   dolor  sit  amet,   quis  iaculis  tempus,  justo  libero  por6tor   consectetur  adipiscing  elit.   est,  nec  eleifend  est  elit  vitae  ante.   Mauris  vehicula   Curabitur  interdum  luctus  metus,  in   ves;bulum  dictum.   pulvinar  lectus  rutrum  sit  amet.  Duis   Aenean  non  velit  tortor.   gravida,  metus  in  dictum  eleifend,  dolor   Nullam  adipiscing   risus  ;ncidunt  ligula,  non  volutpat  nulla   comes from DB malesuada  aliquam.   comes from DB sapien  in  elit.  Nulla  rutrum  erat  id  neque   Mauris  dignissim,  urna   (simulated) suscipit  eu  ultricies  odio  sollicitudin.   (simulated) quis  iaculis  tempus,  justo   Aliquam  a  mi  vel  eros  placerat  hendrerit.   libero  por6tor  est,  nec   Phasellus  por6tor,  augue  sit  amet   eleifend  est  elit  vitae  ante.   vulputate  venena;s,  dui  leo  commodo   Curabitur  interdum  luctus   odio,  a  euismod  turpis  ligula  in  elit.     metus.  
  19. 19. requests / second 600   500   400   300   symfony   Symfony2   200   100   0   10   30   50   70   90   number of concurrent requests
  20. 20. For 10 concurrent users, Symfony2 is 8 times faster than symfony
  21. 21. For 100 concurrent users, Symfony2 is 85 times faster than symfony
  22. 22. cacheable for 10 seconds cacheable for 5 seconds Lorem  ipsum  dolor  sit  amet,  consectetur   Lorem  ipsum  dolor  sit   layout adipiscing  elit.  In  vel  nulla  arcu,  vitae   amet,  consectetur   cursus  nunc.  Integer  semper  turpis  et  enim   adipiscing  elit.  In  vel  nulla   por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum   arcu,  vitae  cursus  nunc.   dolor  sit  amet,  consectetur  adipiscing  elit.   Integer  semper  turpis  et   Mauris  vehicula  ves;bulum  dictum.   enim  por6tor  iaculis.   Aenean  non  velit  tortor.  Nullam  adipiscing   Nulla  facilisi.  Lorem  ipsum   malesuada  aliquam.  Mauris  dignissim,  urna   dolor  sit  amet,   quis  iaculis  tempus,  justo  libero  por6tor   consectetur  adipiscing  elit.   est,  nec  eleifend  est  elit  vitae  ante.   Mauris  vehicula   Curabitur  interdum  luctus  metus,  in   ves;bulum  dictum.   pulvinar  lectus  rutrum  sit  amet.  Duis   Aenean  non  velit  tortor.   gravida,  metus  in  dictum  eleifend,  dolor   Nullam  adipiscing   risus  ;ncidunt  ligula,  non  volutpat  nulla   malesuada  aliquam.   sapien  main Nulla  rutrum  erat  id  neque   in  elit.   Mauris  dignissim,  in component urna   suscipit  eu  ultricies  odio  sollicitudin.   action quis  iaculis  tempus,  justo   the layout Aliquam  a  mi  vel  eros  placerat  hendrerit.   libero  por6tor  est,  nec   Phasellus  por6tor,  augue  sit  amet   eleifend  est  elit  vitae  ante.   vulputate  venena;s,  dui  leo  commodo   Curabitur  interdum  luctus   odio,  a  euismod  turpis  ligula  in  elit.     metus.   NOT cacheable
  23. 23. <?php $view->extend('...:layout') ?> <?php $view->slots->start('sidebar') ?> <?php echo $view->actions->render('...:list') ?> <?php $view->slots->stop() ?> Lorem ipsum...
  24. 24. cacheable for 10 seconds <?php $view->extend('...:layout') ?> <?php $view->slots->start('sidebar') ?> for 5 seconds cacheable <?php echo $view->actions->render('...:list') ?> <?php $view->slots->stop() ?> Lorem ipsum...
  25. 25. $view->actions->render('...:list', array( 'standalone' => true, ))
  26. 26. Lorem  ipsum  dolor  sit  amet,  consectetur   Lorem  ipsum  dolor  sit   adipiscing  elit.  In  vel  nulla  arcu,  vitae   amet,  consectetur   cursus  nunc.  Integer  semper  turpis  et  enim   adipiscing  elit.  In  vel  nulla   por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum   arcu,  vitae  cursus  nunc.   dolor  sit  amet,  consectetur  adipiscing  elit.   Integer  semper  turpis  et   Mauris  vehicula  ves;bulum  dictum.   enim  por6tor  iaculis.   Aenean  non  velit  tortor.  Nullam  adipiscing   Nulla  facilisi.  Lorem  ipsum   malesuada  aliquam.  Mauris  dignissim,  urna   dolor  sit  amet,   quis  iaculis  tempus,  justo  libero  por6tor   consectetur  adipiscing  elit.   est,  nec  eleifend  est  elit  vitae  ante.   Mauris  vehicula   Curabitur  interdum  luctus  metus,  in   ves;bulum  dictum.   pulvinar  lectus  rutrum  sit  amet.  Duis   Aenean  non  velit  tortor.   gravida,  metus  in  dictum  eleifend,  dolor   Nullam  adipiscing   risus  ;ncidunt  ligula,  non  volutpat  nulla   malesuada  aliquam.   sapien  in  elit.  Nulla  rutrum  erat  id  neque   Mauris  dignissim,  urna   suscipit  eu  ultricies  odio  sollicitudin.   quis  iaculis  tempus,  justo   Aliquam  a  mi  vel  eros  placerat  hendrerit.   libero  por6tor  est,  nec   Phasellus  por6tor,  augue  sit  amet   eleifend  est  elit  vitae  ante.   vulputate  venena;s,  dui  leo  commodo   Curabitur  interdum  luctus   odio,  a  euismod  turpis  ligula  in  elit.     metus.  
  27. 27. <esi:include src="..." /> 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.    
  28. 28. ESI… or Edge Side Includes
  29. 29. Lorem  ipsum   dolor  sit   amet,     1 2 Symfony2 Application Lorem   ipsum   Reverse Proxy dolor   Client 3 Lorem  ipsum   Lorem   dolor  sit   ipsum   amet,     dolor   4
  30. 30. base layout layout Lorem  ipsum  dolor  sit  amet,   Lorem  ipsum  dolor  sit   consectetur  adipiscing  elit.  In  vel  nulla   Lorem  ipsum  dolor  sit   amet,  consectetur   included page main template amet,  consectetur   arcu,  vitae  cursus  nunc.  Integer  semper   included page adipiscing  elit.  In  vel   turpis  et  enim  por6tor  iaculis.  Nulla   adipiscing  elit.  In  vel  nulla   nulla  arcu,  vitae  cursus   facilisi.  Lorem  ipsum  dolor  sit  amet,   arcu,  vitae  cursus  nunc.   nunc.  Integer  semper   consectetur  adipiscing  elit.  Mauris   Integer  semper  turpis  et   turpis  et  enim  por6tor   vehicula  ves;bulum  dictum.  Aenean   enim  por6tor  iaculis.   iaculis.  Nulla  facilisi.   non  velit  tortor.  Nullam  adipiscing   Nulla  facilisi.  Lorem  ipsum   Lorem  ipsum  dolor  sit   malesuada  aliquam.  Mauris  dignissim,   dolor  sit  amet,   amet,  consectetur   urna  quis  iaculis  tempus,  justo  libero   consectetur  adipiscing  elit.   adipiscing  elit.  Mauris   por6tor  est,  nec  eleifend  est  elit  vitae   Mauris  vehicula   vehicula  ves;bulum   ante.  Curabitur  interdum  luctus  metus,   ves;bulum  dictum.   dictum.  Aenean  non   in  pulvinar  lectus  rutrum  sit  amet.  Duis   Aenean  non  velit  tortor.   velit  tortor.  Nullam   gravida,  metus  in  dictum  eleifend,   Nullam  adipiscing   adipiscing  malesuada   dolor  risus  ;ncidunt  ligula,  non   malesuada  aliquam.   aliquam.     volutpat  nulla  sapien  in  elit.  Nulla   Mauris  dignissim,  urna   rutrum  erat  id  neque  suscipit  eu   quis  iaculis  tempus,  justo   Lorem  ipsum  dolor  sit   ultricies  odio  sollicitudin.  Aliquam  a  mi   libero  por6tor  est,  nec   amet,  consectetur   included page vel  eros  placerat  hendrerit.  Phasellus   eleifend  est  elit  vitae  ante.   adipiscing  elit.  In  vel   por6tor,  augue  sit  amet  vulputate   Curabitur  interdum  luctus   nulla  arcu,  vitae   venena;s,  dui  leo  commodo  odio,  a   metus.   cursus  nunc.     euismod  turpis  ligula  in  elit.    
  31. 31. Goal Be as dynamic as needed Hit the application as less as possible
  32. 32. P2Lorem  ipsum  dolor  sit  amet,   Lorem  ipsum  dolor  sit   consectetur  adipiscing  elit.  In  vel  nulla   amet,  consectetur   arcu,  vitae  cursus  nunc.  Integer   adipiscing  elit.  In  vel   semper  turpis  et  enim  por6tor   nulla  arcu,  vitae  cursus   iaculis.  Nulla  facilisi.  Lorem  ipsum   nunc.  Integer  semper   dolor  sit  amet,  consectetur  adipiscing   turpis  et  enim   elit.  Mauris  vehicula  ves;bulum   por6tor  iaculis.  Nulla   dictum.  Aenean  non  velit  tortor.   facilisi.  Lorem  ipsum   Nullam  adipiscing  malesuada  aliquam.   dolor  sit  amet,   P1 Lorem  ipsum  dolor  sit  amet,  consectetur  adipiscing  elit.  In  vel   Mauris  dignissim,  urna  quis  iaculis   tempus,  justo  libero  por6tor  est,  nec   eleifend  est  elit  vitae  ante.  Curabitur   consectetur  adipiscing   elit.  Mauris  vehicula   ves;bulum  dictum.   nulla  arcu,  vitae  cursus  nunc.  Integer  semper  turpis  et  enim   interdum  luctus  metus,  in  pulvinar   Aenean  non  velit   por6tor  iaculis.  Nulla  facilisi.  Lorem  ipsum  dolor  sit  amet,   lectus  rutrum  sit  amet.  Duis  gravida,   consectetur  adipiscing  elit.  Mauris  vehicula  ves;bulum  dictum.   tortor.  Nullam   metus  in  dictum  eleifend,  dolor  risus   adipiscing  malesuada   Aenean  non  velit  tortor.  Nullam  adipiscing  malesuada  aliquam.   Mauris  dignissim,  urna  quis  iaculis  tempus,  justo  libero  por6tor   10S ;ncidunt  ligula,  non  volutpat  nulla   sapien  in  elit.   5S aliquam   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   Expiration 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   10S est,  nec  eleifend  est  elit  vitae  ante.  Curabitur  interdum  luctus   P3 Lorem  ipsum  dolor  sit  amet,   Lorem  ipsum  dolor  sit   metus,  in  pulvinar  lectus  rutrum  sit  amet   consectetur  adipiscing  elit.  In  vel  nulla   amet,  consectetur   arcu,  vitae  cursus  nunc.  Integer   adipiscing  elit.  In  vel   semper  turpis  et  enim  por6tor   Expiration nulla  arcu,  vitae  cursus   iaculis.  Nulla  facilisi.  Lorem  ipsum   nunc.  Integer  semper   dolor  sit  amet,  consectetur  adipiscing   turpis  et  enim   Expiration elit.  Mauris  vehicula  ves;bulum   por6tor  iaculis.  Nulla   dictum.  Aenean  non  velit  tortor.   facilisi.  Lorem  ipsum   Nullam  adipiscing  malesuada  aliquam.   dolor  sit  amet,   Mauris  dignissim,  urna  quis  iaculis   consectetur  adipiscing   & tempus,  justo  libero  por6tor  est,  nec   eleifend  est  elit  vitae  ante.  Curabitur   interdum  luctus  metus,  in  pulvinar   elit.  Mauris  vehicula   ves;bulum  dictum.   Aenean  non  velit   Validation 10S lectus  rutrum  sit  amet.  Duis  gravida,   tortor.  Nullam   metus  in  dictum  eleifend,  dolor  risus   adipiscing  malesuada   ETag ;ncidunt  ligula,  non  volutpat  nulla   sapien  in  elit.   5S aliquam   ETag
  33. 33. PHP SF 300 Web Server P1 100 P2 100 P3 100 symfony app Requests Response
  34. 34. PHP SF 300 Web Server symfony cache P1 10 P2 100 P3 100 symfony app Requests P1 90 Response
  35. 35. PHP SF 201 Web Server symfony cache P1 1 P2 100 P3 100 symfony app Requests P1 99 management! No HTTP Response
  36. 36. PHP SF2 300 Web Server P1 100 P2 100 P3 100 Symfony2 app Requests Response
  37. 37. PHP SF2 140 PHP LIGHT 180 Web Server Symfony2 HTTP proxy P1 10 P2 10 + 20 P3 100 Symfony2 app Requests P1 90 P2 90 Response
  38. 38. PHP SF2 140 PHP LIGHT 0 Reverse proxy Web Server P1 10 P2 10 + 20 P3 100 Symfony2 app Requests P1 90 P2 90 Response
  39. 39. The power is even bigger than what you think…
  40. 40. $view->actions->render('...:list', array( 'standalone' => true, 'ignore_errors' => true, 'alt' => 'BlogBundle:Post:error' )) <esi:include src="..." alt="..." on-error="ignore" />
  41. 41. $view->actions->render( 'http://www.google.com/', array( 'standalone' => true, 'ignore_errors' => true, 'alt' => 'BlogBundle:Post:error' ) )
  42. 42. stale-while-revalidate - rfc5861
  43. 43. stale-if-error - rfc5861
  44. 44. There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton http://martinfowler.com/bliki/TwoHardThings.html
  45. 45. Code is still experimental and buggy
  46. 46. http://datatracker.ietf.org/wg/httpbis/
  47. 47. Questions?
  48. 48. 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/
  49. 49. 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
  50. 50. // 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);
  51. 51. // 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); }
  52. 52. PHP SF2 60 PHP LIGHT 180 Web Server Symfony2 HTTP proxy Symfony2Validation accel. P2 10 + 20 P3 10 + 20 Symfony2 app Requests P3 90 P2 90 Response
  53. 53. PHP SF2 60 PHP LIGHT 90 Reverse proxy Web Server Symfony2Validation accel. P2 10 + 20 P3 10 + 20 Symfony2 app Requests P3 90 P2 90 Response
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×