SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
俺なりのISUCONとかの
戦い方
2015-10-04
福井技術者の集い #4
りちゃ / @rch850
りちゃ / @rch850

鯖江のエンジニア

OS設定以上

フロントエンド実装以下

ふくもく会とかやってます
高専、専攻科の時
高専ロボコンとか

高専プロコンとか

ACM/ICPCとか
大学院の時
国際VRコンテスト

CGレンダリング
KOF懇親会は 11/6(金)
高専カンファレンスは 11/7(土)
オープンソース、コミュニティ活動等のテーマで発表募集
詳しくは http://kosenconf.jp/?097kof2015
http://isucon.net/
Iikanjini Secure ni surU
Contest
ではありません
Injection de Score wo Update
Contest
でもありません
http://isucon.net/
今回で5回目の開催
263チームが出場
オンライン予選 → 本戦 @ ヒカリエ
予選概要
Google Compute Engine を使う
アクセス数やエラー数などで算出され
るベンチマークスコアを競う
お題は複数言語から選択可能
予選突破条件
最初に3,000点を超えたチーム
上記を除く各日上位4チーム
上記を除く両日合計上位10チーム
上記を除く学生5チーム
3,000点を最初に超えた
チームへしこずの戦い方
9月26日(土)
オンライン予選一日目
会場:福井県産業情報センター
協力:ふくもく会
チーム名:へしこず
メンバー:rch850, macoshita,
emittam
開始0分
「始まってるの?」
「始まってるっぽい」
「あ、一昨日連絡メールきてたわ」
「おえー」
開始5分
ポータルサイトを開き、
様子を見る
「俺インスタンス立てるから、その間
ルール読んどいて」
「「おk」」
「人数分立てるから好き勝手遊んで」
問題のOS、アプリケーションが、イ
メージファイルとして提供される
これを Google Compute Engine で
読み込んで起動する。
インスタンスのスペックは指定されて
いる(当然)
nginx
unicorn
Ruby
sinatra, mysql2-cs-bind
MySQL 5.6
「進⃝ゼミでやったところだ!」
nginx
ユーザからのアクセスを最前線で受け
付けるサーバ
ここで HTML ファイルとかを提供した
り、裏のアプリケーションサーバに渡
したりする
同類:apache, IIS
unicorn
Ruby のアプリケーションを動かせる
サーバ
HTTP 接続を受け付けて、Ruby プロ
セスに投げる
同類:tomcat
Ruby
プログラミング言語
sinatra でウェブアプリケーション
mysql2-cs-bind で MySQL 接続
MySQL
データベースサーバ
バージョンは 5.6
……特に言うことないです
nginx
worker
process
worker
process
unicorn
開始45分
役割分担を決める
・ベンチマークのボトルネック調査
・Rubyのコード見て最適化
・nginx, unicorn の最適化
ベンチマークのボトルネック
nginx で request_time をログに出し
て、遅いリクエストを調べる
処理時間が秒単位なのはほぼ GET /
とにかく GET / をなんとかしよう!
https://github.com/isucon/isucon5-qualify/blob/master/webapp/ruby/app.rb#L164
Rubyのコード見て最適化
ざっとクエリ見てインデックス張る
段階ごとの処理時間をログに出す
ruby のコードをクエリに書き換える
「⃝ソコードを潰す作業」
平常時
「ク⃝コードだ!⃝ソっ!」
ISUCON
「ク⃝コードだ!やったぜ!」
db.query('SELECT * FROM entries ORDER BY
created_at DESC LIMIT 1000').each do |entry|!
next unless is_friend?(entry[:user_id])!
entry[:title] = entry[:body].split(/n/).first!
entries_of_friends << entry!
break if entries_of_friends.size >= 10!
end
とりあえず最新1000件
引っ張ってきて
友達の投稿以外は除去
10件に達したら終わり
これ SQL で書けるやつだ
友達の投稿を取り出すコード
nginx, unicorn の最適化
unicorn の worker_processes を増
やす (20程度)
nginx の worker_processes を増や
す (4)
開始2時間半頃
「ベンチ取るか」
「おー、3000」
「……あれ、3000でトップ!?」
「何度リロードしてもトップだ」
「やったー」
頼んでいた昼食の買い出しがちょうど
帰ってきたので一旦休憩
↑このあたりが、協力:ふくもく会
その後、試合終了まで
MySQL
メモリを使うようにする
(innodb_buffer_pool_size,
innodb_sort_buffer_size)
遅いクエリを探すために slow log を
mysqldumpslow にかける
「サブクエリなんとかならんかなー」
アプリケーション側
erb 内のクエリを最適化
数だけあればいいのに SELECT * して
るのを COUNT に
友達関係は常に両思いだから片方だけ
チェック
予選結果
最終スコア 12,616点

トップは 27,232点
3,000点に最も早く到達したチーム枠
で本戦出場
月末の本戦が本番!
俺たちの戦いはこれからだ!
おまけ
ISUCON「とか」の戦い方
「とか」とは
ICPC 2004 アジア地区予選愛媛大会
読む、解く、打ち込むの3人体制
4問解いて7位
役割分担
あくまで初期の役割分担
時間が経つと役割が交わり、最適化され
ていく
短期決戦は本当に時間が無い
役割分担大事!

Contenu connexe

Similaire à 俺なりのISUCONとかの戦い方

Asp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリングAsp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリングKiyoaki Tsurutani
 
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度Katz Ueno
 
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...Game Tools & Middleware Forum
 
20170624 発表資料-ml
20170624 発表資料-ml20170624 発表資料-ml
20170624 発表資料-mlOzawa Kensuke
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift PlaygroundsへKinkumaDesign
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話Suguru Shirai
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringIssei Hiraoka
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Toshiaki Maki
 
IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementKiyoshi Ogawa
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~Hideki Takase
 
ICT Trouble Shooting Contest
ICT Trouble Shooting ContestICT Trouble Shooting Contest
ICT Trouble Shooting Contestkuro kuro
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略GuildWorks
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiTadahiro Ishisaka
 
ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道Hideki Akiba
 
リーンとかいろいろあるけどどう違うの
リーンとかいろいろあるけどどう違うのリーンとかいろいろあるけどどう違うの
リーンとかいろいろあるけどどう違うのTaro Kawai
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryTomoyuki Obi
 

Similaire à 俺なりのISUCONとかの戦い方 (20)

Asp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリングAsp.netアプリケーションの最新プロファイリング
Asp.netアプリケーションの最新プロファイリング
 
ETロボコンのすすめ
ETロボコンのすすめETロボコンのすすめ
ETロボコンのすすめ
 
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度
CloudFormation ことはじめ - JAWS UG 名古屋 2019年7月度
 
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ |  エピック・ゲームズ・ジャパ...
GTMF 2015: UE4で開発環境は次なるステージへ~才能のコラボーレーションでクリエイティビティはさらなる高みへ~ | エピック・ゲームズ・ジャパ...
 
20170624 発表資料-ml
20170624 発表資料-ml20170624 発表資料-ml
20170624 発表資料-ml
 
ようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへようこそ! Swift Playgroundsへ
ようこそ! Swift Playgroundsへ
 
ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話ISUCON5 予選をPHPで戦った話
ISUCON5 予選をPHPで戦った話
 
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/SpringVisual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
Visual Studio Code のこれまでとこれから at OSC 2021 Online/Spring
 
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
 
IoT Cyber Security Counter Measurement
IoT Cyber Security Counter MeasurementIoT Cyber Security Counter Measurement
IoT Cyber Security Counter Measurement
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
 
ICT Trouble Shooting Contest
ICT Trouble Shooting ContestICT Trouble Shooting Contest
ICT Trouble Shooting Contest
 
Friendly
FriendlyFriendly
Friendly
 
Com camp2014
Com camp2014Com camp2014
Com camp2014
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
Visual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsiVisual studio 2015 update1 ctpとcsi
Visual studio 2015 update1 ctpとcsi
 
ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道ぼっけもんデザイナーへの道
ぼっけもんデザイナーへの道
 
リーンとかいろいろあるけどどう違うの
リーンとかいろいろあるけどどう違うのリーンとかいろいろあるけどどう違うの
リーンとかいろいろあるけどどう違うの
 
Logic Apps/Flow Update Summary
Logic Apps/Flow Update SummaryLogic Apps/Flow Update Summary
Logic Apps/Flow Update Summary
 

Plus de rch850 -

宇宙アイデアソン in 福井 2016
宇宙アイデアソン in 福井 2016宇宙アイデアソン in 福井 2016
宇宙アイデアソン in 福井 2016rch850 -
 
劇場版ラブライブ!入場特典の需要と供給
劇場版ラブライブ!入場特典の需要と供給劇場版ラブライブ!入場特典の需要と供給
劇場版ラブライブ!入場特典の需要と供給rch850 -
 
落ちないサービスをAWSで
落ちないサービスをAWSで落ちないサービスをAWSで
落ちないサービスをAWSでrch850 -
 
Traditional server 3477
Traditional server 3477Traditional server 3477
Traditional server 3477rch850 -
 
Storage & content delivery amazon s3 4738
Storage & content delivery amazon s3 4738Storage & content delivery amazon s3 4738
Storage & content delivery amazon s3 4738rch850 -
 
Lambda 4153
Lambda 4153Lambda 4153
Lambda 4153rch850 -
 
Generic database 3464
Generic database 3464Generic database 3464
Generic database 3464rch850 -
 
Elastic load balancing 3575
Elastic load balancing 3575Elastic load balancing 3575
Elastic load balancing 3575rch850 -
 
Database dynamo db-4734
Database dynamo db-4734Database dynamo db-4734
Database dynamo db-4734rch850 -
 
Database amazon rds 4731
Database amazon rds 4731Database amazon rds 4731
Database amazon rds 4731rch850 -
 
Client 5088
Client 5088Client 5088
Client 5088rch850 -
 
Amazon rds 3605
Amazon rds 3605Amazon rds 3605
Amazon rds 3605rch850 -
 
Amazon ec2 instances 3621
Amazon ec2 instances 3621Amazon ec2 instances 3621
Amazon ec2 instances 3621rch850 -
 
Aws cloud 3654
 Aws cloud 3654 Aws cloud 3654
Aws cloud 3654rch850 -
 
ものづくりのためのFACEモデル
ものづくりのためのFACEモデルものづくりのためのFACEモデル
ものづくりのためのFACEモデルrch850 -
 
capify all
capify allcapify all
capify allrch850 -
 
半文半理の大学院から来ました
半文半理の大学院から来ました半文半理の大学院から来ました
半文半理の大学院から来ましたrch850 -
 
Applied linear algebra
Applied linear algebraApplied linear algebra
Applied linear algebrarch850 -
 
なにが?どうなる?WebGL
なにが?どうなる?WebGLなにが?どうなる?WebGL
なにが?どうなる?WebGLrch850 -
 

Plus de rch850 - (20)

宇宙アイデアソン in 福井 2016
宇宙アイデアソン in 福井 2016宇宙アイデアソン in 福井 2016
宇宙アイデアソン in 福井 2016
 
劇場版ラブライブ!入場特典の需要と供給
劇場版ラブライブ!入場特典の需要と供給劇場版ラブライブ!入場特典の需要と供給
劇場版ラブライブ!入場特典の需要と供給
 
落ちないサービスをAWSで
落ちないサービスをAWSで落ちないサービスをAWSで
落ちないサービスをAWSで
 
User 3486
User 3486User 3486
User 3486
 
Traditional server 3477
Traditional server 3477Traditional server 3477
Traditional server 3477
 
Storage & content delivery amazon s3 4738
Storage & content delivery amazon s3 4738Storage & content delivery amazon s3 4738
Storage & content delivery amazon s3 4738
 
Lambda 4153
Lambda 4153Lambda 4153
Lambda 4153
 
Generic database 3464
Generic database 3464Generic database 3464
Generic database 3464
 
Elastic load balancing 3575
Elastic load balancing 3575Elastic load balancing 3575
Elastic load balancing 3575
 
Database dynamo db-4734
Database dynamo db-4734Database dynamo db-4734
Database dynamo db-4734
 
Database amazon rds 4731
Database amazon rds 4731Database amazon rds 4731
Database amazon rds 4731
 
Client 5088
Client 5088Client 5088
Client 5088
 
Amazon rds 3605
Amazon rds 3605Amazon rds 3605
Amazon rds 3605
 
Amazon ec2 instances 3621
Amazon ec2 instances 3621Amazon ec2 instances 3621
Amazon ec2 instances 3621
 
Aws cloud 3654
 Aws cloud 3654 Aws cloud 3654
Aws cloud 3654
 
ものづくりのためのFACEモデル
ものづくりのためのFACEモデルものづくりのためのFACEモデル
ものづくりのためのFACEモデル
 
capify all
capify allcapify all
capify all
 
半文半理の大学院から来ました
半文半理の大学院から来ました半文半理の大学院から来ました
半文半理の大学院から来ました
 
Applied linear algebra
Applied linear algebraApplied linear algebra
Applied linear algebra
 
なにが?どうなる?WebGL
なにが?どうなる?WebGLなにが?どうなる?WebGL
なにが?どうなる?WebGL
 

俺なりのISUCONとかの戦い方