Files
TakeoutSaaS.Docs/Document/07_系统架构图.md
2026-01-29 01:58:15 +00:00

21 KiB

外卖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                  │
│  - 可视化仪表板               │
│  - 告警配置                   │
└──────────────────────────────┘