ボトルネックを解消せよ

38
ボトルネックを解消せよ! 2014/07/02 サーバサイド技術統括部&インフラ部 林 正紀

Upload: masanori-hayashi

Post on 07-Jul-2015

941 views

Category:

Technology


2 download

DESCRIPTION

社内勉強会での発表資料

TRANSCRIPT

Page 1: ボトルネックを解消せよ

ボトルネックを解消せよ!2014/07/02

サーバサイド技術統括部&インフラ部

林正紀

Page 2: ボトルネックを解消せよ

自己紹介

•林正紀 (HAYASHI Masanori)

• 1974年9月12日生(39歳)独身

•埼玉生まれ、埼玉育ち(ふじみ野市在住)

•埼玉大学/大学院・数学専攻

• @m_norii

• http://norii.hatenablog.com/

• https://www.facebook.com/m.norii

Page 3: ボトルネックを解消せよ

ボトルネックとは?

Page 4: ボトルネックを解消せよ

ココ

Page 5: ボトルネックを解消せよ

ボトルネックとはボトルネック (bottleneck) とは、システム設計上の制約の概念。英語の「瓶の首」の意。物事がスムーズに進行しない場合、遅延の原因は全体から見れば小さな部分が要因となり、他所をいくら向上させても状況改善が認められない場合が多い。このような部分を、ボトルネックという。瓶のサイズがどれほど大きくても、中身の流出量・速度(スループット)は、狭まった首のみに制約を受けることからの連想である。

Wikipedia「ボトルネック」

http://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%88%E3%83%AB%E3%83%8D%E3%83%83%E3%82%AF

Page 6: ボトルネックを解消せよ

ここを改善する必要がある

Page 7: ボトルネックを解消せよ

日常生活におけるボトルネック

Page 8: ボトルネックを解消せよ

業務におけるボトルネック

Page 9: ボトルネックを解消せよ

関連ワード:クリティカルパス

A:3日

B:1日

C:2日

D:5日 E:3日

F:3日G:4日

Page 10: ボトルネックを解消せよ

関連ワード:クリティカルパス

A:3日

B:1日

C:2日

D:5日 E:3日

F:3日G:4日

Page 11: ボトルネックを解消せよ

データセンター

Webサービスにおけるボトルネック要因

Internet

Page 12: ボトルネックを解消せよ

データセンター

Webサービスにおけるボトルネック要因

Internet

ネット回線 ルータ性能

Webサーバ処理

DB/Cacheサーバとの通信

DB/Cacheサーバ処理

DC内通信帯域

DC外との通信帯域

クライアント側処理

Page 13: ボトルネックを解消せよ

事例:Webサーバ処理

•所持カードを攻撃力でソート、みたいな処理function card_sort($arr){

$length=count($arr);

for($j=0; $j<$length-1; $j++){for($i=0; $i<$length-1; $i++){

if($arr[$i]>$arr[$i+1]){$tmp = $arr[$i];$arr[$i] = $arr[$i+1];$arr[$i+1] = $tmp;

}}

}}

Page 14: ボトルネックを解消せよ

それ、標準関数でできるよ!

Page 15: ボトルネックを解消せよ

事例:Webサーバ処理

function card_sort($arr){$length=count($arr);

for($j=0; $j<$length-1; $j++){for($i=0; $i<$length-1; $i++){

if($arr[$i]>$arr[$i+1]){$tmp = $arr[$i];$arr[$i] = $arr[$i+1];$arr[$i+1] = $tmp;

}}

}}

function card_sort($arr){sort($arr);return $arr;

}

Before After

Page 16: ボトルネックを解消せよ

事例:Webサーバ処理

• PHP標準関数はかなり多彩知っていれば1行で終わってしまうことも多い

• (PHPに限らず)標準で提供している機能を極力使いこなそう

• PHPが苦手な処理は、system()関数使って、OSコマンドで処理する手もあり

Page 17: ボトルネックを解消せよ

ツール:Xhprof(プロファイラ)

Page 18: ボトルネックを解消せよ

事例:WebサーバとDB/Cacheサーバの通信

Webサーバ DBサーバ

レスポンスデータサイズが大きすぎ

Page 19: ボトルネックを解消せよ

事例:WebサーバとDB/Cacheサーバの通信

Webサーバ DBサーバ

1回の処理に対し何回も問い合わせしすぎ

Page 20: ボトルネックを解消せよ

事例:WebサーバとDB/Cacheサーバの通信•できるだけ必要なデータだけを返すようにする

•問い合わせ回数を減らす• DB → 子テーブルは IN句を使ってまとめて取得

• Memcache → getMulti()

• Redis → mget()

Page 21: ボトルネックを解消せよ

Before

事例:WebサーバとDB/Cacheサーバの通信•通信経路を最短に

After

Webサーバ Cacheサーバ

Webサーバ

Web(PHP)

Cache

物理的に別サーバWebサーバにCacheサーバも内蔵→サーバ間通信コストを削減

Page 22: ボトルネックを解消せよ

ところで

Page 23: ボトルネックを解消せよ

レスポンスを小さく

Webサーバ DBサーバ

レスポンスデータサイズが大きすぎ

Page 24: ボトルネックを解消せよ

問い合わせ回数減らす

Webサーバ DBサーバ

1回の処理に対し何回も問い合わせしすぎ

Page 25: ボトルネックを解消せよ

Before

通信経路を最短に

After

Webサーバ Cacheサーバ

Webサーバ

Web(PHP)

Cache

物理的に別サーバWebサーバにCacheサーバも内蔵→サーバ間通信コストを削減

Page 26: ボトルネックを解消せよ

は、サーバサイド/インフラに限った話では無い!

Page 27: ボトルネックを解消せよ

レスポンスを小さく

─ ─ ─ ── ─ ─ ── ─ ─ ─

画像ファイル

テキストファイル

Page 28: ボトルネックを解消せよ

レスポンスを小さく

•画像/音声/動画など、各種メディアファイルは適切なサイズを模索• 表現を豊かにすれば、ファイルサイズは一般に大きくなる許容できる範囲を決めておくことが大事

•テキストデータはgzipで圧縮して転送• gzip圧縮を利用することで、送信するサーバでの圧縮/受信するクライアントでの展開処理にはコストかかるようになるが、一般にはそれよりもネットワークコストの削減の方が大きい

Page 29: ボトルネックを解消せよ

問い合わせ回数減らす

Page 30: ボトルネックを解消せよ

問い合わせ回数減らす

•フロントエンドのテクニックとして有名なのが「CSSスプライト」

•細かい画像を逐一Webサーバに問い合わせる処理を削減

•ただし、運用はしにくくなるので使いどころをよく検討する必要あり• 頻繁に変更が入りそうなものはスプライト化しないほうがいい

Page 31: ボトルネックを解消せよ

ツール:Google Chrome検証ツール

Page 32: ボトルネックを解消せよ

ツール:Fiddler

Page 33: ボトルネックを解消せよ

After

Before

通信経路を最短にDataCenter

DataCenter

Internet

Internet

CDN Cache

Page 34: ボトルネックを解消せよ

通信経路を最短に

• Akamaiなど、CDN(Contents Delivery Network)を利用

•エンドユーザに最も近いサーバ(エッジサーバ)からデータを返す

Page 35: ボトルネックを解消せよ

・・・というわけでボトルネックとなる箇所の「パターン」はシステム全体のどの部分であれ、類似性がある

Page 36: ボトルネックを解消せよ

職種別:パフォーマンス向上のために意識して欲しいことディレクター/プランナー 仕様の軽量化

デザイナー ファイルサイズの軽量化

マークアップ CSSスプライト、CSS/JSのminify、JavaScript DOM操作の最適化

ネイティブ 効率良いアルゴリズムの選択

サーバサイド 効率よいアルゴリズムの選択DB/Cacheの効率的な使用

インフラ ボトルネックを発見するために必要な指標を記録しておく

Page 37: ボトルネックを解消せよ

まとめ

•ボトルネックとは、システムのパフォーマンスを決定づける場所

•ボトルネックではない場所を改善しても(直近では)意味が無い

•1つのボトルネックを解消すると、別の箇所がボトルネックになる• パフォーマンス改善はボトルネック解消との終わりなき戦い

Page 38: ボトルネックを解消せよ

ご清聴ありがとうございました