Nginxのお話 画像配信・APIキャッシュ利用事例 2011/11/11 Webサーバ勉強会
-
Upload
kentaro-yoshida -
Category
Technology
-
view
2.246 -
download
5
description
Transcript of Nginxのお話 画像配信・APIキャッシュ利用事例 2011/11/11 Webサーバ勉強会
Nginxのお話Kentaro Yoshida at Webサーバ勉強会 on 2011/11/11
本日の流れ
#1 ApacheとNginxの連携で高速画像配信Apache等のVirtualHost設定と2重管理は行わない実質メンテナンスフリーを実現
#2 Nginxによる中間キャッシュサーバ期限切れの削除性能高く、かなり実用的nginx cache managerが軽い理由も解説
#1 ApacheとNginxの連携で高速画像配信
こんなケースに最適
Nginxの高速な応答性能を取り入れたい
画像の配信にpreforkで動くApacheから応答する事は卒業したい
でも、PHPを利用している都合上、Apacheをworkerには出来ない
ApacheのVirtualHost設定ファイルと重複する内容は書きたくない
#1 ApacheとNginxの連携で高速画像配信
構成ロードバランサ配下にWebサーバがある構成Apacheとは別のポートを使い、互いに依存しない構成
メリット別ポートを使うため、Apacheと共存可能で設定変更も不要ApacheとNginxの良いところ取りが出来る
#1 ApacheとNginxの連携で高速画像配信 upstream backend-apache { server 127.0.0.1:80; }
server { listen 8080; server_name _; access_log off;
location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; }
location @unicorn { log_not_found off; expires 12h; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://backend-apache; } }
upstream backend-apache { server 127.0.0.1:80; }
server { listen 8080; server_name _; access_log off;
location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; }
location @unicorn { log_not_found off; expires 12h; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass ; } }
upstream backend-apache { server 127.0.0.1:80; }
server { listen 8080; server_name _; access_log off;
location / { log_not_found off; expires 12h; root /var/www/site; try_files /$host$uri /$host/web/$uri @unicorn; }
location @unicorn { log_not_found off; expires 12h; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://backend-apache; } }
#2 Nginxによる中間キャッシュサーバ
こんなケースに最適
mod_mem_cache や mod_disk_cacheでiowaitに悩まされている
squidよりも簡単な透過的なキャッシュサーバが欲しい
n時間に1回リフレッシュしたいAPIリクエストのキャッシュ
構成ロードバランサ配下にWebサーバがある構成Nginxが待ち受け、キャッシュが無ければApacheへ受け流すメリット
tmpfsにキャッシュを書き込む事で読み書きの圧倒的高速化設定がシンプルで簡単に利用できる定期的なキャッシュ削除が軽い
#2 Nginxによる中間キャッシュサーバ
残念な実装(mod_disk_cache + Cronで期限切れファイル削除)ディレクトリを上から順番に探索ファイルリストを取得し、それぞれの更新日を取得条件に該当したら削除
Nginxの実装nginx cache managerが定期的にフルパス指定で削除
#2 Nginxによる中間キャッシュサーバ
#2 Nginxによる中間キャッシュサーバ
proxy_cache_path /dev/shm/nginx-cache/test levels=1 keys_zone=test-cache:2m max_size=500m inactive=1h;
upstream api-backends { server 127.0.0.1:80;}
server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ { proxy_cache test-cache; proxy_cache_valid 200 4h; proxy_cache_valid any 1m; proxy_pass http://api-backends; }}
proxy_cache_path /dev/shm/nginx-cache/test levels=1 keys_zone=test-cache:2m max_size=500m inactive=1h;
upstream api-backends { server 127.0.0.1:80;}
server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ { proxy_cache test-cache; proxy_cache_valid 200 4h; proxy_cache_valid any 1m; proxy_pass http://api-backends; }}
proxy_cache_path /dev/shm/nginx-cache/test levels=1 keys_zone=test-cache:2m max_size=500m inactive=1h;
upstream api-backends { server 127.0.0.1:80;}
server { listen 192.168.50.20:80; server_name hoge.jp; access_log off; error_log /var/log/nginx/error.log; proxy_set_header Host $host; location /service-api/ { proxy_cache test-cache; proxy_cache_valid 200 4h; proxy_cache_valid any 1m; proxy_pass http://api-backends; }}
http://twitter.com/yoshi_ken/status/41522958027460608
無視できる範囲のiowait
# strace -p 10088
Process 10088 attached - interrupt to quit
epoll_wait(19, {}, 512, 2909) = 0
unlink("/dev/shm/nginx-cache/foo-api/e/69/844b59da41ddaa0d9dd66147e2a0769e") = 0
unlink("/dev/shm/nginx-cache/foo-api/e/ca/219b1560899d1d33c5ab30b21420acae") = 0
nanosleep({0, 200000000}, NULL) = 0
unlink("/data/nginx/cache/foo-image/7/56/a0f7597a0916c5e03422f8f1168ab567") = 0
unlink("/data/nginx/cache/foo-image/2/ae/f9d0d8722d114b7f57748ec28aaa0ae2") = 0
epoll_wait(19, {}, 512, 10000) = 0
nginx cache managerの動き
Nginxイイね!