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
3.4k
ISUCON入門以前_ISUNARABE_LT#1
sadnessOjisan
March 13, 2024
Tweet
Share
More Decks by sadnessOjisan
See All by sadnessOjisan
サーバーとは何かを理解して、コンテナ1つで実行しよう | PHPerKaigi2024
sadnessojisan
32
12k
Node.js v12 を使い続けていたのはなぁぜなぁぜ?
sadnessojisan
11
4.7k
かにさんタワーバトル
sadnessojisan
1
1.8k
現実世界におけるスキーマ設計の妥協
sadnessojisan
19
7.7k
my new error
sadnessojisan
0
120
監視せなあかんし、五大紙だけにオオカミってな🐺🐺🐺🐺🐺
sadnessojisan
5
4.2k
Recap CDN, Edge, WebAssembly | ワインと鍋.js#1
sadnessojisan
2
1.8k
SSG is a compiler
sadnessojisan
8
7.7k
preactの仕組みを理解する軽量版教育用preactを作ってる話
sadnessojisan
4
2.9k
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
1.7k
The depthes of profiling Ruby - RubyKaigi 2024
osyoyu
0
170
使われないものを作るな!出口から作るデータ分析基盤 / Data Platform Development Starting from the User Needs
amaotone
16
4.7k
アプリ・TVで"旅なか体験"をもっとスマートにしてみた_team 4@NOT A HOTEL
xx23xy
0
100
QAエンジニアが伝えたい品質保証の羅針盤 / Compass for Quality Assurance
mii3king
2
340
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
12
7.9k
OPENLOGI Company Profile
hr01
0
46k
B2C、B2B プロダクトマネジメントの違い(および思考の罠) / B2C, B2B PM and reduction fallacy
ykmc09
5
2.4k
スクラムに出会って「できた」を実感できるようになってきた話 / Scrum makes me feel like I can do it
yayoi_dd
2
110
1Q86
kawaguti
PRO
2
190
個人的、Kubernetes の最新注目機能! (2024年5月版) / TechFeed Experts Night#28 〜 コンテナ技術最前線
pfn
PRO
3
210
ハードウェアを動かすTypeScriptの世界
9wick
3
1.2k
Featured
See All Featured
Debugging Ruby Performance
tmm1
70
11k
The Invisible Side of Design
smashingmag
294
49k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
275
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Git: the NoSQL Database
bkeepers
PRO
423
63k
Web development in the modern age
philhawksworth
203
10k
Practical Orchestrator
shlominoach
183
9.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
What the flash - Photography Introduction
edds
64
11k
The Brand Is Dead. Long Live the Brand.
mthomps
49
30k
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