Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Speed up websites with Varnish 3
1. Varnish 3
The easy way
to speed up your websites
@fabpot
fabien@symfony.com
http://www.flickr.com/photos/laserstars/908946494
2. Varnish is an HTTP accelerator
http://www.flickr.com/photos/stuckincustoms/3232133635
3. Varnish is a Caching Reverse Proxy
http://www.flickr.com/photos/stuckincustoms/3232133635
4. Kinds of caches
http://www.flickr.com/photos/jnarin/2993803017
5. Browser Browser Browser
Browser Cache Browser Cache Browser Cache
Within a Company
On the server side
Your PHP application
6. Browser Browser Browser Browser Browser Browser
Browser Cache Browser Cache Browser Cache Browser Cache Browser Cache Browser Cache
Proxy Cache Proxy Cache
Within a Company Within a Company
On the server side
Your PHP application
7. Browser Browser Browser Browser Browser
Browser Cache Browser Cache Browser Cache Browser Cache Browser Cache
Proxy Cache
Within a Company
On the server side
Reverse Proxy Cache
Your PHP application
10. The Client sends a Request to the Server
The Server sends back a Response to the Client
A Client (browser, bot, WS, curl, …)
A Server (Apache, nginx, …)
The Request and the Response are HTTP messages
19. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Cache-Control: s-
maxage=10
Hello
HTTP/1.1 200 OK
HTTP/1.1 200 OK
Cache-‐Control:
s-‐maxage=10
Hello
Hello
20. Before expiration
GET /foo HTTP/1.1 Your application is not called
Host: foo.org
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Cache-Control: s-
maxage=10
Hello
HTTP/1.1 200 OK
Hello
21. After expiration
GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Some Cache fresh
Your PHP application
Not
Browser
GET /foo
HTTP/1.1 200 OK
Cache-Control: s-
maxage=10
Hello
HTTP/1.1 200 OK
HTTP/1.1 200 OK
Cache-Control: s-maxage=10
Hello
Hello
24. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Last-Modified: Thu,
…
Hello
HTTP/1.1 200 OK HTTP/1.1 200 OK
Last-Modified: Thu,
… Last-Modified: Thu,
…
Hello Hello
25. If the resource has not changed
GET /foo HTTP/1.1
GET /foo HTTP/1.1
Host: foo.org
Host: foo.org
If-Modified-Since: Thu,
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Last-Modified: Thu,
…
Hello
HTTP/1.1 200 OK HTTP/1.1 304 Not Modified
Last-Modified: Thu,
…
Hello
26. If the resource has changed
GET /foo HTTP/1.1
GET /foo HTTP/1.1
Host: foo.org
Host: foo.org
If-Modified-Since: Thu,
Your PHP application
Some Cache
Browser
GET /foo /foo
GET
HTTP/1.1 200 200 OK
HTTP/1.1 OK
Last-Modified: Sun,…
Last-Modified: Thu,…
Hello Hello
HTTP/1.1 200 OK HTTP/1.1 200 OK
Last-Modified: Sun,
… Last-Modified: Sun,
…
Hello Hello
27. You can combine HTTP headers
the way you want
Expiration wins over Validation
28. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Etag: abcdef
Cache-‐Control:
max-‐
age=10
…
Hello
HTTP/1.1 200 OK HTTP/1.1 200 OK
ETag: abcdef ETag: abcdef
Cache-‐Control:
max-‐age=10 Cache-‐Control:
max-‐age=10
Hello Hello
29. Before expiration
GET /foo HTTP/1.1
Host: foo.org
Your application is not called
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Etag: abcdef
Cache-‐Control:
max-‐
age=10
…
Hello
HTTP/1.1 200 OK
ETag: abcdef
Cache-‐Control:
max-‐age=10
Hello
30. After expiration
but resource still valid
GET /foo HTTP/1.1
GET /foo HTTP/1.1
Host: foo.org
Host: foo.org
If-None-Match: abcdef
Your PHP application
Some Cache
Browser
GET /foo
HTTP/1.1 200 OK
Etag: abcdef
Cache-‐Control:
max-‐
age=10
…
Hello
HTTP/1.1 200 OK HTTP/1.1 304 Not Modified
ETag: abcdef Cache-‐Control:
max-‐age=10
Cache-‐Control:
max-‐age=10
Hello
32. GET /foo HTTP/1.1 GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org Host: foo.org
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: max-age=600 C-C: max-age=600
Bob’s Cache
… …
Hello Hello
Bob
HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: max-age=600 C-C: max-age=600 C-C: max-age=600
Hello Hello Hello
33. GET /foo HTTP/1.1
Host: foo.org
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: max-age=600 C-C: max-age=600
Bob’s Cache
… …
Hello Hello
Bob
HTTP/1.1 200 OK
C-C: max-age=600
Hello
34. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
HTTP/1.1 200 OK HTTP/1.1 200 OK
Browser Cache
C-C: max-age=600 C-C: max-age=600
… …
Hello Hello
Alice
HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: max-age=600 C-C: max-age=600
Hello Hello
36. GET /foo HTTP/1.1 GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org Host: foo.org
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
HTTP/1.1 200 OK HTTP/1.1 200 OK
Etag: abcde Etag: abcde
Bob’s Cache
… …
Hello Hello
Bob
HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK
Etag: abcde Etag: abcde Etag: abcde
Hello Hello Hello
37. GET /foo HTTP/1.1 GET /foo HTTP/1.1
GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Host: foo.org
If-None-Match: ab If-None-Match: ab
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
HTTP/1.1 200 OK HTTP/1.1 200 OK
Etag: ab Etag: ab
Bob’s Cache
… …
Hello Hello
Bob
HTTP/1.1 200 OK
Etag: ab
304 Not Modified 304 Not Modified
Hello
38. GET /foo HTTP/1.1
GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org
Host: foo.org Host: foo.org
If-None-Match: ab
Your PHP application
Reverse Proxy Cache
GET /foo GET /foo
Browser Cache
HTTP/1.1 200 OK HTTP/1.1 200 OK
Etag: ab Etag: ab
… …
Hello Hello
Alice
HTTP/1.1 200 OK HTTP/1.1 200 OK
Etag: ab Etag: ab
304 Not Modified
Hello Hello
89. cacheable for 10 minutes
cacheable for 5 seconds
Lorem
ipsum
dolor
sit
amet,
consectetur
Lorem
ipsum
dolor
sit
amet,
adipiscing
elit.
In
vel
nulla
arcu,
vitae
cursus
consectetur
adipiscing
elit.
nunc.
Integer
semper
turpis
et
enim
In
vel
nulla
arcu,
vitae
porCtor
iaculis.
Nulla
facilisi.
Lorem
ipsum
cursus
nunc.
Integer
dolor
sit
amet,
consectetur
adipiscing
elit.
semper
turpis
et
enim
Mauris
vehicula
vesFbulum
dictum.
Aenean
porCtor
iaculis.
Nulla
non
velit
tortor.
Nullam
adipiscing
facilisi.
Lorem
ipsum
dolor
malesuada
aliquam.
Mauris
dignissim,
urna
sit
amet,
consectetur
quis
iaculis
tempus,
justo
libero
porCtor
est,
adipiscing
elit.
Mauris
nec
eleifend
est
elit
vitae
ante.
Curabitur
vehicula
vesFbulum
dictum.
interdum
luctus
metus,
in
pulvinar
lectus
Aenean
non
velit
tortor.
rutrum
sit
amet.
Duis
gravida,
metus
in
Nullam
adipiscing
dictum
eleifend,
dolor
risus
Fncidunt
ligula,
malesuada
aliquam.
Mauris
non
volutpat
nulla
sapien
in
elit.
Nulla
dignissim,
urna
quis
iaculis
rutrum
erat
id
neque
suscipit
eu
ultricies
tempus,
justo
libero
odio
sollicitudin.
Aliquam
a
mi
vel
eros
porCtor
est,
nec
eleifend
placerat
hendrerit.
Phasellus
porCtor,
est
elit
vitae
ante.
Curabitur
augue
sit
amet
vulputate
venenaFs,
dui
leo
interdum
luctus
metus.
commodo
odio,
a
euismod
turpis
ligula
in
elit.
90. ESI… or Edge Side Includes
http://www.w3.org/TR/esi-lang
91. t ESI
hou
Wit
Lorem
ipsum
dolor
sit
amet,
consectetur
Lorem
ipsum
dolor
sit
amet,
adipiscing
elit.
In
vel
nulla
arcu,
vitae
cursus
consectetur
adipiscing
elit.
nunc.
Integer
semper
turpis
et
enim
In
vel
nulla
arcu,
vitae
porCtor
iaculis.
Nulla
facilisi.
Lorem
ipsum
cursus
nunc.
Integer
dolor
sit
amet,
consectetur
adipiscing
elit.
semper
turpis
et
enim
Mauris
vehicula
vesFbulum
dictum.
Aenean
porCtor
iaculis.
Nulla
non
velit
tortor.
Nullam
adipiscing
facilisi.
Lorem
ipsum
dolor
malesuada
aliquam.
Mauris
dignissim,
urna
sit
amet,
consectetur
quis
iaculis
tempus,
justo
libero
porCtor
est,
adipiscing
elit.
Mauris
nec
eleifend
est
elit
vitae
ante.
Curabitur
vehicula
vesFbulum
dictum.
interdum
luctus
metus,
in
pulvinar
lectus
Aenean
non
velit
tortor.
rutrum
sit
amet.
Duis
gravida,
metus
in
Nullam
adipiscing
dictum
eleifend,
dolor
risus
Fncidunt
ligula,
malesuada
aliquam.
Mauris
non
volutpat
nulla
sapien
in
elit.
Nulla
dignissim,
urna
quis
iaculis
rutrum
erat
id
neque
suscipit
eu
ultricies
tempus,
justo
libero
odio
sollicitudin.
Aliquam
a
mi
vel
eros
porCtor
est,
nec
eleifend
placerat
hendrerit.
Phasellus
porCtor,
est
elit
vitae
ante.
Curabitur
augue
sit
amet
vulputate
venenaFs,
dui
leo
interdum
luctus
metus.
commodo
odio,
a
euismod
turpis
ligula
in
elit.
92. ESI
W ith
<esi:include src="..." />
Lorem
ipsum
dolor
sit
amet,
consectetur
adipiscing
elit.
In
vel
nulla
arcu,
vitae
cursus
nunc.
Integer
semper
turpis
et
enim
porCtor
iaculis.
Nulla
facilisi.
Lorem
ipsum
dolor
sit
amet,
consectetur
adipiscing
elit.
Mauris
vehicula
vesFbulum
dictum.
Aenean
non
velit
tortor.
Nullam
adipiscing
malesuada
aliquam.
Mauris
dignissim,
urna
quis
iaculis
tempus,
justo
libero
porCtor
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
Fncidunt
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
porCtor,
augue
sit
amet
vulputate
venenaFs,
dui
leo
commodo
odio,
a
euismod
turpis
ligula
in
elit.
93. GET /foo HTTP/1.1 GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org Host: foo.org
HTTP/1.1 200 OK
C-C: s-maxage=600
Lorem
<esi:include
ipsum
src="hNp.."
/>
dolor
Your PHP application
Gateway Cache
Browser Cache
GET /bar HTTP/1.1
Browser
Host: foo.org
HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: s-maxage=5
Lorem
ipsum
Lorem
Lorem
ipsum
Lorem
Lorem
ipsum
dolor
sit
amet,
ipsum
dolor
sit
amet,
ipsum
dolor
dolor dolor
GET /bar
C-C: s-maxage=5
Lorem
GET /foo
C-C: s-maxage=600
Lor <esi:include />
94. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Gateway Cache
Browser Cache
Browser
HTTP/1.1 200 OK HTTP/1.1 200 OK
Lorem
ipsum
Lorem
Lorem
ipsum
Lorem
dolor
sit
amet,
ipsum
dolor
sit
amet,
ipsum
dolor dolor
GET /bar
C-C: s-maxage=5
Lorem
GET /foo
C-C: s-maxage=600
2 seconds later… Lor <esi:include />
95. GET /foo HTTP/1.1 GET /foo HTTP/1.1
Host: foo.org Host: foo.org
Your PHP application
Gateway Cache
Browser Cache
GET /bar HTTP/1.1
Browser
Host: foo.org
HTTP/1.1 200 OK HTTP/1.1 200 OK HTTP/1.1 200 OK
C-C: s-maxage=5
Lorem
ipsum
Lorem
Lorem
ipsum
Lorem
Lorem
ipsum
dolor
sit
amet,
ipsum
dolor
sit
amet,
ipsum
dolor
dolor dolor
GET /bar
C-C: s-maxage=5
Lorem
GET /foo
C-C: s-maxage=600
7 seconds later… Lor <esi:include />