MySQLのリードレプリカ構成による負荷分散効果を検証するプロジェクト
# プロジェクト設定
./setup.sh
# サービス起動
docker-compose up -d
# データベース初期化(初回のみ)
# データ再投入も可能
make init-db
# レプリケーション設定(初回のみ)
make replication
# 負荷テスト実行
make load-test
# モニタリング(別ターミナル)
make monitor-
パフォーマンス
- Requests/sec
- レスポンス時間 (平均, 95%, 99%)
- スループット
-
リソース使用量
- CPU使用率
- メモリ使用量
- ネットワークI/O
-
レプリケーション
- レプリケーション遅延
- 読み書き分散効果
-
Read操作 (70%)
- 単一ユーザー取得: 60%
- ユーザーリスト取得: 30%
- 検索: 10%
-
Write操作 (30%)
- 新規作成: 70%
- 更新: 20%
- 削除: 10%
GET /health- ヘルスチェックGET /users/:id- ユーザー取得GET /users- ユーザーリストGET /users/search/:name- ユーザー検索POST /users- ユーザー作成PUT /users/:id- ユーザー更新DELETE /users/:id- ユーザー削除GET /stats- アプリケーション統計
- Docker & Docker Compose
- wrk (負荷テストツール)
- 16GB+ RAM推奨
負荷テスト結果をもとに以下を分析:
- リードレプリカ有無による性能差
- リソース使用量の違い
- レプリケーション遅延の影響
- スケールアウト効果
mysql-replica-load-test/
├── compose.yml # Docker設定
├── mysql/
│ ├── mysql-master.cnf # Master設定
│ └── mysql-slave.cnf # Slave設定
├── app/ # Node.jsアプリ
│ ├── Dockerfile
│ ├── package.json
│ └── app.js
├── load-test/
│ └── test-replica.lua # wrk負荷テストスクリプト
├── init-db.sql # DB初期化
├── setup-replication.sh # レプリケーション設定
├── run-load-test.sh # 負荷テスト実行
└── monito.sh # モニタリング