基于 FastAPI (Python) + React (TypeScript) + MySQL (Docker Cluster) 构建的高并发、高可用分布式选课系统。
在开始之前,请确保你的机器上安装了以下工具:
- Docker & Docker Compose: 用于运行数据库集群。
- Python 3.10+: 建议使用 Conda 管理环境。
- Node.js (v16+): 用于运行前端项目。
本系统包含 1 主 2 从 (用于存用户档案) 和 3 个分片库 (用于存课程数据)。
请务必按照以下顺序执行,以确保主从复制关系建立正确。
# -v 参数至关重要,它会清除旧的数据库卷,防止 UUID 冲突
docker-compose down -v
docker-compose up -d
等待 15-20 秒,确保 MySQL 容器完全启动并就绪。可以使用
docker ps查看状态。
./setup_replication.sh
检查点:脚本结束时,必须看到
Slave_IO_Running: Yes和Slave_SQL_Running: Yes。如果不是双 Yes,请勿进行下一步。
./init_db.sh
检查点:脚本最后会输出
Slave1 tables,确保其中包含student,teacher等表。
我们以 A 校区 (Master 节点) 为例。
打开 .env.a 文件,确保端口配置正确:
DB_MASTER_SLAVE_URL: 端口应为 3310 (Master)DB_SHARD_URL: 端口应为 3320 (Shard A)
同理,如上检查env.b, env.c。
# 激活 Python 环境 (如果使用 Conda)
conda activate ddbs_course
# 安装 Python 依赖
pip install -r requirements.txt
# 运行启动脚本 (参数:校区 端口)
./start_campus.sh a 8000
./start_campus.sh b 8001
./start_campus.sh c 8002
- API 文档: https://www.google.com/search?q=http://127.0.0.1:8000/docs
- OpenAPI JSON: https://www.google.com/search?q=http://127.0.0.1:8000/openapi.json
前端代码位于 school-web/ 目录下。
cd school-web
npm install
如果后端代码有更新,运行此命令自动生成前端 TypeScript 类型和请求函数:
npm run gen-api
npm run dev
- 前端地址: http://localhost:3000