跳到主要内容

项目总体架构

SurveyKing Pro 是一个基于现代 Web 技术栈构建的企业级问卷调研平台,采用前后端分离架构,支持高并发、高可用的业务场景。

🏗️ 系统架构图

🔄 技术架构分层

1. 前端层 (Frontend Layer)

  • 技术栈: React + TypeScript + Ant Design
  • 框架: UMI 框架
  • 状态管理: 自定义状态管理
  • 构建工具: UMI 内置构建
  • 代码质量: ESLint + Prettier

2. 接入层 (Gateway Layer)

  • 负载均衡: Nginx(可选)
  • 静态资源: CDN 加速
  • SSL/TLS: HTTPS 支持

3. 应用层 (Application Layer)

  • 框架: Spring Boot 3.x
  • 架构: 单体模块化架构
  • 安全: Spring Security + JWT
  • 缓存: Redis
  • 消息队列: 基于 Redis 实现
  • 定时任务: Quartz 集群模式
  • 文件处理: EasyExcel + 多种存储支持

4. 数据层 (Data Layer)

  • 关系型数据库: MySQL(主要数据存储)
  • 缓存: Redis(缓存 + 消息队列)
  • 对象存储: 支持 S3、MinIO、阿里云 OSS、腾讯云等
  • 数据操作: MyBatis Plus

5. 基础设施层 (Infrastructure Layer)

  • 监控: 内置监控组件(链路追踪、日志服务、指标收集)
  • 部署: 支持传统部署和容器化部署
  • 文件存储: 多种存储方式支持

📊 数据流向图

🎯 架构特点

1. 高可用性

  • 采用模块化架构,模块间松耦合
  • Redis 缓存减少数据库压力
  • 支持集群部署和负载均衡
  • 内置监控和故障诊断

2. 高性能

  • 前端 CDN 加速,静态资源缓存
  • Redis 缓存优化,提升响应速度
  • 数据库连接池,连接复用
  • 异步处理,基于 Redis 消息队列解耦

3. 可扩展性

  • 水平扩展,支持多实例部署
  • 模块化设计,易于功能扩展
  • 自定义 Starter 组件,灵活配置
  • 多种存储方式支持

4. 安全性

  • JWT 令牌机制,无状态认证
  • RBAC 权限控制,细粒度授权
  • 数据加密传输,HTTPS 协议
  • 审计日志,操作记录追踪

📦 模块划分

核心业务模块

  • surveyking-module-system: 系统功能模块,包含用户管理、权限控制、部门管理等
  • surveyking-module-survey: 问卷功能模块,包含问卷创建、编辑、发布、答题等
  • surveyking-module-infra: 基础设施模块,包含文件管理、数据字典、短信邮件等
  • surveyking-module-report: 报表打印模块,包含报表生成、导出、打印等

技术框架组件

  • surveyking-spring-boot-starter-web: Web 封装,全局异常、访问日志
  • surveyking-spring-boot-starter-security: 认证授权,基于 Spring Security
  • surveyking-spring-boot-starter-mybatis: 数据库操作,基于 MyBatis Plus
  • surveyking-spring-boot-starter-redis: 缓存操作,基于 Redis + Redisson
  • surveyking-spring-boot-starter-mq: 消息队列,基于 Redis 实现
  • surveyking-spring-boot-starter-job: 定时任务,基于 Quartz
  • surveyking-spring-boot-starter-file: 文件客户端,支持多种存储方式
  • surveyking-spring-boot-starter-excel: Excel 导入导出,基于 EasyExcel

业务组件

  • surveyking-spring-boot-starter-biz-sms: 短信客户端,对接阿里云、腾讯云
  • surveyking-spring-boot-starter-biz-social: 社交客户端,微信、钉钉等授权
  • surveyking-spring-boot-starter-biz-weixin: 微信客户端,公众号、开放平台
  • surveyking-spring-boot-starter-biz-operatelog: 操作日志记录

🔧 部署架构

单机部署

特点

  • 部署简单,运维成本低
  • 适合中小规模应用
  • 支持 Docker 容器化部署
  • 状态存储在 Redis,便于扩展

集群部署

特点

  • 高可用性,支持故障转移
  • 水平扩展,可动态增减节点
  • 状态存储在 Redis,应用无状态
  • 支持读写分离和缓存优化

容器化部署

Docker 部署

# docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- '80:80'
- '443:443'
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
- surveyking

surveyking:
image: surveyking/surveyking-pro:latest
environment:
- SPRING_PROFILES_ACTIVE=prod
- DB_HOST=mysql
- REDIS_HOST=redis
depends_on:
- mysql
- redis
deploy:
replicas: 3

mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root123
- MYSQL_DATABASE=surveyking
volumes:
- mysql_data:/var/lib/mysql

redis:
image: redis:7-alpine
volumes:
- redis_data:/data

volumes:
mysql_data:
redis_data:

Kubernetes 部署

# k8s-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: surveyking-deployment
spec:
replicas: 3
selector:
matchLabels:
app: surveyking
template:
metadata:
labels:
app: surveyking
spec:
containers:
- name: surveyking
image: surveyking/surveyking-pro:latest
ports:
- containerPort: 8080
env:
- name: SPRING_PROFILES_ACTIVE
value: 'prod'
- name: DB_HOST
value: 'mysql-service'
- name: REDIS_HOST
value: 'redis-service'
---
apiVersion: v1
kind: Service
metadata:
name: surveyking-service
spec:
selector:
app: surveyking
ports:
- port: 80
targetPort: 8080
type: LoadBalancer

部署方式对比

部署方式优点缺点适用场景
直接部署简单直接,性能最优环境依赖,扩展困难开发测试环境
Docker环境隔离,易于迁移有性能损耗单机生产环境
K8s自动化运维,弹性伸缩复杂度高,资源消耗大大规模生产环境

📈 性能指标

系统性能目标

  • 并发用户数: 10,000+ 在线用户
  • 响应时间: 平均响应时间 < 500ms
  • 吞吐量: 1000+ QPS
  • 可用性: 99.9% 系统可用性
  • 数据一致性: 强一致性保证

性能优化策略

  1. 缓存优化: Redis 分布式缓存
  2. 数据库优化: 索引优化、查询优化
  3. 代码优化: 异步处理、连接池
  4. 网络优化: CDN 加速、压缩传输
  5. 服务优化: 微服务拆分、负载均衡