Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hướng Dẫn Chi Tiết: SDN Load Balancer Simulator (Python + React)

Chào mừng bạn đến với hệ thống mô phỏng cân bằng tải Controller SDN bằng học tăng cường đa tác tử (Multi-Agent RL). Hệ thống này đã được tái cấu trúc hoàn toàn từ mã nguồn HTML giả lập cũ thành kiến trúc Client-Server chuyên nghiệp chạy trên môi trường thực tế:

  • Backend (Python FastAPI): Chạy giải thuật mô phỏng luồng (flow ticks), tính toán ma trận hop-count, thực hiện huấn luyện các thuật toán RL/greedy thực sự.
  • Frontend (React + Vite + Chart.js): Cung cấp giao diện tối màu (Dark Theme) cao cấp, hỗ trợ chia đôi màn hình độc lập hoàn toàn (Split-Screen) và tương tác live điều khiển trực tiếp xuống Python Server qua WebSockets.

📂 Cấu trúc thư mục dự án

d:/Water/
├── backend/                   # BACKEND PYTHON (FastAPI)
│   ├── env/                   # Thư mục môi trường ảo Python (Venv)
│   ├── core/
│   │   ├── network.py         # Định nghĩa Controller, Switch, Topology
│   │   └── engine.py          # Vòng lặp mô phỏng chính, hàm Reward, LLM Supervisor
│   ├── algorithms/
│   │   ├── base.py            # Khung sườn trừu tượng BaseLoadBalancer
│   │   ├── oq_lba.py          # Constrained Q-learning (Eq. 18, 19 từ paper gốc)
│   │   ├── greedy_baselines.py # Thuật toán so sánh đối chứng DC_LBA & CO_LBA
│   │   └── custom.py          # 🟢 NƠI BẠN VIẾT THUẬT TOÁN TÙY CHỈNH CỦA RIÊNG BẠN
│   └── main.py                # Điểm khởi chạy API và kết nối WebSockets
│
├── frontend/                  # FRONTEND REACT (Vite)
│   ├── src/
│   │   ├── components/
│   │   │   ├── SetupForm.jsx  # Bảng thiết lập thông số ban đầu của phiên chạy
│   │   │   ├── Dashboard.jsx  # Bảng điều khiển giám sát tải trọng, switch map, logs
│   │   │   └── ChartComp.jsx  # Đồ thị real-time cập nhật tự động (Chart.js)
│   │   ├── App.jsx            # Điều phối trạng thái, kết nối WS, chế độ Split-Screen
│   │   └── index.css          # Hệ thống CSS thiết kế tối màu cao cấp
│   └── index.html
│
└── README.md                  # File hướng dẫn này của bạn 📖

🚀 Hướng dẫn khởi chạy hệ thống (Từng bước một)

Cả hai máy chủ Backend và Frontend hiện đang được chạy ngầm tự động trên máy của bạn. Tuy nhiên, nếu bạn muốn khởi chạy thủ công hoặc kiểm tra logs, hãy mở 2 Terminal/PowerShell riêng biệt:

Bước 1: Chạy Python Backend (FastAPI)

Mở Terminal 1 và điều hướng đến thư mục d:\Water\backend, sau đó chạy:

# Kích hoạt môi trường ảo và khởi chạy server uvicorn
.\venv\Scripts\python main.py

Server API & WebSocket sẽ hoạt động tại http://127.0.0.1:8000.

Bước 2: Chạy React Frontend (Vite)

Mở Terminal 2 và điều hướng đến thư mục d:\Water\frontend, sau đó chạy:

npm run dev

Trình biên dịch Vite sẽ khởi động môi trường local tại địa chỉ http://localhost:5173. Hãy click vào link đó để mở giao diện web trên Chrome/Edge của bạn.


🟢 Hướng dẫn viết Thuật toán Cân bằng tải của riêng bạn!

Dự án được mô-đun hóa tối đa để bạn dễ dàng tuỳ biến, viết các giải thuật heuristic hoặc RL riêng của bạn bằng Python (chuẩn ngành AI) thay vì phải loay hoay với JavaScript như trước.

Các bước tiến hành:

  1. Mở file Python backend/algorithms/custom.py bằng trình soạn thảo code của bạn.
  2. Tìm đến hàm select_action(self, state, actions, sim):
    • state là chuỗi biểu diễn trạng thái tải của các controller (ví dụ: "3,5,8" tương ứng CPU load 30%, 50%, 80%).
    • actions là danh sách các hành động di chuyển switch khả thi được sinh ra tự động bởi mạng. Mỗi action có cấu trúc:
      {
          "key": "mig_0_1_2",             # Định danh hành động
          "type": "migrate",              # Kiểu hành động ('migrate' hoặc 'noop')
          "src": 0,                       # Index controller nguồn (bị quá tải)
          "dst": 1,                       # Index controller đích (còn dư tải)
          "sw": 2,                        # Index switch cần di chuyển
          "efficiency": 12.5,             # Tỷ lệ hiệu suất tải trọng / hop-count
          "hop_count": 3                  # Khoảng cách số hop từ Switch tới Controller đích
      }
    • sim là đối tượng SimulationEngine cung cấp toàn bộ thông số mô phỏng mạng realtime. Bạn có thể sử dụng các hàm tiện ích cực mạnh:
      • sim.discrete_coefficient(): Trả về hệ số mất cân bằng DC hiện tại.
      • sim.simulate_dc(action): Mô phỏng xem nếu áp dụng action di chuyển đó thì hệ số DC mới của hệ thống sẽ bằng bao nhiêu (rất thích hợp cho các thuật toán Heuristic/Greedy tìm kiếm tối ưu!).
  3. Nếu thuật toán của bạn có cơ chế học trực tuyến (Online Learning/RL), hãy cập nhật trọng số hoặc Q-table trong hàm update(self, state, action, reward, next_state, next_actions, done, mig_cost).
  4. Không cần sửa đổi Frontend React: Khi bạn sửa file Python, cơ chế hot-reload của backend sẽ tự áp dụng thuật toán mới và phản hồi trực tiếp lên giao diện đồ thị thời gian thực của trình duyệt.

⚖ Các công thức cốt lõi được đồng bộ chính xác theo Bài báo gốc (IEEE Access 2024)

Hệ thống backend Python đã được lập trình chính xác tuyệt đối theo các phương trình toán học của bài báo:

1. Hệ số mất cân bằng tải (Discrete Coefficient - DC)

Công thức (Eq. 7): $$DC = \sqrt{\frac{1}{N} \sum_{i=1}^{N} \left(\frac{l_i - \bar{l}}{\bar{l}}\right)^2}$$

Được cài đặt tại SimulationEngine.discrete_coefficient() giúp đánh giá mức độ lệch tải CPU giữa các Controller.

2. Chi phí di chuyển Switch (Migration Cost)

Công thức (Eq. 22): $$Cost = 6 \times 2 \times RTT_{new} + \max(0, \lambda_{sw} \times (RTT_{new} - RTT_{old}))$$

Với $RTT = \text{hop_count} \times 0.5\text{ms}$. Cài đặt tại SimulationEngine.migration_cost().

3. Cập nhật Q-value ràng buộc (Constrained Q-learning)

Công thức (Eq. 18 & 19): $$Q(s, a) \leftarrow (1 - \alpha) Q(s, a) + \alpha \left[ R(s, a) - \lambda \cdot Cost(s, a) + \gamma \max_{a'} Q(s', a') \right]$$ $$\lambda \leftarrow \max \left(0, \lambda + \frac{1}{M + 1} (S_n - \tau) \right)$$

Giải thuật RL ràng buộc thông minh này giúp tối ưu hóa tải trọng nhưng giới hạn số lượng dịch chuyển switch để tránh làm nghẽn mạng điều khiển. Được cài đặt trọn vẹn tại OQ_LBA.update().

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages