Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Hiroki-org/network-sandbox

Repository files navigation

Network Sandbox

分散システムの負荷分散をリアルタイムで可視化・学習するためのサンドボックス環境です。

Architecture

🎯 概要

Network Sandbox は、ロードバランサー、マルチ言語ワーカー、モニタリングスタックを組み合わせた教育・実験用プラットフォームです。様々な負荷分散アルゴリズムの動作を視覚的に理解し、カスタム実装を簡単にテストできます。

✨ 機能

  • 4種類の負荷分散アルゴリズム: ラウンドロビン、最小接続、重み付け、ランダム
  • マルチ言語ワーカー: Go, Rust, Python 実装
  • リアルタイムUI: WebSocket による即時更新
  • サーキットブレーカー: 障害時の自動切り離し
  • Prometheus/Grafana: フルモニタリングスタック
  • スワップ可能アーキテクチャ: カスタム実装との簡単な入れ替え

🚀 クイックスタート

# リポジトリをクローン
git clone https://github.com/Hiroki-org/network-sandbox.git
cd network-sandbox
# 起動
docker-compose up -d
# アクセス
# - クライアントUI: http://localhost:3000
# - Grafana: http://localhost:3001 (admin/admin123)
# - Prometheus: http://localhost:9090

📁 プロジェクト構造

network-sandbox/
├── client/ # React フロントエンド
├── load-balancer/ # Go ロードバランサー
├── workers/
│ ├── go/ # Go ワーカー
│ ├── rust/ # Rust ワーカー
│ └── python/ # Python ワーカー
├── grafana/ # Grafana ダッシュボード設定
├── prometheus/ # Prometheus 設定
├── docker-compose.yml # サービス定義
├── docker-compose.override.yml.example # カスタマイズ例
└── .env.example # 環境変数テンプレート

🔧 カスタマイズ

環境変数

cp .env.example .env
# .env を編集してカスタマイズ

カスタム実装への入れ替え

このプロジェクトは スワップ可能なアーキテクチャ を採用しています。自作のロードバランサーやワーカーを簡単に組み込めます。

方法1: docker-compose.override.yml を使用

cp docker-compose.override.yml.example docker-compose.override.yml
# docker-compose.override.yml
services:
 # 自作ロードバランサーに差し替え
 load-balancer:
 build:
 context: ./my-custom-load-balancer
 dockerfile: Dockerfile
 environment:
 - MY_CUSTOM_CONFIG=value
 # 自作ワーカーを追加
 my-worker:
 build:
 context: ./my-workers/custom
 dockerfile: Dockerfile
 environment:
 - PORT=8090
 - WORKER_NAME=my-worker-1
 - WORKER_COLOR=#FF00FF

方法2: 環境変数でイメージを指定

# .env
LB_IMAGE=your-registry/my-load-balancer:latest
WORKER_GO_IMAGE=your-registry/my-go-worker:latest

カスタムワーカーの作成

Custom Worker Guide を参照してください。

必須エンドポイント:

  • GET /health - ヘルスチェック
  • POST /task - タスク処理
  • GET /metrics - Prometheus メトリクス
  • GET /status - ステータス情報

📊 モニタリング

Grafana ダッシュボード

http://localhost:3001 でアクセス:

  • Load Balancer Overview: リクエスト数、レイテンシ、アルゴリズム状態
  • Worker Health: 各ワーカーの負荷、キュー深度、ヘルス状態

カスタムメトリクス

ロードバランサー:

  • lb_requests_total - 総リクエスト数
  • lb_request_duration_ms - レイテンシ分布
  • lb_worker_health - ワーカー健全性

ワーカー:

  • worker_requests_total - 処理リクエスト数
  • worker_active_requests - アクティブリクエスト数
  • worker_processing_time_ms - 処理時間

🎮 UI コントロール

クライアントUI (http://localhost:3000) で以下を制御できます:

  • 負荷生成: リクエストレートとタスク重み調整
  • アルゴリズム選択: リアルタイムで切り替え
  • 統計表示: 成功/失敗数、平均応答時間
  • ワーカー状態: 各ワーカーの負荷とヘルス

🧪 負荷分散アルゴリズム

アルゴリズム 説明 適用シーン
Round Robin 順番に振り分け 均一負荷のワーカー
Least Connections 最も空いているワーカーへ 可変処理時間
Weighted 重みに基づいて振り分け 異なる性能のワーカー
Random ランダム選択 シンプルな分散

🐛 トラブルシューティング

コンテナが起動しない

# ログを確認
docker-compose logs -f load-balancer
docker-compose logs -f worker-go-1
# 再ビルド
docker-compose build --no-cache
docker-compose up -d

メトリクスが表示されない

  1. Prometheus ターゲット確認: http://localhost:9090/targets
  2. ワーカーメトリクス確認: curl http://localhost:8081/metrics

📝 ライセンス

MIT License

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /