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
18
4.8k
ISUCON入門以前_ISUNARABE_LT#1
sadnessOjisan
March 13, 2024
Tweet
Share
More Decks by sadnessOjisan
See All by sadnessOjisan
TypeScript、上達の瞬間
sadnessojisan
46
13k
フロントエンド・オブザーバビリティを支える要素技術を学ぼう
sadnessojisan
2
460
疎通2024
sadnessojisan
5
1.3k
BasicBasic認証
sadnessojisan
5
3.8k
サーバーとは何かを理解して、コンテナ1つで実行しよう | PHPerKaigi2024
sadnessojisan
34
14k
Node.js v12 を使い続けていたのはなぁぜなぁぜ?
sadnessojisan
11
26k
かにさんタワーバトル
sadnessojisan
1
23k
現実世界におけるスキーマ設計の妥協
sadnessojisan
21
29k
my new error
sadnessojisan
0
180
Other Decks in Technology
See All in Technology
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
160
Engineer Career Talk
lycorp_recruit_jp
0
120
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
Terraform CI/CD パイプラインにおける AWS CodeCommit の代替手段
hiyanger
1
240
Why App Signing Matters for Your Android Apps - Android Bangkok Conference 2024
akexorcist
0
120
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
【Pycon mini 東海 2024】Google Colaboratoryで試すVLM
kazuhitotakahashi
2
490
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.1k
Platform Engineering for Software Developers and Architects
syntasso
1
510
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
270
Security-JAWS【第35回】勉強会クラウドにおけるマルウェアやコンテンツ改ざんへの対策
4su_para
0
170
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
43
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Typedesign – Prime Four
hannesfritz
40
2.4k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Documentation Writing (for coders)
carmenintech
65
4.4k
Rails Girls Zürich Keynote
gr2m
94
13k
Thoughts on Productivity
jonyablonski
67
4.3k
The Language of Interfaces
destraynor
154
24k
Side Projects
sachag
452
42k
Happy Clients
brianwarren
98
6.7k
A designer walks into a library…
pauljervisheath
203
24k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
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