Repository navigation
Initial State
initial-stateタグ を性能改善前の基準点として保存した。
タグが指すコミットは f21608b9cac9e1dbc6316561ea10c6f5264cc870。
このサーバーで観測したファイルの保存であり、競技当日の未変更AMIやライブDB全体のバックアップではない。
全言語のアプリ、ロックファイル、SQLスキーマ・初期化処理、静的ファイル、 ベンチ・データ生成ソース、ベンチ検証JSONを保存した。 nginx / MySQL / Redis / systemd / sysctl / limits / hostsの設定と、 関連シンボリックリンクの対応、パッケージ・サービス・実効設定も保存している。
初期SQLite 100個と初期SQL 90_data.sql は圧縮して baseline/data/ に48MiB単位で分割。
合計101ファイルの展開後SHA-256一致を確認済み。
個々の設定・除外一覧は リポジトリREADME を参照。
cd /home/isucon/isucon12
./scripts/restore-initial-data.sh /tmp/isucon12-restore-check新規ディレクトリを指定する。分割ファイルと展開後のSHA-256を検証し、既存ファイルは上書きしない。
展開先に initial_data/*.db と webapp/sql/admin/90_data.sql が作られる。
このスクリプトはMySQLへの投入やサービス操作を行わない。
/tmp/isucon12-baseline-verify は導入時の検証に使用済みなので、再利用すると上書き拒否になる。
webapp/sql/init.sh は稼働DBを変更する処理。
ベンチから呼ばれる通常の初期化と、保存データからの完全なDB復旧は区別する。
復旧時は対象サーバー、サービス停止、DB投入、所有権、起動後の検証まで確認して進める。
cd /home/isucon/isucon12
git diff initial-state -- webapp/go
git show initial-state:baseline/config/etc/nginx/sites-available/isuports.confbaseline/files.sha256 は初期保存ファイルのチェックサム。
改善で変更した作業ツリー全体の検査には使わず、初期タグのクローン・展開を検証するために使う。
hostsやsystemdにはサーバー固有のパスがあるため、別サーバーへ無確認で一括適用しない。
SSH / AWS / GitHub認証情報、TLS・JWT秘密鍵、実行ログ、可変のテナントDBを除外した。
blackauth はこのサーバーにソースがなく、バイナリに秘密鍵が埋め込まれていたため除外した。
復旧では元サーバーから安全に引き継ぐか、公式ソースから再構築する。
TLS鍵 /etc/nginx/tls/key.pem とJWT署名鍵も安全な別経路で用意する。
pprotein導入直前のGoバイナリ・main.go・nginxサイト設定は
/home/isucon/tools/pprotein/backup/ にローカル保存済み。
初期タグとこのローカルバックアップは用途が異なる。
- ISUCON12公式実装:アプリ、ベンチ、静的配信、nginx、初期データの構成。
-
ISUCON12予選の解説:
/initializeによる外部から観測できる初期状態の復元。 - ISUCON11予選マニュアル:ホスト名とTLSを含む動作条件。