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
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
120
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
2
2.1k
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
160
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
620
UI State設計とテスト方針
rmakiyama
2
300
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
0
160
なぜCodeceptJSを選んだか
goataka
0
150
2024年にチャレンジしたことを振り返るぞ
mitchan
0
130
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.2k
LINEヤフーのフロントエンド組織・体制の紹介【24年12月】
lycorp_recruit_jp
0
530
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Writing Fast Ruby
sferik
628
61k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Bash Introduction
62gerente
608
210k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
Statistics for Hackers
jakevdp
796
220k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
We Have a Design System, Now What?
morganepeng
51
7.3k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
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