Memcache, nginx, itp. (10-12) 2008/2009
Z JASR Wiki
<<< Powrót do Tworzenie aplikacji wielowarstowych 2008/2009
Spis treści |
"Lekkie" serwery WWW:
- lighttpd (YouTube, wikipedia)
- nginx (WordPress, nasza-klasa.pl, grono.net)
- Apache
- etc.
Statystyki dotyczące serwerów WWW można znaleźć na stronie Netcraft
Role serwerów WWW:
- serwowanie statycznych/dynamicznych treści
- autentykacja/autoryzacja
- kompresja danych (request=>Accept-Encoding: gzip, deflate responce=>Content-Encoding: gzip)
- proxy/load balancer/failover
- cache
Kompresja danych
Konfiguracja lighttpd:
compress.allowed-encodings = ("bzip2", "gzip", "deflate")
compress.cache-dir = "/var/www/cache/"
compress.filetype = ("text/plain", "text/html")
Porównanie czasów reakcji treści skompresowanej i bez kompresji
Bez kompresji:
# curl --head http://instacalc.com/release/build547/javascripts/library-chart.js.packed
# ab -n 100 -c 5 http://instacalc.com/release/build547/javascripts/library-chart.js.packed
Connection Times (ms)
min mean[+/-sd] median max
Connect: 147 189 50.2 169 380
Processing: 1351 2741 1313.0 2158 7992
Waiting: 153 275 251.4 209 1755
Total: 1504 2931 1316.0 2352 8152
Z kompresją:
#curl --head --compress http://instacalc.com/release/build547/javascripts/library-chart.js.packed
# ab -n 100 -c 5 -H "Accept-Encoding: deflate, gzip" http://instacalc.com/release/build547/javascripts/library-chart.js.packed
Connection Times (ms)
min mean[+/-sd] median max
Connect: 147 159 17.8 155 295
Processing: 561 771 258.7 724 2557
Waiting: 164 225 168.3 180 1425
Total: 713 930 263.9 884 2714
| bez kompresji | z kompresją | poprawa | |
|---|---|---|---|
| rozmiar | 130 542 | 30 395 | 430% |
| żądań na sekundę | 1.69 | 5.13 | 303% |
| czas odpowiedzi | 2951.813ms | 973.890ms | 303% |
| czas całkowity | 59.36s | 19.4s | 306% |
Cache:
- warstwa sieciowa (produkty Cisco)
protokół HTTP
Elementy nagłówka HTTP brane pod uwagę przy cache'owaniu: Cache-Control, Expires, Last-Modified, ETag
ETag
static-file.etags = "enable" etag.use-inode = "enable" etag.use-mtime = "enable" etag.use-size = "enable"
mod_cache
Moduły wykorzystywane w serwerach WWW:
- Apache:mod_cache
- lighttpd:mod_cache, mod_mem_cache
Przykład konfiguracji lighttpd:
mem-cache.filetypes = ("application/x-javascript", "text/css", "text/html", "text/javascript")
mem-cache.max-memory = 1024 # Use 1G memory cache
mem-cache.max-file-size = 1024 # Cache maximum 1M-size file
mem-cache.expire-time = 1440 # 1 day
memcached
uruchomienie:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
przykład użycia w PHP:
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ('Nie stworzyć połączenia z memcache');
if ($get_result = $memcache->get('key')) {
// obiekty są w cache'u
echo '<b>Dane z serwera</b>:<br/>';
echo $get_result->str_attr.'<br />';
echo $get_result->int_attr;
} else {
// obiektów nie ma w cache'u
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = time();
$memcache->set('key', $tmp_object, false, 10) or die ('Nie udało się zapisać elementu');
echo 'Zapisane dane zostaną usunięte po 10 sekundach<br/>';
echo 'Odśwież stronę by zobaczyć dane zapisane na serwerze memcached';
}