本專案是一個功能完整的 URL Balancer / API Gateway,包含一個 Go 語言開發的高效能後端,以及一個 React 打造的現代化管理介面。整個應用程式被設計為可透過 Docker 輕鬆部署。
您不僅可以透過網頁介面輕鬆設定請��的分流路徑,還能對轉發的請求動態改寫其 Header 和 Body。
詳細的技術架構設計,請參閱 ARCHITECTURE.md。
- 動態路由設定: 透過 Web UI 即可新增、修改、刪除需要進行分流的 API 端點 (Endpoint)。
- 權重分流 (Weighted Round-Robin): 可為每一個後端目標 (Target) 設定權重,實現按比例的流量分配。
- 請求改寫: 在請求轉發至後端目標前,可動態覆寫或新增 Header 和 Body 的內容。
- 前後端分離:
- 後端 (Go):
- 控制平面: 基於 Gin 框架,提供 RESTful API 進行所有設定的管理。
- 資料平面: 基於 Go 原生
net/http,提供高效能的反向代理服務,並透過定期輪詢自動載入最新設定。
- 前端 (React):
- 基於 Vite 和 React,提供快速的開發體驗。
- 使用 Ant Design 元件庫,打造美觀且專業的管理介面。
- 後端 (Go):
- 容器化部署: 提供一個最佳化的多階段
Dockerfile,可將整個應用程式打包成一個輕量級的生產環境映像檔。
您需要在本機安裝 Go (v1.20+), Node.js (v18+) 和 Docker。
-
啟動後端控制平面 (API Server) 在一個終端機中執行:
cd backend go mod tidy go run ./cmd/controlserver此服務將會在
http://localhost:8080上運行。 -
啟動後端資料平面 (Proxy Server) 在另一個終端機中執行:
cd backend go run ./cmd/dataserver此服務將會在
http://localhost:8081上運行。 -
啟動前端開發伺服器 在第三個終端機中執行:
cd frontend npm install npm run dev此服務將會在
http://localhost:5173(或另一個可用埠) 上運行。
現在,您可以開啟瀏覽器訪問 http://localhost:5173 來使用管理介面。
-
建置 Docker 映像檔 在專案根目錄下,執行:
docker build -t urlbalancer:latest . -
運行 Docker 容器
docker run -d -p 8080:8080 -p 8081:8081 --name urlbalancer-app urlbalancer:latest
-d: 在背景分離模式下運行。-p 8080:8080: 將主機的 8080 埠映射到容器的 8080 埠 (控制平面)。-p 8081:8081: 將主機的 8081 埠映射到容器的 8081 埠 (資料平面)。--name urlbalancer-app: 為容器指定一個名稱。
運行後,管理介面將可透過
http://localhost:8080訪問 (在 Docker 環境中,前端靜態檔案由後端伺服器提供服務,這部分我們會在後續步驟中完成)。
一旦您在管理介面上設定好 Endpoint 和 Target,就可以開始透過 資料平面 (Port 8081) 發送請求。
範例:
- 在 UI 上建立一個 Endpoint,路徑為
/v1/users。 - 為此 Endpoint 新增一個 Target,URL 為
http://my-backend-service.com/api/users,權重為 1。 - 現在,您可以透過
curl指令來測試:URL Balancer 會將此請求代理到curl -X GET http://localhost:8081/v1/users
http://my-backend-service.com/api/users。