43
ISUCONの話 2013/08/01 LINE株式会社 田籠 (@tagomoris) 1382日金曜日

Isucon summer class_2013

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Isucon summer class_2013

ISUCONの話

2013/08/01

LINE株式会社田籠 聡 (@tagomoris)

13年8月2日金曜日

Page 2: Isucon summer class_2013

LINE株式会社開発3センター 開発支援室 開発支援チーム

@tagomoris

13年8月2日金曜日

Page 3: Isucon summer class_2013

LINE株式会社開発3センター 開発支援室 開発支援チーム

@kazeburo

13年8月2日金曜日

Page 4: Isucon summer class_2013

ISUCONとは

「いい感じに」(Iikanjini)

「スピードアップ」(Speed Up)

「コンテスト」(CONtest)

本当です

13年8月2日金曜日

Page 5: Isucon summer class_2013

ISUCONとは

Webアプリケーションを高速化するイベント

1はblog, 2はチケット販売サイト

最も良いスコアを叩き出したチームが優勝

「良スコア」==「良パフォーマンス」

イベント中はベンチマークツールは非公開

13年8月2日金曜日

Page 6: Isucon summer class_2013

レギュレーション(1)

主催者が準備したWebアプリケーションに対して規定の負荷をかけ、所定の数の処理が全て完了するまでの時間を競う

バックグラウンド負荷(GET処理)について規定以上の率で正常な応答を返すことを最低条件とする

その上で、特定の一連の更新処理を所定回数完了するまでの時間をスコアとし、最も短いチームを勝者とする

Perl/Ruby/Python/PHP/Node.js で記述されたWebアプリケーションを基準アプリケーションとして提供します

Java による実装が追加される可能性があります

13年8月2日金曜日

Page 7: Isucon summer class_2013

レギュレーション(2)チーム単位(2名もしくは3名)での参加とし、チーム毎に仮想サーバとして4台程度のLinuxサーバが与えられる

今回、1名での参加は不可とします

リバースプロキシ、Web/AP(2台)、DB、の構成で計画しています

与えられたWebアプリケーションにおける以下の機能を変えないこと

アクセス先のURI

レスポンス(HTML)のDOM構造

ブラウザで表示した際の見た目(問題ない範囲で)、およびJavascript/CSSの効果

アプリケーションが提供するデータの一貫性の保持

13年8月2日金曜日

Page 8: Isucon summer class_2013

レギュレーション(3)上記のレギュレーション項目が守られればいかなる変更も可とする

HTMLやJS/CSSなど、コンテンツの最適化

DBスキーマの変更やインデックスの作成・削除、キャッシュ機構の追加

jobqueue機構の追加による遅延書き込み (レギュレーションの一貫性に関する条項を満たすこと)

他の言語による再実装

Webサーバソフトウェアやデータベースソフトウェアの変更

ただしコンテスト実施上必要ないくつかのメンテナンス機能について互換性を保つこと

13年8月2日金曜日

Page 9: Isucon summer class_2013

user4

user3

user2

user1

※イメージ

serverserver

server

serverserver

server

serverserver

serverserverserver

server

bench

高負荷アクセス動作チェック

13年8月2日金曜日

Page 10: Isucon summer class_2013

13年8月2日金曜日

Page 11: Isucon summer class_2013

ぼくらのお仕事について

Webサービス/インターネットサービスの提供

サーバサイドの環境構築・プログラミング

ネットワーク、サーバ、OS

httpd, RDBMS, KVS などのミドルウェア

プログラムコード

要するにISUCONの作業対象ほとんど

13年8月2日金曜日

Page 12: Isucon summer class_2013

ISUCON参加者の人々インターネットサービス関連の人が多い

会社の同僚でチームを組む例が多い

他には勉強会などでの知り合い同士など

スキル的にはいろいろ

ITインフラ専門の人ばかりのチーム

ITインフラ + アプリな人のチーム

13年8月2日金曜日

Page 13: Isucon summer class_2013

Webサービスにおけるパフォーマンス

「パフォーマンス」とは

レスポンスタイム:

1リクエスト → 1レスポンス の時間

スループット:

1秒間に返せるレスポンスの数

短いレスポンスタイム、高いスループット

== 「良いパフォーマンス」

13年8月2日金曜日

Page 14: Isucon summer class_2013

パフォーマンス向上の重要性

ユーザ体験の向上

ユーザのアクションにすぐに反応する

入力内容が遅れず反映される

運用コストの低減

必要なサーバ台数の減少

高負荷サーバ減少→メンテナンス手間の削減

13年8月2日金曜日

Page 15: Isucon summer class_2013

ISUCONにおけるパフォーマンス

isスコア

13年8月2日金曜日

Page 16: Isucon summer class_2013

競技概要 ※isucon2レギュレーション資料より

ベンチマークは3分間 + 前後チェック

作業中は1分で実施

チケット完売までの速度を競う

(ただし判定にはスコアを用いる)

13年8月2日金曜日

Page 17: Isucon summer class_2013

採点 (18:00 - 18:30) ※isucon2レギュレーション資料より

18:00 で全参加者の作業を停止

準備が必要なら事前に行うこと

全サーバのrebootを実行

順番に各チームのベンチマークを実施

13年8月2日金曜日

Page 18: Isucon summer class_2013

スコア算出 ※isucon2レギュレーション資料より

X: 完売までの所要時間(ms)

Y: 完売後の購入リクエスト処理数

Z: 全体でのGETリクエスト処理数

X - (Y*0.01 + Z*0.001)

13年8月2日金曜日

Page 19: Isucon summer class_2013

参考スコア ※isucon2レギュレーション資料より

ベンチ走行時間内に完売しない場合

時間と販売数から完売予定時間を逆算して X に使用

1分走行でも3分走行でも同じ得点基準

13年8月2日金曜日

Page 20: Isucon summer class_2013

表彰 ※isucon2レギュレーション資料より

優勝

採点フェイズのベンチ走行で最高スコアを出したチーム

特別賞

作業時間内のベンチ走行において スコア

180,000 未満に最も早く到達したチーム

13年8月2日金曜日

Page 21: Isucon summer class_2013

失格事項 ※isucon2レギュレーション資料より

チケット販売実績が保存されていない

購入処理の結果が1秒以内にGETへのレスポンス内容に反映されていない

エラー/タイムアウトのレスポンスが1%以上ある

その他アプリケーションの動作仕様に変化があるとチェッカが判断した場合

13年8月2日金曜日

Page 22: Isucon summer class_2013

ActionsinISUCON

13年8月2日金曜日

Page 23: Isucon summer class_2013

普段どおりにやる

13年8月2日金曜日

Page 24: Isucon summer class_2013

普段やれないことをやる

13年8月2日金曜日

Page 25: Isucon summer class_2013

ただし安全のために最初の状態を保存しておく

ソースコード、初期データ、初期設定

初期スコアと初期状態

何をやったか記録しておく

ソースコードや設定のバージョン管理

相談内容の記録

13年8月2日金曜日

Page 26: Isucon summer class_2013

ボトルネックを見付けて解決する

HTTPD? connections? cpu? memory?

Application? connections? cpu? memory?

RDBMS? read? write?

Network? data size? latency?

ボトルネックは解決するたびに移っていく

13年8月2日金曜日

Page 27: Isucon summer class_2013

スコア

スコアを向上させる

スコア算出ルールを見る

何を改善すべきかを考える

スコアの揺れ

実行時の状況によって多少の揺れが出る

わずかな差異(誤差)にまどわされない

改善は劇的に行う13年8月2日金曜日

Page 28: Isucon summer class_2013

制限時間時間があります

7時間で何もかもやるのは不可能

最初に落ち着いて内容を把握する

時間と相談してやれそうなことを考える

大きな改造にいつ手をつけるか

早目がよい、ほぼワンチャンス

終了時間に動いてなければならない

13年8月2日金曜日

Page 29: Isucon summer class_2013

Web applicationのキソ

13年8月2日金曜日

Page 30: Isucon summer class_2013

おひとりさま環境manager.js agent.js

http_load bench.js

application server

mysql

:5000

:5001

13年8月2日金曜日

Page 31: Isucon summer class_2013

isucon本番環境manager.js agent.js

http_load bench.js

application server

mysql

:5001

application server

apachehttpd

※それぞれ別のサーバ

13年8月2日金曜日

Page 32: Isucon summer class_2013

at first

use this application by yourself!

13年8月2日金曜日

Page 33: Isucon summer class_2013

web application middlewares

application server:

runs program code

httpd, nginx: web server, reverse proxy

static contents: image, js, css, ...

load balance

cache controls

RDBMS: mysql13年8月2日金曜日

Page 34: Isucon summer class_2013

application server

プログラムを実行して結果を返す

なんでもできる

決まった処理をやらせるにはコストが高い

内容の変わらない処理 (js/css/image)

13年8月2日金曜日

Page 35: Isucon summer class_2013

web serverreverse proxy server設定に従って特定のコンテンツを返す

指定された場所に置いてあるファイルなど

特定のパスについては別のサーバに取りにいって、とってきた結果を返す(proxy)

「別のサーバ」を複数指定して順番に問合せる、とかできる

13年8月2日金曜日

Page 36: Isucon summer class_2013

RDBMS (mysql)

SQLでの問合せに対して結果を返す

SQLが効率的に書かれているかは非常に重要

インデックスをきちんと使えているか

適切なインデックスが作成されているか

同時接続数が多/少なすぎる、なども注意

13年8月2日金曜日

Page 37: Isucon summer class_2013

how to get high scores

serve static files by web server

enhance sql

tune parameters

inject caches

change architecture

13年8月2日金曜日

Page 38: Isucon summer class_2013

serve static fileson web server

execute httpd, and serve static files on it

write configurations

change bench setting to access :80

13年8月2日金曜日

Page 39: Isucon summer class_2013

enhance sql

create index

rewrite sql queries

use JOIN / remove JOIN ...

13年8月2日金曜日

Page 40: Isucon summer class_2013

tune parameters

connections

connections, maxclients, keepalives

processes

application server processes

httpd process/threads

database configuration

13年8月2日金曜日

Page 41: Isucon summer class_2013

inject caches

cache application server response

on reverse proxy

for GETs

13年8月2日金曜日

Page 42: Isucon summer class_2013

change architecture

ex: change datastore from mysql to redis

ex: rewrite overall application

13年8月2日金曜日

Page 43: Isucon summer class_2013

Enjoy ISUCON!

13年8月2日金曜日