docs: 初始化 Docs 仓库
This commit is contained in:
321
Document/07_系统架构图.md
Normal file
321
Document/07_系统架构图.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# 外卖SaaS系统 - 系统架构图
|
||||
|
||||
## 1. 整体架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 客户端层 │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────┐ │
|
||||
│ │ Web管理端 │ │ Web用户端 │ │ 小程序端(用户) │ │
|
||||
│ │ (React/Vue) │ │ (React/Vue) │ │ (微信/支付宝) │ │
|
||||
│ └──────────────┘ └──────────────┘ └─────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ API网关层 │
|
||||
│ ┌───────────────────────────────────────────────────────────────┐ │
|
||||
│ │ Nginx / API Gateway │ │
|
||||
│ │ - 路由转发 │ │
|
||||
│ │ - 负载均衡 │ │
|
||||
│ │ - 限流熔断 │ │
|
||||
│ │ - SSL终止 │ │
|
||||
│ └───────────────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 应用服务层 │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 租户服务 │ │ 商家服务 │ │ 菜品服务 │ │
|
||||
│ │ - 租户管理 │ │ - 商家管理 │ │ - 菜品管理 │ │
|
||||
│ │ - 权限管理 │ │ - 门店管理 │ │ - 分类管理 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 订单服务 │ │ 配送服务 │ │ 用户服务 │ │
|
||||
│ │ - 订单管理 │ │ - 配送员管理 │ │ - 用户管理 │ │
|
||||
│ │ - 订单流转 │ │ - 任务分配 │ │ - 地址管理 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 支付服务 │ │ 营销服务 │ │ 通知服务 │ │
|
||||
│ │ - 支付处理 │ │ - 优惠券 │ │ - 短信通知 │ │
|
||||
│ │ - 退款处理 │ │ - 活动管理 │ │ - 推送通知 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 基础设施层 │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ PostgreSQL │ │ Redis │ │ RabbitMQ │ │
|
||||
│ │ - 主数据库 │ │ - 缓存 │ │ - 消息队列 │ │
|
||||
│ │ - 主从复制 │ │ - 会话存储 │ │ - 异步任务 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ MinIO/OSS │ │ Elasticsearch│ │ Prometheus │ │
|
||||
│ │ - 对象存储 │ │ - 日志存储 │ │ - 监控告警 │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 2. 应用分层架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Presentation Layer │
|
||||
│ (表现层) │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ TakeoutSaaS.Api │ │
|
||||
│ │ - Controllers (控制器) │ │
|
||||
│ │ - Filters (过滤器) │ │
|
||||
│ │ - Middleware (中间件) │ │
|
||||
│ │ - Models (DTO模型) │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Application Layer │
|
||||
│ (应用层) │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ TakeoutSaaS.Application │ │
|
||||
│ │ - Services (应用服务) │ │
|
||||
│ │ - DTOs (数据传输对象) │ │
|
||||
│ │ - Interfaces (服务接口) │ │
|
||||
│ │ - Validators (验证器) │ │
|
||||
│ │ - Mappings (对象映射) │ │
|
||||
│ │ - Commands/Queries (CQRS) │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Domain Layer │
|
||||
│ (领域层) │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ TakeoutSaaS.Domain │ │
|
||||
│ │ - Entities (实体) │ │
|
||||
│ │ - ValueObjects (值对象) │ │
|
||||
│ │ - Enums (枚举) │ │
|
||||
│ │ - Events (领域事件) │ │
|
||||
│ │ - Interfaces (仓储接口) │ │
|
||||
│ │ - Specifications (规约) │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ Infrastructure Layer │
|
||||
│ (基础设施层) │
|
||||
│ ┌──────────────────────────────────────────────────────┐ │
|
||||
│ │ TakeoutSaaS.Infrastructure │ │
|
||||
│ │ - Data (数据访问) │ │
|
||||
│ │ - EFCore (EF Core实现) │ │
|
||||
│ │ - Dapper (Dapper实现) │ │
|
||||
│ │ - Repositories (仓储实现) │ │
|
||||
│ │ - Cache (缓存实现) │ │
|
||||
│ │ - MessageQueue (消息队列) │ │
|
||||
│ │ - ExternalServices (外部服务) │ │
|
||||
│ └──────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 3. 订单处理流程图
|
||||
|
||||
```
|
||||
用户下单 → 创建订单 → 支付 → 商家接单 → 制作 → 配送 → 完成
|
||||
│ │ │ │ │ │ │
|
||||
│ │ │ │ │ │ └─→ 订单完成
|
||||
│ │ │ │ │ └─→ 配送中
|
||||
│ │ │ │ └─→ 制作中
|
||||
│ │ │ └─→ 待制作
|
||||
│ │ └─→ 待接单
|
||||
│ └─→ 待支付
|
||||
└─→ 订单创建
|
||||
|
||||
取消流程:
|
||||
用户取消 ──→ 退款处理 ──→ 订单取消
|
||||
商家拒单 ──→ 退款处理 ──→ 订单取消
|
||||
超时未支付 ──→ 自动取消
|
||||
```
|
||||
|
||||
## 4. 数据流转图
|
||||
|
||||
```
|
||||
┌──────────┐
|
||||
│ 客户端 │
|
||||
└────┬─────┘
|
||||
│ HTTP Request
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ API Gateway │
|
||||
│ (Nginx) │
|
||||
└────┬─────────────┘
|
||||
│ 路由转发
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ Web API │
|
||||
│ - 认证授权 │
|
||||
│ - 参数验证 │
|
||||
└────┬─────────────┘
|
||||
│ 调用服务
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ Application │
|
||||
│ Service │
|
||||
│ - 业务逻辑 │
|
||||
└────┬─────────────┘
|
||||
│ 数据访问
|
||||
▼
|
||||
┌──────────────────┐ ┌──────────┐
|
||||
│ Repository │────→│ Cache │
|
||||
│ - EF Core │ │ (Redis) │
|
||||
│ - Dapper │ └──────────┘
|
||||
└────┬─────────────┘
|
||||
│ SQL查询
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ PostgreSQL │
|
||||
│ Database │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
## 5. 多租户数据隔离架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 租户识别中间件 │
|
||||
│ - 从JWT Token解析租户ID │
|
||||
│ - 从HTTP Header获取租户ID │
|
||||
└─────────────────────┬───────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 租户上下文 │
|
||||
│ - 当前租户ID │
|
||||
│ - 租户配置信息 │
|
||||
└─────────────────────┬───────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 数据访问层 │
|
||||
│ - 自动添加租户ID过滤 │
|
||||
│ - 全局查询过滤器 │
|
||||
└─────────────────────┬───────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 数据库 │
|
||||
│ 租户A数据 │ 租户B数据 │ 租户C数据 │
|
||||
│ (tenant_id = A) (tenant_id = B) (tenant_id = C)│
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 6. 缓存架构
|
||||
|
||||
```
|
||||
┌──────────────┐
|
||||
│ Application │
|
||||
└──────┬───────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────────┐
|
||||
│ Cache Aside Pattern │
|
||||
│ 1. 查询缓存 │
|
||||
│ 2. 缓存未命中,查询数据库 │
|
||||
│ 3. 写入缓存 │
|
||||
└──────┬───────────────────────────┘
|
||||
│
|
||||
├─→ L1 Cache (Memory Cache)
|
||||
│ - 进程内缓存
|
||||
│ - 热点数据
|
||||
│
|
||||
└─→ L2 Cache (Redis)
|
||||
- 分布式缓存
|
||||
- 会话数据
|
||||
- 共享数据
|
||||
```
|
||||
|
||||
## 7. 消息队列架构
|
||||
|
||||
```
|
||||
┌──────────────┐
|
||||
│ Producer │
|
||||
│ (订单服务) │
|
||||
└──────┬───────┘
|
||||
│ 发布事件
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ RabbitMQ │
|
||||
│ Exchange │
|
||||
└──────┬───────────┘
|
||||
│
|
||||
├─→ Queue: order.created
|
||||
│ └─→ Consumer: 通知服务
|
||||
│
|
||||
├─→ Queue: order.paid
|
||||
│ └─→ Consumer: 库存服务
|
||||
│
|
||||
└─→ Queue: order.completed
|
||||
└─→ Consumer: 统计服务
|
||||
```
|
||||
|
||||
## 8. 部署架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ 负载均衡器 (Nginx) │
|
||||
└─────────────┬───────────────────────────────────┘
|
||||
│
|
||||
┌───────┴───────┐
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────┐ ┌──────────┐
|
||||
│ API 1 │ │ API 2 │
|
||||
│ (容器) │ │ (容器) │
|
||||
└────┬─────┘ └────┬─────┘
|
||||
│ │
|
||||
└───────┬───────┘
|
||||
│
|
||||
┌───────┴────────┬──────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│PostgreSQL│ │ Redis │ │ RabbitMQ │
|
||||
│ 主从 │ │ 哨兵 │ │ 集群 │
|
||||
└──────────┘ └──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
## 9. 监控架构
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────┐
|
||||
│ 应用程序 │
|
||||
│ - 业务指标 │
|
||||
│ - 性能指标 │
|
||||
│ - 日志输出 │
|
||||
└─────────┬────────────────────────────────┘
|
||||
│
|
||||
┌─────┴─────┬──────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌────────┐ ┌────────┐ ┌────────┐
|
||||
│Metrics │ │ Logs │ │Traces │
|
||||
│ │ │ │ │ │
|
||||
└───┬────┘ └───┬────┘ └───┬────┘
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌──────────────────────────────┐
|
||||
│ Prometheus │
|
||||
│ Elasticsearch │
|
||||
│ Jaeger │
|
||||
└─────────┬────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────────────────┐
|
||||
│ Grafana │
|
||||
│ Kibana │
|
||||
│ - 可视化仪表板 │
|
||||
│ - 告警配置 │
|
||||
└──────────────────────────────┘
|
||||
```
|
||||
Reference in New Issue
Block a user