Git Product home page Git Product logo

isucon-tools-template's Introduction

isucon-tools

isuconで使うツール群をdockerで使えるようにまとめたtemplate

使用準備

  • 本テンプレートを使ってリポジトリを作成します
  • make buildを実行します
    • ツールを実行するためのdocker imageがビルドされます
  • 本番環境への接続情報(ホスト名|IPアドレス、SSHのポート番号)を./hosts/hosts.txtに記述します
    • 本リポジトリ内のスクリプトはこのファイル内の接続情報を用いて通信します
  • 本番環境からwebアプリのコード、初期化用SQLファイルなどを取得し、./webapp内に追加します

使用可能なツール群

解析用ツール

dockerを用いて実行されるため、インストール不要で使用可能です。よく使う形式をmakeコマンド内でまとめていますが、直接docker compose run...で実行することで任意のオプションを使用できます。

  • kataribe
    • https://github.com/matsuu/kataribe
    • nginxなどのwebサーバーのログから実行時間を解析
    • 実行時間を占めているエンドポイントの発見などに使用可能
  • mysqlslowdump
    • MySQLのスローログを解析
    • 実行時間が長いクエリを発見できる
    • DBがボトルネックになっているケースで有効
      • indexが効いていない、テーブルの結合が遅いなど
  • pprof
    • Golang用のパフォーマンス分析ツール
    • アプリケーション側の処理時間を解析できる
    • アプリケーションがボトルネックになっている場合に有効
      • htmlのtemplateに関する処理など
    • web view用のコマンド使用時はgraphvizをローカルにインストールしてください

デプロイ、ベンチ関連のツール

実行環境によって詳細なパス、管理したいファイルなどは異なると思うので、調整していただければと思います

  • bench/before-bench.sh
    • ベンチ実行前に行う処理をまとめたスクリプト
      • 本番環境内のログのバックアップ、初期化
        • 前ベンチのログの混入を防ぐため
  • bench/after-bench.sh
    • ベンチ完了後の処理をまとめたスクリプト
      • nginxのaccess.log, MySQLのスロークエリログ、pprofの出力ファイルの取得
  • deploy/deloy.sh
    • 本番環境へのデプロイ用スクリプト
    • ビルドしたwebアプリケーションの実行ファイル+データベースの初期化用SQLファイルのデプロイ
      • 近年のisuconではベンチ開始時に/initializeエンドポイントにアクセス、データベースの再作成+データ投入+indexの作成が行われ、参加者はこの初期化用SQLファイルにインデックスの定義を記述するケースが多いため、同時にデプロイする形式にしています
  • deploy/sync-settings.sh
    • 各種設定ファイルをリモートに送信
      • nginxのnginx.conf、MySQLのmy.cnf
    • 大会形式によっては環境変数管理用の.envなども管理する必要がありそうなので良い感じに調整してください

スクリプトのテストについて

  • docker-compose.yaml内のdeploy-testコンテナにはnginx, mysqlがインストールされており、SSH経由でアクセス可能になっています。デプロイなどに用いるスクリプトのテストに使用してください
  • deploy-test/id_rsa/内に秘密鍵、公開鍵を作成することで公開鍵認証でアクセス可能です
    • ファイル名をid_rsa,id_rsa.pubとすることでgitignoreされます

ToDo

  • pprof-webviewをcontainer上から使えるようにする

参考にさせていただいたサイト

isucon-tools-template's People

Contributors

kitakou0313 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.