Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ISUCON入門以前_ISUNARABE_LT#1
Search
sadnessOjisan
March 13, 2024
Technology
19
5.1k
ISUCON入門以前_ISUNARABE_LT#1
sadnessOjisan
March 13, 2024
Tweet
Share
More Decks by sadnessOjisan
See All by sadnessOjisan
PHPこそ OpenTelemetry が嬉しい
sadnessojisan
2
68
TypeScript、上達の瞬間
sadnessojisan
50
16k
フロントエンド・オブザーバビリティを支える要素技術を学ぼう
sadnessojisan
2
500
疎通2024
sadnessojisan
5
1.4k
BasicBasic認証
sadnessojisan
5
3.9k
サーバーとは何かを理解して、コンテナ1つで実行しよう | PHPerKaigi2024
sadnessojisan
34
14k
Node.js v12 を使い続けていたのはなぁぜなぁぜ?
sadnessojisan
11
27k
かにさんタワーバトル
sadnessojisan
1
23k
現実世界におけるスキーマ設計の妥協
sadnessojisan
21
30k
Other Decks in Technology
See All in Technology
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
180
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
複雑性の高いオブジェクト編集に向き合う: プラガブルなReactフォーム設計
righttouch
PRO
0
110
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
2024年にチャレンジしたことを振り返るぞ
mitchan
0
130
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
260
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
23
11k
バクラクのドキュメント解析技術と実データにおける課題 / layerx-ccc-winter-2024
shimacos
2
1k
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
250
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
120
WACATE2024冬セッション資料(ユーザビリティ)
scarletplover
0
190
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Designing Experiences People Love
moore
138
23k
4 Signs Your Business is Dying
shpigford
181
21k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.2k
Six Lessons from altMBA
skipperchong
27
3.5k
Transcript
ISUCON 入門以前 @sadnessOjisan ISUNARABE LT#1 1
1. 茶番(-p42) 2. 環境構築 3. 環境構築 4. 環境構築 5. SSHの設定
6. GitHubとの連携 7. 計測ツールの設定 8. デプロイの設定 9. ベンチマーカー実行 10. モニタリング 11. 結果を調べる 12. WEBサーバーの分離 13. DBサーバーの分離 14. チートシートの作成 内容を読みにきた人は スキップ推奨 2
タイトルは好きな本からの引用です https://gihyo.jp/book/2015/978-4-7741-7284-2 3
4
よかった! 5
自己紹介 ID: sadnessOjisan (sad-san/oji-san/ojisan-san) Belong: 新聞屋さん Lang: JSer, Rustacean Job:
Client <-> CDN <-> BFF ISUCON: 前回が初めて、2人チームでインフラ担当。 SCORE: █████ 6
過去問挑戦の苦い思い出... 7
我が社も社内ISUCONを やってみてはどうかね 8
練習会の当日 9
「おっ、ここ再レンダリング抑えられるな」 10
「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww 11
「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww バンドラーのビルドでcss modules 用のclassnameのハッシュ値が変 わって、検査不能になるwwww 12
「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww バンドラーのビルドでcss modules 用のclassnameのハッシュ値が変 わって、ベンチマーカー動かない wwww 13
0点 14
ISUCON むずくね? 15
初めてのISUCONは何が難しいか • パフォーマンスチューニング • レギュレーションに慣れないといけない • そもそもの計測イテレーションの回し方が分からない! • 昔ながらのやり方は現代人は知らない! •
確かに解説本やチュートリアルはあるが、複数台構成の具体例には触 れられていない! 16
イテレーションのやり方をググる 17
• こうすれば早くなる • ああすれば早くなる • 再起動検査舐めるな 18
ISUCON自体のやり方が何も分からない! 19
ISUCONの入門以前が分からない! 20
実録!これがISUCONの初動 • 競技環境を構築する • 与えられたサーバー全てに SSH の設定をする • PATなどで GitHub
とインスタンスを繋げる • src, etc を Git 管理下に加える • 計測ツールを各インスタンスに入れる ◦ alp, percona-toolkit • デプロイスクリプトを作る ◦ Git 管理下とインスタンスをsync ◦ systemctl 21
インターネット「秘伝のタレ」 インターネット「魔法のAnsible」 22
情報がもっとオープンになってくれ!!! 23
SSH, systemd をそもそも知らない世代 etc って高速道路かよ 24
ハイ(30才だけど) 25
ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 26
ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 Vercel で Hello World! 27
ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 実務も GAE やら Cloud Run 28
ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 ポンしてデプロイ!!! 29
サーバーレスネイティブ世代ワイ、 ISUCONに参加した結果... 30
えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したらEC2でも自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか?
31
えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したら自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか?
この辺、いまめっちゃ 仕事で役に立ってる 32
えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したら自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか?
初学者こそ ISUCON行こう! 33
結局、俺はどうISUCON入門以前を学んだか 1. @KOBA789 のISUCON実況配信を見る 2. @_inductor_ に付き添いで教えてもらう https://www.youtube.com/watch?v=-t89SUWO05E 34
結局、俺はどうISUCON入門以前を学んだか 1. Koba789 のISUCON実況配信を見る 2. @inductorに付き添いで教えてもらう あまりにも属人的すぎる 35
ISUCON本を読めと言われる https://gihyo.jp/book/2022/978-4-297-12846-3 36
ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 本番と違って、 お膳立てされた コンテナ環境! 37
ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 これは チューニングを学ぶ本! 38
ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 俺に必要なのは、 入門以前!!! 39
ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 でも良い本 + どうせ入門 以前の次の壁で使うから 初心者は買おう! 40
ISUCON の入門以前に関する情報を インターネットに残しておきたい 41
茶番終了 42
競技環境構築(本番) • 当日はダッシュボードが与えら れて CloudFormation のテンプ レートをもらえる(※AWSじゃ ない回もあるらしい) • 成果物に対するベンチマーカー
をGUIから起動できる • ベンチマーカーが出したスコア を見れる。順位や他チームのも 分かる。 • 競技環境をスクショして良いか 分からなかったのでスクショは ないですが、こんな感じです。 ISUCON dashboard all jobs coupon Result 12:50 12000 success 12:40 0 fail 12:30 0 fail 12:15 0 fail 11:10 0 fail 10:10 200 success 43
競技環境構築(練習) • matsuu さんが AMI を用意して くれているので、これを自分の AWSで動かす • 本番と違って、競技サーバーイ
ンスタンスとベンチマーカー サーバーの2つが必要 https://github.com/matsuu/aws-isucon 44
競技環境構築(複数台構成の練習) • 本番は複数台構成で行うので練習でもその環境を作りたい。 (この情報全然出てこなさすぎて辛かった) • ISUCONで CloudFormation 使う回の Template を手に入れて、その中の
AMI を matsuu さんのものに入れ替えると任意の書いで練習可能。 • ただ、年によってサーバー個数が違い、SecurityGroup のPrivateIpAddressを増減 させなきゃいけない。 • とはいえ、全部同じVPCに入れときゃなんとかなる • ただ、年によってはベンチマーカーがうまく動かないとかも。(11予選のREADME はport5000に投げろとあるが、手元で動かすなら4999にしないといけなかった思 い出。thanks @haru_tani さん see: https://x.com/haru_tani/status/1726959605006409857 45
大人しく ISUNARABE 使おう 46
SSHで作業可能にする • .ssh/config をいじる • 本番は ISUCON 選手登録時 に連携した GitHub
の秘密鍵 でインスタンスに入れる • 練習環境だと、ユーザー切り 替えが必要かも 47
GitHubと連携 • 競技サーバーにSSHできたら、webapp と いうフォルダに実装があるので、git init • GitHub で Personal
Access Token(PAT) を作ったら、 git remote add origin https://
[email protected]
/$yourname /$reponame.git でPULL/PUSHできる • PATは、Contentsを Read and Write にす る • SSH慣れしていたらforwardしても良い 48
計測ツールを入れる • 基本は alp と percona-toolkit ◦ alp: Nginx のログをサマリーしてくれる
◦ percona-toolkit: SQL の slow query を見れる • そのためにログを出す設定にする • ログを吐き出させる設定を適用するのが、ISUCON初動の一つの山場 ◦ etc を GitHub, インスタンスに適用 ◦ etc にある設定を実際に適用するするデプロイ処理 • ISUCON本は、k6, SQL Workbench なども使っている • 協賛で付く、NewRelicなどを使って Metrics, Tracing するのもアリ 49
Nginx のログ出力例 50
MySQL のログ出力例 51
デプロイスクリプトを作る • SCPでソースコードをインスタンス に送り込む • ソースコードを適した位置に配置す る(例: etc は /etc
そのものを git に入れているわけではないので、 /etc に移す必要がある) • 既存の動作しているサーバーを止め る • 再起動する 52
ベンチマーカーを実行する • 本番はGUIのボタンを押すだけ • 練習環境は、それぞれのAMIや公式レポジトリのREADMEにコマンド が書かれているのでそれを実行する必要がある • target-addr みたいなオプションがあるので、環境構築時に付与した 検査対象の
それぞれのインスタンスの private IP Address を渡す 53
モニタリングする • ベンチ流している間は htop などで見張る • CPU使い切っているかどうか で、IOにボトルネックがある かみたいなことがわかる •
後述するサーバー分割が済ん だ後ならn画面で見張る • たくさんのモニターやtmuxを 用意しておくと良い https://htop.dev/ 54
結果を調べる • ログの出力をしていたら /var/log に吐かれている • alp でアクセス解析すれば、ど のエンドポイントが遅いかなど がわかる。
• Nginxのログをパスに対して正 規表現ごとに集計できる機能が 良すぎる 55
Webサーバーを分離する • 感想ブログの解法として紹介されが ちだけど、具体的なやり方になぜか 誰も言及しないものシリーズ① • Nginx の upstream にリクエストの
分配先を書く • 裏にアプリケーションサーバーを複 数台展開できる • ラウンドロビンなロードバランシン グ 56
DBサーバーを分離する • 感想ブログの解法として紹介されがちだけど、具体的なやり方になぜ か誰も言及しないものシリーズ② • ユーザーに外部ネットワーク割り当て • SELECT User, Host
FROM mysql.user; でユーザーとホストの関係を 調べる • DBユーザーがlocalhostのホストになってたら、ここを分離先のIPア ドレスに切り替える • 秘伝のタレを使おう 57
チートシートを作る • もちろん必須ではないが、ここまでの動きを再現性持たせてやるため のカンペは当日必須だと思う • もしくはスクリプトや構成管理ツールで自動化するか 58
全文検索にも対応させた さっきブログ 書いた https://blog.ojisan.io/proprietary-search/ 59
ここまでやって、 スタート地点です。 60
ISUCON初見の方、 ハードルは下がりましたでしょうか? 61
最後に 62
ISUCONのハードルを下げてくれる人に感謝 • KOBA789さん ◦ 開発された ISUNARABE は簡単に過去問環境を作れます。 ◦ ISUCON過去問をライブ配信で解いているところから考え方が学べます。 •
matsuuさん ◦ ISUCON過去問環境のAMIを提供されています。 ◦ matsuu さんがいなければ何も練習できませんでした。 • inductorさん ◦ よく初参加の方達とチームを組まれていて、コミュニティ全体の底上げをしてく ださっています。 ◦ 僕とは別チームなのに手習いしていただいてありがとうございました。 ◦ ISUCON の初動ができるようになってマジで人生変わったので、本当に感謝して います。 63
僕も誰かのためになりたい 64
ISUCON入門以前な内容で 気になることがありましたら、 ぜひ声をかけてください!!!!! 65