Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
ISUCON当日の進め方

進め方

  • こまめに話しながらコミュニケーションを取る
  • やった作業はSlackで共有
  • 全体構成など整理しやすいように、ホワイトボードを活用

当日やること

課題の理解

  • レギュレーションや説明を熟読
    • スコアの算出方法、失格条件など全体を把握
    • 許容されるエラー数なども確認
  • サイトへアクセスして動作確認
  • とりあえずベンチマークを動かして初期スコアを確認

環境整備

  • SSH接続設定
  • アプリのGit化
  • ミドルウェア設定ファイルのGit化
    • MySQL
    • Nginx
  • OS設定ファイルのGit化
    • /etc/sysctl.conf

ツール類のインストール

  • kataribe
    • 合わせてNginxのアクセスログも対応
  • Percona Toolkit(pt-query-digest)
  • netdata
  • dstat
  • デプロイの自動化
  • pprof

初期チューニング

  • 確実にやるべきチューニングは先に行う
    • ミドルウェア
      • MySQL
        • my.cnf
      • Nginx
        • nginf.conf
    • OS
      • /etc/sysctl.conf
      • SELinuxを無効化
  • ベンチマークを動かして初期状態とスコア比較

全体アーキテクチャの理解

  • 利用しているミドルウェアとバージョン
  • ミドルウェア間の連携の流れ
  • アプリケーションの実装
  • OSのバージョンや設定値
  • サーバのスペック(CPU、メモリ、ファイルシステム)

分析と個別チューニング

  • Nginx
    • アクセスログ分析
      • kataribe
    • 静的ファイル配信の効率化
    • アプリケーションとの接続方法の効率化(ソケットの利用など)
  • MySQL
    • Slow Log分析
      • pt-query-digest
    • クエリ頻度
    • インデックス
    • データの内容やテーブル分割の妥当性
  • アプリケーション
    • 処理効率の分析
      • pprof
      • ソースコードチェック
      • N+1問題
    • テンプレートファイル
  • OS
    • 常時パフォーマンス監視
      • netdata
    • ボトルネック検出
      • dstat

アーキテクチャ変更の検討

  • 複数サーバの活用
  • ミドルウェアの導入
    • Redis
    • memcached
  • アプリケーションのライブラリ、フレームワーク入れ替え
  • 既存データの持ち方変更
    • 画像
    • 一時データ
    • キャッシュ導入
    • ジョブキュー機構
    • DBのテーブル分割
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.