SlideShare une entreprise Scribd logo
1  sur  23
システム部
Copyright 2013 All About,inc. 1
varnish
Varnish の使い方
~ All About での使い方を例に~
2013/02/26 システム部勉強会
( 2013/5/8 修正)
大原 和人(やまと)
システム部
Copyright 2013 All About,inc. 2
発表の目的
• Varnish って何に使っているのかよくわからない
• Varnish の設定ファイルが意味不明
• Varnish …の基本的なことはわかるけど
• こういう使い方もできそうだ!
• こういう風に依頼すればいいのか!
• こうしたら、もっと良くなるんじゃないか!
• 自分のサイトにも入れてみよう!
システム部
Copyright 2013 All About,inc. 3
目次
1. Varnish の基礎知識
2. All About の varnish 環境
3. Varnish の使い方~ All About を例に~
① アクセスを中継する
② キャッシュする
1. All About の Varnish 環境の課題
2. まとめ
システム部
Copyright 2013 All About,inc.
Varnish の基礎知識
• Varnish
– HTTP アクセラレータ
– リバースプロキシ
– キャッシュサーバ
• アクセスを中継する
– 適切なサーバへ要求を振り分け
• キャッシュする
– 高速化、負荷軽減
システム部
Copyright 2013 All About,inc.
Varnish の基礎知識
• 高速、多機能、拡張可能
• 設定ファイルは主に 2 種類
– /etc/varnish/default.vcl
– /etc/sysconfig/varnish
• VCL ファイル
– C 言語に似た言語で記述される
– C 言語で独自の拡張モジュールの作成も可能
システム部
Copyright 2013 All About,inc.
All About の varnish 環境
• サーバ構成
システム部
Copyright 2013 All About,inc.
All About の varnish 環境
• サーバ構成
– LB 故障時を考慮し、グローバル直でのアクセ
スもラウンドロビンに入れている
– DC (オンプレ)のトラフィック増の問題が
あったため、クラウドのキャッシュサーバを立
てて分散させた
システム部
Copyright 2013 All About,inc.
Varnish の使い方
① アクセスを中継する
– 要求を受けて、サーバへ飛ばす
– 分散して飛ばす
– アクセス制御
– リダイレクト
Varnish の使い方~ All About での使い方を例に
~
システム部
Copyright 2013 All About,inc.
Varnish の使い方①アクセスを中継する
• 要求を受けて、サーバへ飛ばす
•飛ばすサーバの定義
backend web01 {
.host = "10.x.x.x";
.port = "80";
.connect_timeout = 15s;
}
•どんな要求が来た時、どこに飛ばすか?
sub vcl_recv {
if ( req.http.host == "allabout.co.jp") {
if( req.url == "/test/" ){
set req.backend = web01;
} elsif( req.url ~ “^/test02/“ ) { # 正規表現も可能
set req.backend = web02;
} else{
set req.backend = web03;
}
}
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方①アクセスを中継する
• 分散して飛ばす
・飛ばすサーバ群
director web02_04 round-robin {
{.backend = web02;}
{.backend = web03;}
{.backend = web04;}
}
sub vcl_recv {
if ( req.http.host == "allabout.co.jp") {
if( req.url == "/test/" ){
set req.backend = aaweb02_04;
}
}
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方①アクセスを中継する
• 分散して飛ばす
– 飛ばし方は?
• round-robin ← ほとんどこれ
• fallback
• random 、 client 、 hash
– ヘルスチェック
お亡くなりになった
サーバには飛ばさない
director web02_04 round-robin {
{.backend = web02;}
{.backend = web03;}
{.backend = web04;}
}
backend aaweb01 {
.host = "10.x.x.x";
.port = "80";
.connect_timeout = 30s;
.probe = {
.request =
"GET /health.php HTTP/1.0"
"Host: health.jp"
"User-Agent: varnish health check bot"
;
.interval = 10s;
.timeout = 10s;
.window = 5;
.threshold = 3;
}
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方①アクセスを中継する
• アクセス制御
– 許可 ( 拒否 )IP の設定
– あとは if 文でぶち込むだけ!
acl partner_ip {
“x.x.x.x";
“x.x.x.x";
}
sub vcl_recv {
if ( !client.ip ~ partner_ip ) {
error 405 "Not Allowed.";
}
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方①アクセスを中継する
• リダイレクト
– ちょっと書き方が面倒(わざとエラーに飛ば
すみたいな感じ)
– レスポンスが 404 なら、別サーバへ飛ばすこ
とも可能(一部で CDN 機能として使用)
システム部
Copyright 2013 All About,inc.
Varnish の使い方
② キャッシュする
– キャッシュする、しないの判断
– キャッシュ時間
– キャッシュ方法
– gzip 圧縮
Varnish の使い方~ All About での使い方を例に
~
システム部
Copyright 2013 All About,inc.
Varnish の使い方②キャッシュする
• キャッシュする、しないの判断
• 404 のとき、キャッシュしない
sub vcl_recv {
if (req.http.host == "allabout.co.jp") {
if( req.url == "/test/" ){
set req.backend = web01;
return (pass); # キャッシュしない
} else{
set req.backend = web03;
}
}
return (lookup); # キャッシュする
}
sub vcl_fetch {
if ( beresp.status == 404) {
return ( hit_for_pass );
}
return(deliver);
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方②キャッシュする
• キャッシュ方法
– 速度:メモリ > ファイル
– ハイブリッドも可能に
default.vcl
# メモリスペースが無くなれば、
ファイルにキャッシュする
if( storage.st1.free_space > 0B){
set beresp.storage = "st1";
} else {
set beresp.storage = "st2";
}
/etc/sysconfig/varnish
# メモリ
VARNISH_STORAGE1="malloc,2G“
# ファイル
VARNISH_STORAGE2="file,$
{VARNISH_STORAGE_FILE},8G"
• キャッシュ時間
– デフォルトの TTL : 120s
– もちろん個別に設定も可能
– ヘルスチェックと組み合わせると
# オリジンが落ちていた
ら、キャッシュを長く持
たせる
if( req.backend.healthy ) {
set req.grace = 120s;
} else {
set req.grace = 1h;
}
システム部
Copyright 2013 All About,inc.
Varnish の使い方②キャッシュする
• gzip 圧縮
– キャッシュするファイルを gzip 圧縮
– もちろん個別に設定も可能
– 非対応ブラウザの場合は、自動で解凍してくれる
if ( req.url ~ "(.jpg|.JPG|.jpeg|.gif|.GIF|.png|.PNG)$" ) {
set beresp.do_gzip = false;
} else {
set beresp.do_gzip = true;
}
1/4 以下!
システム部
Copyright 2013 All About,inc.
All About の varnish 環境における課題
All About の varnish 環境における課
題
システム部
Copyright 2013 All About,inc.
All About の varnish 環境における課題
• Vcl ファイルの肥大化
– if 分岐がどんどん追加され、ロジックが複雑
化しつつある
– 共通部分を変更する際、影響範囲が大きい
うまくまとめたり、分割したりしたい
システム部
Copyright 2013 All About,inc.
All About の varnish 環境における課題
• ヒット率のさらなる向上
– AA のヒット率はピークで 85% くらい
– キャッシュルールの統一
• できるだけキャッシュしてください
– ドメイン名、クエリストリングの正規化
• 内容が同じ場合は、キャッシュを同じに
• クエリストリングの正規化例( regsub 関数を使用)
  set req.url = regsub(req.url, "(?|&)xxx=[^&]+&?(.+)?$", "12");
  set req.url = regsub(req.url, "(?|&)$", "");
• ドメイン名の正規化例
  if(req.http.host ~ "(?i)(www.)?example.net"){
  set req.http.host = “example.net”;
  }
• これも別サイトとしてキャッシュされる
  /Test?aaa=1&bbb=1
  /Test?bbb=1&aaa=1
システム部
Copyright 2013 All About,inc.
まとめ
• Varnish 依頼がスムーズに
• 課題解決を共に
• Varnish でできること
• 簡単な設定ファイルの見方
システム部
Copyright 2013 All About,inc.
参考
• いわなちゃんさん
– varnish 界の神!
– ブログ http://blog.xcir.net/
– varnish の教科書
  http://blog.xcir.net/wp-
content/uploads/2011/09/VarnishCacheIntrodu
ction_Rev2.pdf
システム部
Copyright 2013 All About,inc.
ご清聴ありがとうございまし
た!

Contenu connexe

Tendances

第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会Yasutaka Hamada
 
Cephベンチマーク kvm
Cephベンチマーク kvmCephベンチマーク kvm
Cephベンチマーク kvmToshimi Kawabata
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話Takanori Sejima
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)Takanori Sejima
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)Takanori Sejima
 
SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行Hironori Tanaka
 
アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用Akihiro Kuwano
 
Amandaを利用した仮想マシンバックアップ
Amandaを利用した仮想マシンバックアップAmandaを利用した仮想マシンバックアップ
Amandaを利用した仮想マシンバックアップVirtualTech Japan Inc.
 
Windows Azure の中でも動いている InfiniBand って何?
Windows Azure の中でも動いている InfiniBand って何?Windows Azure の中でも動いている InfiniBand って何?
Windows Azure の中でも動いている InfiniBand って何?Sunao Tomita
 
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001Takeshi Kuramochi
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)Satoshi Shimazaki
 
Amandaで始めるかんたんバックアップ
Amandaで始めるかんたんバックアップAmandaで始めるかんたんバックアップ
Amandaで始めるかんたんバックアップVirtualTech Japan Inc.
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編Takanori Sejima
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKShuheiUda
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編gree_tech
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
ちゃんとWeb会議
ちゃんとWeb会議ちゃんとWeb会議
ちゃんとWeb会議Masayuki Abe
 

Tendances (19)

InfiniBand on Debian
InfiniBand on DebianInfiniBand on Debian
InfiniBand on Debian
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Cephベンチマーク kvm
Cephベンチマーク kvmCephベンチマーク kvm
Cephベンチマーク kvm
 
TIME_WAITに関する話
TIME_WAITに関する話TIME_WAITに関する話
TIME_WAITに関する話
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)NAND Flash から InnoDB にかけての話(仮)
NAND Flash から InnoDB にかけての話(仮)
 
SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行SANsymphony-Vを使ったSoftLayerへの簡単データ移行
SANsymphony-Vを使ったSoftLayerへの簡単データ移行
 
アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用アメーバピグにおける自作サーバ運用
アメーバピグにおける自作サーバ運用
 
Amandaを利用した仮想マシンバックアップ
Amandaを利用した仮想マシンバックアップAmandaを利用した仮想マシンバックアップ
Amandaを利用した仮想マシンバックアップ
 
Windows Azure の中でも動いている InfiniBand って何?
Windows Azure の中でも動いている InfiniBand って何?Windows Azure の中でも動いている InfiniBand って何?
Windows Azure の中でも動いている InfiniBand って何?
 
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
OpenStack を 拡張する NetApp Unified Driver の使い方 Vol.001
 
OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)OSC 2011 Hokkaido 自宅SAN友の会(後半)
OSC 2011 Hokkaido 自宅SAN友の会(後半)
 
Amandaで始めるかんたんバックアップ
Amandaで始めるかんたんバックアップAmandaで始めるかんたんバックアップ
Amandaで始めるかんたんバックアップ
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
LagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDKLagopusとAzureとIPsecとDPDK
LagopusとAzureとIPsecとDPDK
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
ちゃんとWeb会議
ちゃんとWeb会議ちゃんとWeb会議
ちゃんとWeb会議
 

En vedette

Varnishのログの眺め方
Varnishのログの眺め方Varnishのログの眺め方
Varnishのログの眺め方Iwana Chan
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESIIwana Chan
 
国内最大級の総合情報メディアを支えるVarnish Cache
国内最大級の総合情報メディアを支えるVarnish Cache国内最大級の総合情報メディアを支えるVarnish Cache
国内最大級の総合情報メディアを支えるVarnish CacheKazuto Ohara
 
Varnish Cache Plus. Random notes for wise web developers
Varnish Cache Plus. Random notes for wise web developersVarnish Cache Plus. Random notes for wise web developers
Varnish Cache Plus. Random notes for wise web developersCarlos Abalde
 
できる!Varnish ~もう一歩踏み出すためのTips~
できる!Varnish ~もう一歩踏み出すためのTips~できる!Varnish ~もう一歩踏み出すためのTips~
できる!Varnish ~もう一歩踏み出すためのTips~Iwana Chan
 
Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Iwana Chan
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
RedisととあるシステムTakehiro Torigaki
 
料理を楽しくする画像配信システム
料理を楽しくする画像配信システム料理を楽しくする画像配信システム
料理を楽しくする画像配信システムIssei Naruta
 
EC2とVarnishで画像配信
EC2とVarnishで画像配信EC2とVarnishで画像配信
EC2とVarnishで画像配信Issei Naruta
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦いYuto Komai
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 

En vedette (12)

Varnishのログの眺め方
Varnishのログの眺め方Varnishのログの眺め方
Varnishのログの眺め方
 
VarnishではじめるESI
VarnishではじめるESIVarnishではじめるESI
VarnishではじめるESI
 
国内最大級の総合情報メディアを支えるVarnish Cache
国内最大級の総合情報メディアを支えるVarnish Cache国内最大級の総合情報メディアを支えるVarnish Cache
国内最大級の総合情報メディアを支えるVarnish Cache
 
Varnish Cache Plus. Random notes for wise web developers
Varnish Cache Plus. Random notes for wise web developersVarnish Cache Plus. Random notes for wise web developers
Varnish Cache Plus. Random notes for wise web developers
 
できる!Varnish ~もう一歩踏み出すためのTips~
できる!Varnish ~もう一歩踏み出すためのTips~できる!Varnish ~もう一歩踏み出すためのTips~
できる!Varnish ~もう一歩踏み出すためのTips~
 
Varnish
VarnishVarnish
Varnish
 
Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料Varnish 4.0 Release Party in Tokyo発表資料
Varnish 4.0 Release Party in Tokyo発表資料
 
Redisととあるシステム
RedisととあるシステムRedisととあるシステム
Redisととあるシステム
 
料理を楽しくする画像配信システム
料理を楽しくする画像配信システム料理を楽しくする画像配信システム
料理を楽しくする画像配信システム
 
EC2とVarnishで画像配信
EC2とVarnishで画像配信EC2とVarnishで画像配信
EC2とVarnishで画像配信
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 

Similaire à Varnishの使い方~All Aboutでの使い方を例に~

もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Masashi Shinbara
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~Takashi Honda
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定Ryo Maruyama
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~Ryo Fujiwara
 
Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談Masahito Yoshida
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化Yuki Kanazawa
 
WordPress アジュール部 ハンズオン
WordPress アジュール部 ハンズオンWordPress アジュール部 ハンズオン
WordPress アジュール部 ハンズオンMasaki Takeda
 
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用Takashi Kozu
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムSatoshi Iijima
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作アシアル株式会社
 
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみようアシアル株式会社
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】株式会社キャッチアップ
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜gree_tech
 
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤Daichi Koike
 

Similaire à Varnishの使い方~All Aboutでの使い方を例に~ (20)

もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
 
Paa s and oss
Paa s and ossPaa s and oss
Paa s and oss
 
Webサーバの性能測定
Webサーバの性能測定Webサーバの性能測定
Webサーバの性能測定
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
 
Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談Wakame-vdc 開発苦労談
Wakame-vdc 開発苦労談
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 
WordPress アジュール部 ハンズオン
WordPress アジュール部 ハンズオンWordPress アジュール部 ハンズオン
WordPress アジュール部 ハンズオン
 
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用
サーバレス構成の運用・監視と自社製Data○ogもどきの話 公開用
 
Flumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システムFlumeを活用したAmebaにおける大規模ログ収集システム
Flumeを活用したAmebaにおける大規模ログ収集システム
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
Fluentd meetup #2
Fluentd meetup #2Fluentd meetup #2
Fluentd meetup #2
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
 
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
【アシアル塾】Linux超入門編・第二回 仮想サーバー上にLAMP環境を構築してみよう
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
baserCMSのキャッシュの仕組み~もうキャッシュでハマらない!!~【勉強会資料】
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤
db tech showcase 東京 2014 - Couchbase Serverを用いた大規模データ収集基盤
 

Plus de Kazuto Ohara

副業が私にもたらした2つのシフト
副業が私にもたらした2つのシフト副業が私にもたらした2つのシフト
副業が私にもたらした2つのシフトKazuto Ohara
 
クラウド&コンテナ活用でDevOpsを加速させる!
クラウド&コンテナ活用でDevOpsを加速させる!クラウド&コンテナ活用でDevOpsを加速させる!
クラウド&コンテナ活用でDevOpsを加速させる!Kazuto Ohara
 
オールアバウトの DevOpsと リリースフロー
オールアバウトのDevOpsとリリースフローオールアバウトのDevOpsとリリースフロー
オールアバウトの DevOpsと リリースフローKazuto Ohara
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Kazuto Ohara
 
オールアバウトにおける技術への取り組み
オールアバウトにおける技術への取り組みオールアバウトにおける技術への取り組み
オールアバウトにおける技術への取り組みKazuto Ohara
 
オールアバウトにおけるオンプレミス・クラウド使い分けポイント
オールアバウトにおけるオンプレミス・クラウド使い分けポイントオールアバウトにおけるオンプレミス・クラウド使い分けポイント
オールアバウトにおけるオンプレミス・クラウド使い分けポイントKazuto Ohara
 

Plus de Kazuto Ohara (6)

副業が私にもたらした2つのシフト
副業が私にもたらした2つのシフト副業が私にもたらした2つのシフト
副業が私にもたらした2つのシフト
 
クラウド&コンテナ活用でDevOpsを加速させる!
クラウド&コンテナ活用でDevOpsを加速させる!クラウド&コンテナ活用でDevOpsを加速させる!
クラウド&コンテナ活用でDevOpsを加速させる!
 
オールアバウトの DevOpsと リリースフロー
オールアバウトのDevOpsとリリースフローオールアバウトのDevOpsとリリースフロー
オールアバウトの DevOpsと リリースフロー
 
Chef概論とレシピ実践入門
Chef概論とレシピ実践入門Chef概論とレシピ実践入門
Chef概論とレシピ実践入門
 
オールアバウトにおける技術への取り組み
オールアバウトにおける技術への取り組みオールアバウトにおける技術への取り組み
オールアバウトにおける技術への取り組み
 
オールアバウトにおけるオンプレミス・クラウド使い分けポイント
オールアバウトにおけるオンプレミス・クラウド使い分けポイントオールアバウトにおけるオンプレミス・クラウド使い分けポイント
オールアバウトにおけるオンプレミス・クラウド使い分けポイント
 

Dernier

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Varnishの使い方~All Aboutでの使い方を例に~

  • 1. システム部 Copyright 2013 All About,inc. 1 varnish Varnish の使い方 ~ All About での使い方を例に~ 2013/02/26 システム部勉強会 ( 2013/5/8 修正) 大原 和人(やまと)
  • 2. システム部 Copyright 2013 All About,inc. 2 発表の目的 • Varnish って何に使っているのかよくわからない • Varnish の設定ファイルが意味不明 • Varnish …の基本的なことはわかるけど • こういう使い方もできそうだ! • こういう風に依頼すればいいのか! • こうしたら、もっと良くなるんじゃないか! • 自分のサイトにも入れてみよう!
  • 3. システム部 Copyright 2013 All About,inc. 3 目次 1. Varnish の基礎知識 2. All About の varnish 環境 3. Varnish の使い方~ All About を例に~ ① アクセスを中継する ② キャッシュする 1. All About の Varnish 環境の課題 2. まとめ
  • 4. システム部 Copyright 2013 All About,inc. Varnish の基礎知識 • Varnish – HTTP アクセラレータ – リバースプロキシ – キャッシュサーバ • アクセスを中継する – 適切なサーバへ要求を振り分け • キャッシュする – 高速化、負荷軽減
  • 5. システム部 Copyright 2013 All About,inc. Varnish の基礎知識 • 高速、多機能、拡張可能 • 設定ファイルは主に 2 種類 – /etc/varnish/default.vcl – /etc/sysconfig/varnish • VCL ファイル – C 言語に似た言語で記述される – C 言語で独自の拡張モジュールの作成も可能
  • 6. システム部 Copyright 2013 All About,inc. All About の varnish 環境 • サーバ構成
  • 7. システム部 Copyright 2013 All About,inc. All About の varnish 環境 • サーバ構成 – LB 故障時を考慮し、グローバル直でのアクセ スもラウンドロビンに入れている – DC (オンプレ)のトラフィック増の問題が あったため、クラウドのキャッシュサーバを立 てて分散させた
  • 8. システム部 Copyright 2013 All About,inc. Varnish の使い方 ① アクセスを中継する – 要求を受けて、サーバへ飛ばす – 分散して飛ばす – アクセス制御 – リダイレクト Varnish の使い方~ All About での使い方を例に ~
  • 9. システム部 Copyright 2013 All About,inc. Varnish の使い方①アクセスを中継する • 要求を受けて、サーバへ飛ばす •飛ばすサーバの定義 backend web01 { .host = "10.x.x.x"; .port = "80"; .connect_timeout = 15s; } •どんな要求が来た時、どこに飛ばすか? sub vcl_recv { if ( req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = web01; } elsif( req.url ~ “^/test02/“ ) { # 正規表現も可能 set req.backend = web02; } else{ set req.backend = web03; } } }
  • 10. システム部 Copyright 2013 All About,inc. Varnish の使い方①アクセスを中継する • 分散して飛ばす ・飛ばすサーバ群 director web02_04 round-robin { {.backend = web02;} {.backend = web03;} {.backend = web04;} } sub vcl_recv { if ( req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = aaweb02_04; } } }
  • 11. システム部 Copyright 2013 All About,inc. Varnish の使い方①アクセスを中継する • 分散して飛ばす – 飛ばし方は? • round-robin ← ほとんどこれ • fallback • random 、 client 、 hash – ヘルスチェック お亡くなりになった サーバには飛ばさない director web02_04 round-robin { {.backend = web02;} {.backend = web03;} {.backend = web04;} } backend aaweb01 { .host = "10.x.x.x"; .port = "80"; .connect_timeout = 30s; .probe = { .request = "GET /health.php HTTP/1.0" "Host: health.jp" "User-Agent: varnish health check bot" ; .interval = 10s; .timeout = 10s; .window = 5; .threshold = 3; } }
  • 12. システム部 Copyright 2013 All About,inc. Varnish の使い方①アクセスを中継する • アクセス制御 – 許可 ( 拒否 )IP の設定 – あとは if 文でぶち込むだけ! acl partner_ip { “x.x.x.x"; “x.x.x.x"; } sub vcl_recv { if ( !client.ip ~ partner_ip ) { error 405 "Not Allowed."; } }
  • 13. システム部 Copyright 2013 All About,inc. Varnish の使い方①アクセスを中継する • リダイレクト – ちょっと書き方が面倒(わざとエラーに飛ば すみたいな感じ) – レスポンスが 404 なら、別サーバへ飛ばすこ とも可能(一部で CDN 機能として使用)
  • 14. システム部 Copyright 2013 All About,inc. Varnish の使い方 ② キャッシュする – キャッシュする、しないの判断 – キャッシュ時間 – キャッシュ方法 – gzip 圧縮 Varnish の使い方~ All About での使い方を例に ~
  • 15. システム部 Copyright 2013 All About,inc. Varnish の使い方②キャッシュする • キャッシュする、しないの判断 • 404 のとき、キャッシュしない sub vcl_recv { if (req.http.host == "allabout.co.jp") { if( req.url == "/test/" ){ set req.backend = web01; return (pass); # キャッシュしない } else{ set req.backend = web03; } } return (lookup); # キャッシュする } sub vcl_fetch { if ( beresp.status == 404) { return ( hit_for_pass ); } return(deliver); }
  • 16. システム部 Copyright 2013 All About,inc. Varnish の使い方②キャッシュする • キャッシュ方法 – 速度:メモリ > ファイル – ハイブリッドも可能に default.vcl # メモリスペースが無くなれば、 ファイルにキャッシュする if( storage.st1.free_space > 0B){ set beresp.storage = "st1"; } else { set beresp.storage = "st2"; } /etc/sysconfig/varnish # メモリ VARNISH_STORAGE1="malloc,2G“ # ファイル VARNISH_STORAGE2="file,$ {VARNISH_STORAGE_FILE},8G" • キャッシュ時間 – デフォルトの TTL : 120s – もちろん個別に設定も可能 – ヘルスチェックと組み合わせると # オリジンが落ちていた ら、キャッシュを長く持 たせる if( req.backend.healthy ) { set req.grace = 120s; } else { set req.grace = 1h; }
  • 17. システム部 Copyright 2013 All About,inc. Varnish の使い方②キャッシュする • gzip 圧縮 – キャッシュするファイルを gzip 圧縮 – もちろん個別に設定も可能 – 非対応ブラウザの場合は、自動で解凍してくれる if ( req.url ~ "(.jpg|.JPG|.jpeg|.gif|.GIF|.png|.PNG)$" ) { set beresp.do_gzip = false; } else { set beresp.do_gzip = true; } 1/4 以下!
  • 18. システム部 Copyright 2013 All About,inc. All About の varnish 環境における課題 All About の varnish 環境における課 題
  • 19. システム部 Copyright 2013 All About,inc. All About の varnish 環境における課題 • Vcl ファイルの肥大化 – if 分岐がどんどん追加され、ロジックが複雑 化しつつある – 共通部分を変更する際、影響範囲が大きい うまくまとめたり、分割したりしたい
  • 20. システム部 Copyright 2013 All About,inc. All About の varnish 環境における課題 • ヒット率のさらなる向上 – AA のヒット率はピークで 85% くらい – キャッシュルールの統一 • できるだけキャッシュしてください – ドメイン名、クエリストリングの正規化 • 内容が同じ場合は、キャッシュを同じに • クエリストリングの正規化例( regsub 関数を使用)   set req.url = regsub(req.url, "(?|&)xxx=[^&]+&?(.+)?$", "12");   set req.url = regsub(req.url, "(?|&)$", ""); • ドメイン名の正規化例   if(req.http.host ~ "(?i)(www.)?example.net"){   set req.http.host = “example.net”;   } • これも別サイトとしてキャッシュされる   /Test?aaa=1&bbb=1   /Test?bbb=1&aaa=1
  • 21. システム部 Copyright 2013 All About,inc. まとめ • Varnish 依頼がスムーズに • 課題解決を共に • Varnish でできること • 簡単な設定ファイルの見方
  • 22. システム部 Copyright 2013 All About,inc. 参考 • いわなちゃんさん – varnish 界の神! – ブログ http://blog.xcir.net/ – varnish の教科書   http://blog.xcir.net/wp- content/uploads/2011/09/VarnishCacheIntrodu ction_Rev2.pdf
  • 23. システム部 Copyright 2013 All About,inc. ご清聴ありがとうございまし た!