Files
aijianhua/docs/系统架构文档.md

6.8 KiB
Raw Permalink Blame History

爱鉴花小程序 - 系统架构文档

版本历史

版本 日期 作者 描述
v1.0 2024-03-15 系统架构师 初始版本

1. 架构设计原则

1.1 设计原则

  • 微服务架构:模块化设计,服务解耦
  • 高可用性99.9%可用性目标
  • 可扩展性:支持水平扩展
  • 安全性:端到端数据加密
  • 性能优化:响应时间<2秒

1.2 技术选型理由

技术栈 选型理由 替代方案
Node.js + Express 高性能I/O处理生态丰富 Python Django, Java Spring Boot
MySQL 8.0+ 事务支持完善,生态成熟 PostgreSQL, MongoDB
Redis Cluster 高性能缓存,分布式支持 Memcached, Hazelcast
Vue.js 3 + Ant Design 组件化开发企业级UI React + AntD, Angular + Material
uni-app 跨端开发,成本效益高 Taro, React Native

2. 系统架构图

graph TB
    subgraph "客户端层"
        A[微信小程序] --> B[后台管理系统]
        A --> C[官网系统]
    end
    
    subgraph "接入层"
        D[API网关 - Nginx] --> E[负载均衡]
    end
    
    subgraph "应用服务层"
        F[用户服务] --> G[认证服务]
        H[商品服务] --> I[订单服务]
        J[识别服务] --> K[支付服务]
        L[推广服务] --> M[统计服务]
    end
    
    subgraph "数据层"
        N[MySQL 8.0+] --> O[主从复制]
        P[Redis Cluster] --> Q[分布式缓存]
        R[腾讯云COS] --> S[文件存储]
    end
    
    E --> F
    E --> H
    E --> J
    E --> L
    
    F --> N
    H --> N
    J --> N
    L --> N
    
    F --> P
    H --> P
    J --> P

3. 微服务架构设计

3.1 服务划分

服务名称 职责 技术栈 部署方式
用户服务 用户管理、权限控制 Node.js + Express 独立部署
商品服务 商品管理、库存管理 Node.js + Express 独立部署
订单服务 订单处理、支付集成 Node.js + Express 独立部署
识别服务 植物识别AI集成 Node.js + TensorFlow.js 独立部署
推广服务 推广奖励计算 Node.js + Express 独立部署
网关服务 API路由、认证 Nginx + Lua 独立部署

3.2 服务通信机制

  • 同步调用RESTful APIHTTP/HTTPS
  • 异步消息Redis Pub/Sub预留RabbitMQ集成
  • 服务发现Consul/Nacos预留
  • 配置中心Apollo预留

4. 数据库设计

4.1 数据库架构

erDiagram
    USERS ||--o{ ORDERS : "创建"
    USERS ||--o{ IDENTIFICATIONS : "发起"
    USERS ||--o{ PROMOTIONS : "参与"
    
    PRODUCTS ||--o{ ORDER_ITEMS : "包含"
    CATEGORIES ||--o{ PRODUCTS : "分类"
    
    ORDERS ||--o{ ORDER_ITEMS : "包含"
    ORDERS ||--o{ PAYMENTS : "关联"
    
    USERS {
        bigint id PK
        varchar username
        varchar password_hash
        varchar phone
        varchar email
        enum user_type
        datetime created_at
        datetime updated_at
    }
    
    PRODUCTS {
        bigint id PK
        varchar name
        text description
        decimal price
        int stock
        bigint category_id FK
        varchar image_url
    }

4.2 关键表结构

用户表 (users)

CREATE TABLE users (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    phone VARCHAR(20) NOT NULL UNIQUE,
    email VARCHAR(100),
    user_type ENUM('consumer', 'gardener', 'merchant', 'creator') DEFAULT 'consumer',
    avatar_url VARCHAR(255),
    real_name VARCHAR(50),
    promotion_balance DECIMAL(10,2) DEFAULT 0.00,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_phone (phone),
    INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

推广记录表 (promotion_records)

CREATE TABLE promotion_records (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    promoter_id BIGINT NOT NULL,
    referred_id BIGINT NOT NULL,
    reward_amount DECIMAL(10,2) DEFAULT 0.00,
    reward_type ENUM('registration', 'first_order') NOT NULL,
    status ENUM('pending', 'completed', 'rejected') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    completed_at TIMESTAMP NULL,
    FOREIGN KEY (promoter_id) REFERENCES users(id),
    FOREIGN KEY (referred_id) REFERENCES users(id),
    INDEX idx_promoter (promoter_id),
    INDEX idx_referred (referred_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5. 部署架构

5.1 生产环境部署

graph LR
    subgraph "负载均衡层"
        A[阿里云SLB] --> B[Nginx集群]
    end
    
    subgraph "应用服务器集群"
        C[用户服务 2台] --> D[MySQL主从]
        E[商品服务 2台] --> D
        F[订单服务 2台] --> D
        G[识别服务 2台] --> D
    end
    
    subgraph "缓存层"
        H[Redis哨兵模式] --> I[3节点集群]
    end
    
    subgraph "存储层"
        J[腾讯云COS] --> K[CDN加速]
        L[MySQL主库] --> M[MySQL从库]
    end
    
    B --> C
    B --> E
    B --> F
    B --> G
    
    C --> H
    E --> H
    F --> H
    G --> H

5.2 监控告警体系

  • 应用监控Prometheus + Grafana
  • 日志收集ELK Stack
  • 链路追踪Jaeger
  • 告警通知:钉钉/邮件/SMS

6. 安全架构

6.1 安全防护措施

  • 网络层VPC隔离安全组规则
  • 应用层JWT认证RBAC权限控制
  • 数据层字段级加密SQL注入防护
  • 传输层HTTPS加密TLS 1.3

6.2 敏感数据处理

  • 密码bcrypt加密存储
  • 手机号AES加密存储
  • 支付信息PCI DSS合规处理
  • 日志数据:脱敏处理

7. 性能优化策略

7.1 数据库优化

  • 索引优化:覆盖索引,联合索引
  • 查询优化避免SELECT *,分页查询
  • 连接池最大200连接超时30秒

7.2 缓存策略

  • Redis缓存热点数据缓存TTL设置
  • 本地缓存Node.js内存缓存
  • CDN加速:静态资源加速

7.3 异步处理

  • 耗时操作异步化
  • 消息队列削峰填谷
  • 批量处理优化

8. 容灾备份方案

8.1 数据备份

  • 每日全量备份mysqldump + binlog
  • 实时增量备份MySQL主从复制
  • 异地备份OSS冷备存储

8.2 故障恢复

  • 数据库故障主从切换30分钟恢复
  • 服务故障:健康检查,自动重启
  • 网络故障:多可用区部署

9. 扩展性设计

9.1 水平扩展

  • 无状态服务,支持弹性伸缩
  • 数据库分库分表方案
  • 缓存集群扩展

9.2 功能扩展

  • 插件化架构设计
  • API版本管理
  • 灰度发布机制