322 lines
21 KiB
Markdown
322 lines
21 KiB
Markdown
# 外卖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 │
|
|
│ - 可视化仪表板 │
|
|
│ - 告警配置 │
|
|
└──────────────────────────────┘
|
|
```
|