Slide 1

Slide 1 text

ISUCON 入門以前 @sadnessOjisan ISUNARABE LT#1 1

Slide 2

Slide 2 text

1. 茶番(-p42) 2. 環境構築 3. 環境構築 4. 環境構築 5. SSHの設定 6. GitHubとの連携 7. 計測ツールの設定 8. デプロイの設定 9. ベンチマーカー実行 10. モニタリング 11. 結果を調べる 12. WEBサーバーの分離 13. DBサーバーの分離 14. チートシートの作成 内容を読みにきた人は スキップ推奨 2

Slide 3

Slide 3 text

タイトルは好きな本からの引用です https://gihyo.jp/book/2015/978-4-7741-7284-2 3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

よかった! 5

Slide 6

Slide 6 text

自己紹介 ID: sadnessOjisan (sad-san/oji-san/ojisan-san) Belong: 新聞屋さん Lang: JSer, Rustacean Job: Client <-> CDN <-> BFF ISUCON: 前回が初めて、2人チームでインフラ担当。 SCORE: █████ 6

Slide 7

Slide 7 text

過去問挑戦の苦い思い出... 7

Slide 8

Slide 8 text

我が社も社内ISUCONを やってみてはどうかね 8

Slide 9

Slide 9 text

練習会の当日 9

Slide 10

Slide 10 text

「おっ、ここ再レンダリング抑えられるな」 10

Slide 11

Slide 11 text

「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww 11

Slide 12

Slide 12 text

「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww バンドラーのビルドでcss modules 用のclassnameのハッシュ値が変 わって、検査不能になるwwww 12

Slide 13

Slide 13 text

「おっ、ここ再レンダリング抑えられるな」 フロントエンドを弄る wwwwwwww バンドラーのビルドでcss modules 用のclassnameのハッシュ値が変 わって、ベンチマーカー動かない wwww 13

Slide 14

Slide 14 text

0点 14

Slide 15

Slide 15 text

ISUCON むずくね? 15

Slide 16

Slide 16 text

初めてのISUCONは何が難しいか ● パフォーマンスチューニング ● レギュレーションに慣れないといけない ● そもそもの計測イテレーションの回し方が分からない! ● 昔ながらのやり方は現代人は知らない! ● 確かに解説本やチュートリアルはあるが、複数台構成の具体例には触 れられていない! 16

Slide 17

Slide 17 text

イテレーションのやり方をググる 17

Slide 18

Slide 18 text

● こうすれば早くなる ● ああすれば早くなる ● 再起動検査舐めるな 18

Slide 19

Slide 19 text

ISUCON自体のやり方が何も分からない! 19

Slide 20

Slide 20 text

ISUCONの入門以前が分からない! 20

Slide 21

Slide 21 text

実録!これがISUCONの初動 ● 競技環境を構築する ● 与えられたサーバー全てに SSH の設定をする ● PATなどで GitHub とインスタンスを繋げる ● src, etc を Git 管理下に加える ● 計測ツールを各インスタンスに入れる ○ alp, percona-toolkit ● デプロイスクリプトを作る ○ Git 管理下とインスタンスをsync ○ systemctl 21

Slide 22

Slide 22 text

インターネット「秘伝のタレ」 インターネット「魔法のAnsible」 22

Slide 23

Slide 23 text

情報がもっとオープンになってくれ!!! 23

Slide 24

Slide 24 text

SSH, systemd をそもそも知らない世代 etc って高速道路かよ 24

Slide 25

Slide 25 text

ハイ(30才だけど) 25

Slide 26

Slide 26 text

ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 26

Slide 27

Slide 27 text

ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 Vercel で Hello World! 27

Slide 28

Slide 28 text

ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 実務も GAE やら Cloud Run 28

Slide 29

Slide 29 text

ワシが受けたプログラミング研修 https://speakerdeck.com/rtechkouhou/javascript-bootcamp-2018?slide=60 ポンしてデプロイ!!! 29

Slide 30

Slide 30 text

サーバーレスネイティブ世代ワイ、 ISUCONに参加した結果... 30

Slide 31

Slide 31 text

えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したらEC2でも自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか? 31

Slide 32

Slide 32 text

えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したら自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか? この辺、いまめっちゃ 仕事で役に立ってる 32

Slide 33

Slide 33 text

えっ!EC2にもSSH使えば、 デプロイできるんですか? えっ!GitHub Actions から SSH したら自動デプロイできるんですか? えっ!systemd ってやつで 起動もできるんですか? 初学者こそ ISUCON行こう! 33

Slide 34

Slide 34 text

結局、俺はどうISUCON入門以前を学んだか 1. @KOBA789 のISUCON実況配信を見る 2. @_inductor_ に付き添いで教えてもらう https://www.youtube.com/watch?v=-t89SUWO05E 34

Slide 35

Slide 35 text

結局、俺はどうISUCON入門以前を学んだか 1. Koba789 のISUCON実況配信を見る 2. @inductorに付き添いで教えてもらう あまりにも属人的すぎる 35

Slide 36

Slide 36 text

ISUCON本を読めと言われる https://gihyo.jp/book/2022/978-4-297-12846-3 36

Slide 37

Slide 37 text

ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 本番と違って、 お膳立てされた コンテナ環境! 37

Slide 38

Slide 38 text

ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 これは チューニングを学ぶ本! 38

Slide 39

Slide 39 text

ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 俺に必要なのは、 入門以前!!! 39

Slide 40

Slide 40 text

ISUCON本を読め! https://gihyo.jp/book/2022/978-4-297-12846-3 でも良い本 + どうせ入門 以前の次の壁で使うから 初心者は買おう! 40

Slide 41

Slide 41 text

ISUCON の入門以前に関する情報を インターネットに残しておきたい 41

Slide 42

Slide 42 text

茶番終了 42

Slide 43

Slide 43 text

競技環境構築(本番) ● 当日はダッシュボードが与えら れて 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

Slide 44

Slide 44 text

競技環境構築(練習) ● matsuu さんが AMI を用意して くれているので、これを自分の AWSで動かす ● 本番と違って、競技サーバーイ ンスタンスとベンチマーカー サーバーの2つが必要 https://github.com/matsuu/aws-isucon 44

Slide 45

Slide 45 text

競技環境構築(複数台構成の練習) ● 本番は複数台構成で行うので練習でもその環境を作りたい。 (この情報全然出てこなさすぎて辛かった) ● ISUCONで CloudFormation 使う回の Template を手に入れて、その中の AMI を matsuu さんのものに入れ替えると任意の書いで練習可能。 ● ただ、年によってサーバー個数が違い、SecurityGroup のPrivateIpAddressを増減 させなきゃいけない。 ● とはいえ、全部同じVPCに入れときゃなんとかなる ● ただ、年によってはベンチマーカーがうまく動かないとかも。(11予選のREADME はport5000に投げろとあるが、手元で動かすなら4999にしないといけなかった思 い出。thanks @haru_tani さん see: https://x.com/haru_tani/status/1726959605006409857 45

Slide 46

Slide 46 text

大人しく ISUNARABE 使おう 46

Slide 47

Slide 47 text

SSHで作業可能にする ● .ssh/config をいじる ● 本番は ISUCON 選手登録時 に連携した GitHub の秘密鍵 でインスタンスに入れる ● 練習環境だと、ユーザー切り 替えが必要かも 47

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

計測ツールを入れる ● 基本は alp と percona-toolkit ○ alp: Nginx のログをサマリーしてくれる ○ percona-toolkit: SQL の slow query を見れる ● そのためにログを出す設定にする ● ログを吐き出させる設定を適用するのが、ISUCON初動の一つの山場 ○ etc を GitHub, インスタンスに適用 ○ etc にある設定を実際に適用するするデプロイ処理 ● ISUCON本は、k6, SQL Workbench なども使っている ● 協賛で付く、NewRelicなどを使って Metrics, Tracing するのもアリ 49

Slide 50

Slide 50 text

Nginx のログ出力例 50

Slide 51

Slide 51 text

MySQL のログ出力例 51

Slide 52

Slide 52 text

デプロイスクリプトを作る ● SCPでソースコードをインスタンス に送り込む ● ソースコードを適した位置に配置す る(例: etc は /etc そのものを git に入れているわけではないので、 /etc に移す必要がある) ● 既存の動作しているサーバーを止め る ● 再起動する 52

Slide 53

Slide 53 text

ベンチマーカーを実行する ● 本番はGUIのボタンを押すだけ ● 練習環境は、それぞれのAMIや公式レポジトリのREADMEにコマンド が書かれているのでそれを実行する必要がある ● target-addr みたいなオプションがあるので、環境構築時に付与した 検査対象の それぞれのインスタンスの private IP Address を渡す 53

Slide 54

Slide 54 text

モニタリングする ● ベンチ流している間は htop などで見張る ● CPU使い切っているかどうか で、IOにボトルネックがある かみたいなことがわかる ● 後述するサーバー分割が済ん だ後ならn画面で見張る ● たくさんのモニターやtmuxを 用意しておくと良い https://htop.dev/ 54

Slide 55

Slide 55 text

結果を調べる ● ログの出力をしていたら /var/log に吐かれている ● alp でアクセス解析すれば、ど のエンドポイントが遅いかなど がわかる。 ● Nginxのログをパスに対して正 規表現ごとに集計できる機能が 良すぎる 55

Slide 56

Slide 56 text

Webサーバーを分離する ● 感想ブログの解法として紹介されが ちだけど、具体的なやり方になぜか 誰も言及しないものシリーズ① ● Nginx の upstream にリクエストの 分配先を書く ● 裏にアプリケーションサーバーを複 数台展開できる ● ラウンドロビンなロードバランシン グ 56

Slide 57

Slide 57 text

DBサーバーを分離する ● 感想ブログの解法として紹介されがちだけど、具体的なやり方になぜ か誰も言及しないものシリーズ② ● ユーザーに外部ネットワーク割り当て ● SELECT User, Host FROM mysql.user; でユーザーとホストの関係を 調べる ● DBユーザーがlocalhostのホストになってたら、ここを分離先のIPア ドレスに切り替える ● 秘伝のタレを使おう 57

Slide 58

Slide 58 text

チートシートを作る ● もちろん必須ではないが、ここまでの動きを再現性持たせてやるため のカンペは当日必須だと思う ● もしくはスクリプトや構成管理ツールで自動化するか 58

Slide 59

Slide 59 text

全文検索にも対応させた さっきブログ 書いた https://blog.ojisan.io/proprietary-search/ 59

Slide 60

Slide 60 text

ここまでやって、 スタート地点です。 60

Slide 61

Slide 61 text

ISUCON初見の方、 ハードルは下がりましたでしょうか? 61

Slide 62

Slide 62 text

最後に 62

Slide 63

Slide 63 text

ISUCONのハードルを下げてくれる人に感謝 ● KOBA789さん ○ 開発された ISUNARABE は簡単に過去問環境を作れます。 ○ ISUCON過去問をライブ配信で解いているところから考え方が学べます。 ● matsuuさん ○ ISUCON過去問環境のAMIを提供されています。 ○ matsuu さんがいなければ何も練習できませんでした。 ● inductorさん ○ よく初参加の方達とチームを組まれていて、コミュニティ全体の底上げをしてく ださっています。 ○ 僕とは別チームなのに手習いしていただいてありがとうございました。 ○ ISUCON の初動ができるようになってマジで人生変わったので、本当に感謝して います。 63

Slide 64

Slide 64 text

僕も誰かのためになりたい 64

Slide 65

Slide 65 text

ISUCON入門以前な内容で 気になることがありましたら、 ぜひ声をかけてください!!!!! 65