##1. Background
The assumptions are following:
- your Digital Ocean droplet LAMP has already been set up
- you know how to open ssh session to your droplet
- Symfony Standard default web page is already available at http://localhost/ within your droplet
If you need additional assistance to meet the above assumptions refer to:
- A tutorial on Installing ssh keys for Digital Ocean droplet
- A tutorial on Running Symfony application on Digital Ocean droplet
##2. Install lynx and visit the default web page
Install lynx:
$ sudo apt-get update -y
$ sudo apt-get install lynx-cur -y
and visit your web site:
$ lynx localhost
If you are using Symfony Standard, you should see the page containing two words:
Welcome!
Homepage.
You can quit lynx by pressing Q key on your keyboard.
##3. Install the software to benchmark your site
I will use ab
application to benchmark the site.
To install it run:
$ sudo apt-get install apache2-utils -y
##4. Run the tests to check current speed of your site
$ ab -c 10 -n 1000 http://localhost/
The result you will get will be similar to:
Concurrency Level: 10
Time taken for tests: 9.432 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 525000 bytes
HTML transferred: 248000 bytes
Requests per second: 106.03 [#/sec] (mean)
Time per request: 94.316 [ms] (mean)
Time per request: 9.432 [ms] (mean, across all concurrent requests)
Transfer rate: 54.36 [Kbytes/sec] received
Thus, the current speed may be estimated as 100 requests per second.
##5. Install Varnish
$ sudo apt-get install varnish -y
##6. Configure Varnish
Modify the contents of /etc/default/varnish
file.
Configure Varnish to respond to queries received on port 8080.
You can achieve this with the following settings:
# File: /etc/default/varnish
DAEMON_OPTS="-a :8080 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-s malloc,1024m"
Next modify the contents of /etc/varnish/devault.vcl
file.
With the following settings Varnish will use Apache running on port 80:
# File: /etc/varnish/default.vcl
backend default {
.host = "127.0.0.1";
.port = "80";
}
##7. Restart varnish
$ sudo service varnish restart
##8. What have we just done?
Right now, your server listens for HTTP requests using two ports:
- 80 - standard port used by Apache
- 8080 - port used by Varnish
When Varnish receives a request for the first time, it contacts Apache to to get the answer. After that, Varnish responds with cached answer.
##9. Run the tests again
This time use port 8080 for tests:
$ ab -c 10 -n 1000 http://localhost:8080/
You should get results similar to the ones shown below:
Concurrency Level: 10
Time taken for tests: 0.165 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 538000 bytes
HTML transferred: 248000 bytes
Requests per second: 6070.87 [#/sec] (mean)
Time per request: 1.647 [ms] (mean)
Time per request: 0.165 [ms] (mean, across all concurrent requests)
Transfer rate: 3189.58 [Kbytes/sec] received
Now, the speed may be estimated as 6000 requests per second.
The difference is really amazing:
Port | Content served by | queries/second |
---|---|---|
80 | Apache | 100 |
8080 | Varnish | 6000 |
##7. Reading list