Files
TakeoutSaaS.AdminApi/Document/02_技术架构.md
2025-11-23 09:55:11 +08:00

10 KiB
Raw Blame History

外卖SaaS系统 - 技术架构

1. 技术栈

1.1 后端技术栈

  • .NET 10:最新的.NET平台提供高性能和现代化开发体验
  • ASP.NET Core Web API构建RESTful API服务
  • Entity Framework Core 10最新ORM框架用于复杂查询和实体管理
  • Dapper 2.1+轻量级ORM用于高性能查询和批量操作
  • PostgreSQL 16+主数据库支持JSON、全文搜索等高级特性
  • Redis 7.0+:缓存和会话存储
  • RabbitMQ 3.12+:消息队列,处理异步任务

1.2 开发工具和框架

  • AutoMapper:对象映射
  • FluentValidation:数据验证
  • Serilog:结构化日志
  • MediatRCQRS和中介者模式实现
  • Hangfire:后台任务调度
  • Polly:弹性和瞬态故障处理
  • Swagger/SwashbuckleAPI文档生成

1.3 认证授权

  • JWT (JSON Web Token):无状态身份认证
  • IdentityServer/Duende IdentityServerOAuth2.0和OpenID Connect
  • ASP.NET Core Identity:用户身份管理

1.4 测试框架

  • xUnit:单元测试框架
  • MoqMock框架
  • FluentAssertions:断言库
  • Testcontainers:集成测试容器化

1.5 DevOps工具

  • Docker:容器化部署
  • Docker Compose:本地开发环境
  • GitHub Actions/GitLab CICI/CD流水线
  • Nginx:反向代理和负载均衡

2. 系统架构

2.1 整体架构

┌─────────────────────────────────────────────────────────────┐
│                        客户端层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────────┐             │
│  │ Web管理端 │  │ Web用户端 │  │ 小程序端(用户) │             │
│  └──────────┘  └──────────┘  └──────────────┘             │
└─────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                      API网关层                               │
│  ┌──────────────────────────────────────────────────────┐  │
│  │  Nginx / API Gateway (路由、限流、认证、日志)          │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                      应用服务层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │租户服务   │  │商家服务   │  │订单服务   │  │配送服务   │   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │用户服务   │  │支付服务   │  │营销服务   │  │通知服务   │   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
└─────────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────────┐
│                      基础设施层                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │PostgreSQL │  │  Redis   │  │ RabbitMQ │  │  MinIO   │   │
│  │  (主库)   │  │  (缓存)   │  │ (消息队列)│  │(对象存储) │   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
└─────────────────────────────────────────────────────────────┘

2.2 分层架构

2.2.1 表现层 (Presentation Layer)

  • TakeoutSaaS.AdminApi:管理后台 Web API 项目(/api/admin/v1
    • Controllers后台管理API控制器
    • Filters过滤器异常处理、日志、验证
    • Middleware中间件认证、租户识别、RBAC
    • Models请求/响应DTO
  • TakeoutSaaS.MiniApi:小程序/用户端 Web API 项目(/api/mini/v1
    • Controllers用户端API控制器
    • Filters过滤器异常处理、限流、签名校验
    • Middleware中间件小程序登录态、租户识别、CORS
    • Models请求/响应DTO

2.2.2 应用层 (Application Layer)

  • TakeoutSaaS.Application:应用逻辑
    • Services应用服务
    • DTOs数据传输对象
    • Interfaces服务接口
    • ValidatorsFluentValidation验证器
    • MappingsAutoMapper配置
    • Commands/QueriesCQRS命令和查询

2.2.3 领域层 (Domain Layer)

  • TakeoutSaaS.Domain:领域模型
    • Entities实体类
    • ValueObjects值对象
    • Enums枚举
    • Events领域事件
    • Interfaces仓储接口
    • Specifications规约模式

2.2.4 基础设施层 (Infrastructure Layer)

  • TakeoutSaaS.Infrastructure:基础设施实现
    • Data数据访问
      • EFCoreEF Core DbContext和配置
      • DapperDapper查询实现
      • Repositories仓储实现
      • Migrations数据库迁移
    • CacheRedis缓存实现
    • MessageQueueRabbitMQ实现
    • ExternalServices第三方服务集成

2.2.5 共享层 (Shared Layer)

  • TakeoutSaaS.Shared:共享组件
    • Constants常量定义
    • Exceptions自定义异常
    • Extensions扩展方法
    • Helpers辅助类
    • Results统一返回结果

3. 核心设计模式

3.1 多租户模式

  • 数据隔离策略每个租户独立Schema
  • 租户识别通过HTTP Header或JWT Token识别租户
  • 动态切换:运行时动态切换数据库连接

3.2 CQRS模式

  • 命令Command:处理写操作,修改数据
  • 查询Query:处理读操作,不修改数据
  • 分离优势:读写分离,优化性能

3.3 仓储模式

  • 抽象数据访问:统一数据访问接口
  • EF Core仓储:复杂查询和事务处理
  • Dapper仓储:高性能查询和批量操作

3.4 工作单元模式

  • 事务管理:统一管理数据库事务
  • 批量提交:减少数据库往返次数

3.5 领域驱动设计DDD

  • 聚合根:定义实体边界
  • 值对象:不可变对象
  • 领域事件:解耦业务逻辑

4. 数据访问策略

4.1 EF Core使用场景

  • 复杂的实体关系查询
  • 需要变更跟踪的操作
  • 事务性操作
  • 数据库迁移管理

4.2 Dapper使用场景

  • 高性能查询(大数据量)
  • 复杂SQL查询
  • 批量插入/更新
  • 报表统计查询
  • 存储过程调用

4.3 混合使用策略

// EF Core - 复杂查询和实体管理
public async Task<Order> GetOrderWithDetailsAsync(Guid orderId)
{
    return await _dbContext.Orders
        .Include(o => o.OrderItems)
        .Include(o => o.Customer)
        .FirstOrDefaultAsync(o => o.Id == orderId);
}

// Dapper - 高性能统计查询
public async Task<OrderStatistics> GetOrderStatisticsAsync(DateTime startDate, DateTime endDate)
{
    var sql = @"
        SELECT 
            COUNT(*) as TotalOrders,
            SUM(total_amount) as TotalAmount,
            AVG(total_amount) as AvgAmount
        FROM orders
        WHERE created_at BETWEEN @StartDate AND @EndDate";
    
    return await _connection.QueryFirstOrDefaultAsync<OrderStatistics>(sql, 
        new { StartDate = startDate, EndDate = endDate });
}

5. 缓存策略

5.1 缓存层次

  • L1缓存内存缓存IMemoryCache- 进程内缓存
  • L2缓存Redis缓存 - 分布式缓存

5.2 缓存场景

  • 商家信息缓存30分钟
  • 菜品信息缓存15分钟
  • 用户会话缓存2小时
  • 配置信息缓存1小时
  • 热点数据缓存(动态过期)

5.3 缓存更新策略

  • Cache-Aside:旁路缓存,先查缓存,未命中查数据库
  • Write-Through:写入时同步更新缓存
  • Write-Behind:异步更新缓存

6. 消息队列应用

6.1 异步任务

  • 订单状态变更通知
  • 短信/邮件发送
  • 数据统计计算
  • 日志持久化

6.2 事件驱动

  • 订单创建事件
  • 支付成功事件
  • 配送状态变更事件

7. 安全设计

7.1 认证机制

  • JWT Token认证
  • Refresh Token刷新
  • Token过期管理

7.2 授权机制

  • 基于角色的访问控制RBAC
  • 基于策略的授权
  • 资源级权限控制

7.3 数据安全

  • 敏感数据加密(密码、支付信息)
  • HTTPS传输加密
  • SQL注入防护
  • XSS防护

7.4 接口安全

  • 请求签名验证
  • 接口限流Rate Limiting
  • 防重放攻击
  • CORS跨域配置