Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ISUCON入門以前_ISUNARABE_LT#1

 ISUCON入門以前_ISUNARABE_LT#1

sadnessOjisan

March 13, 2024
Tweet

More Decks by sadnessOjisan

Other Decks in Technology

Transcript

  1. 1. 茶番(-p42) 2. 環境構築 3. 環境構築 4. 環境構築 5. SSHの設定

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

  3. 自己紹介 ID: sadnessOjisan (sad-san/oji-san/ojisan-san) Belong: 新聞屋さん Lang: JSer, Rustacean Job:

    Client <-> CDN <-> BFF ISUCON: 前回が初めて、2人チームでインフラ担当。 SCORE: █████ 6
  4. 実録!これがISUCONの初動 • 競技環境を構築する • 与えられたサーバー全てに SSH の設定をする • PATなどで GitHub

    とインスタンスを繋げる • src, etc を Git 管理下に加える • 計測ツールを各インスタンスに入れる ◦ alp, percona-toolkit • デプロイスクリプトを作る ◦ Git 管理下とインスタンスをsync ◦ systemctl 21
  5. 競技環境構築(本番) • 当日はダッシュボードが与えら れて 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
  6. 競技環境構築(複数台構成の練習) • 本番は複数台構成で行うので練習でもその環境を作りたい。 (この情報全然出てこなさすぎて辛かった) • ISUCONで CloudFormation 使う回の Template を手に入れて、その中の

    AMI を matsuu さんのものに入れ替えると任意の書いで練習可能。 • ただ、年によってサーバー個数が違い、SecurityGroup のPrivateIpAddressを増減 させなきゃいけない。 • とはいえ、全部同じVPCに入れときゃなんとかなる • ただ、年によってはベンチマーカーがうまく動かないとかも。(11予選のREADME はport5000に投げろとあるが、手元で動かすなら4999にしないといけなかった思 い出。thanks @haru_tani さん see: https://x.com/haru_tani/status/1726959605006409857 45
  7. SSHで作業可能にする • .ssh/config をいじる • 本番は ISUCON 選手登録時 に連携した GitHub

    の秘密鍵 でインスタンスに入れる • 練習環境だと、ユーザー切り 替えが必要かも 47
  8. 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
  9. 計測ツールを入れる • 基本は alp と percona-toolkit ◦ alp: Nginx のログをサマリーしてくれる

    ◦ percona-toolkit: SQL の slow query を見れる • そのためにログを出す設定にする • ログを吐き出させる設定を適用するのが、ISUCON初動の一つの山場 ◦ etc を GitHub, インスタンスに適用 ◦ etc にある設定を実際に適用するするデプロイ処理 • ISUCON本は、k6, SQL Workbench なども使っている • 協賛で付く、NewRelicなどを使って Metrics, Tracing するのもアリ 49
  10. デプロイスクリプトを作る • SCPでソースコードをインスタンス に送り込む • ソースコードを適した位置に配置す る(例: etc は /etc

    そのものを git に入れているわけではないので、 /etc に移す必要がある) • 既存の動作しているサーバーを止め る • 再起動する 52
  11. モニタリングする • ベンチ流している間は htop などで見張る • CPU使い切っているかどうか で、IOにボトルネックがある かみたいなことがわかる •

    後述するサーバー分割が済ん だ後ならn画面で見張る • たくさんのモニターやtmuxを 用意しておくと良い https://htop.dev/ 54
  12. Webサーバーを分離する • 感想ブログの解法として紹介されが ちだけど、具体的なやり方になぜか 誰も言及しないものシリーズ① • Nginx の upstream にリクエストの

    分配先を書く • 裏にアプリケーションサーバーを複 数台展開できる • ラウンドロビンなロードバランシン グ 56
  13. DBサーバーを分離する • 感想ブログの解法として紹介されがちだけど、具体的なやり方になぜ か誰も言及しないものシリーズ② • ユーザーに外部ネットワーク割り当て • SELECT User, Host

    FROM mysql.user; でユーザーとホストの関係を 調べる • DBユーザーがlocalhostのホストになってたら、ここを分離先のIPア ドレスに切り替える • 秘伝のタレを使おう 57
  14. ISUCONのハードルを下げてくれる人に感謝 • KOBA789さん ◦ 開発された ISUNARABE は簡単に過去問環境を作れます。 ◦ ISUCON過去問をライブ配信で解いているところから考え方が学べます。 •

    matsuuさん ◦ ISUCON過去問環境のAMIを提供されています。 ◦ matsuu さんがいなければ何も練習できませんでした。 • inductorさん ◦ よく初参加の方達とチームを組まれていて、コミュニティ全体の底上げをしてく ださっています。 ◦ 僕とは別チームなのに手習いしていただいてありがとうございました。 ◦ ISUCON の初動ができるようになってマジで人生変わったので、本当に感謝して います。 63