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';
}


Ciekawe linki

Osobiste