-
用户服务独立化:基于 FastAPI Users,实现用户注册、登录、JWT 认证。
-
业务服务隔离:Todo Service 仅处理业务逻辑,通过调用 User Service 验证用户身份。
-
统一鉴权:业务服务通过 Redis 缓存 + User Service 校验实现高效鉴权。
-
清晰分层架构:采用
Repository - Service - Router模式,业务逻辑与数据库访问解耦。 -
现代化技术栈:
- FastAPI 0.115+
- SQLAlchemy 2.0 (异步)
- Redis 5 (缓存/会话)
- Docker + uv 打包
-
可扩展性:支持拆分为更多业务微服务,并通过 API Gateway(如 Traefik)进行统一入口管理。
microservice/
├── user_service/ # 用户认证微服务
│ ├── src/
│ │ ├── core/ # 配置、数据库、生命周期管理
│ │ └── users/ # 用户模型、Schema、路由
│ └── Dockerfile
│
├── todo_service/ # 待办事项业务微服务
│ ├── src/
│ │ ├── core/ # 配置、认证、数据库、依赖注入
│ │ └── todos/ # 待办业务的模型、仓库、服务、路由
│ └── Dockerfile
│
├── pyproject.toml # 工作区管理(uv workspace)
└── .gitignore
git clone https://github.com/PLUCK823/microservice
cd microservice进入用户服务:
cd user_service
uv run fastapi dev src/main.py --port 8000 --reload进入待办服务:
cd todo_service
uv run fastapi dev src/main.py --port 8001 --reload在项目根目录执行:
# 启动所有服务(Redis + User Service + Todo Service)
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止所有服务
docker-compose down
# 停止并删除数据卷
docker-compose down -v重要: 由于使用了 uv workspace,必须在项目根目录(microservice)执行构建命令:
# 在 microservice 根目录下执行
docker build -f user_service/Dockerfile -t user-service .
docker build -f todo_service/Dockerfile -t todo-service .
# 先启动 Redis
docker run -d --name redis -p 6379:6379 redis:7-alpine
# 启动用户服务
docker run -d --name user-service -p 8000:8000 user-service
# 启动业务服务(需要连接 Redis 和 User Service)
docker run -d --name todo-service -p 8001:8001 \
-e REDIS_HOST=redis \
-e USER_SERVICE_URL=http://user-service:8000 \
--link redis:redis \
--link user-service:user-service \
todo-service- 打开用户服务:
http://127.0.0.1:8000/docs - 打开业务服务:
http://127.0.0.1:8001/docs
-
注册用户 调用
POST /auth/register(User Service) -
登录获取 Token 调用
POST /auth/jwt/login(User Service) -
携带 Token 访问业务接口 例如:
POST /lists创建待办清单POST /todos添加待办事项 (Todo Service 会通过 Redis + User Service 验证 Token)
-
User Service
- FastAPI Users + SQLAlchemy 实现用户注册、登录、认证。
- JWT 存储于数据库 AccessToken 表,支持失效控制。
-
Todo Service
- 独立数据库(SQLite/SQLAlchemy)。
- OAuth2 + User Service 远程校验 + Redis 缓存用户信息。
- Repository 层负责数据库操作,Service 层封装业务逻辑,Router 提供 RESTful API。