# 结伴客系统架构文档 ## 1. 架构图 ``` +------------------+ +------------+ +------------------+ | 微信小程序 | | | | | | (uni-app) | --> | API网关 | --> | 后端服务 | +------------------+ | | | (Node.js+Express)| +------------+ | | +------------------+ | +-------+-------+ | | +-------v-----+ +-----v-------+ | MySQL数据库 | | Redis缓存 | +-------------+ +-------------+ | +-------v-------+ | RabbitMQ消息队列 | +-----------------+ +------------------+ | 后台管理系统 | | (Vue.js 3) | +------------------+ +------------------+ | 官网系统 | | (HTML5+Bootstrap) | +------------------+ ``` ## 2. 项目结构 ``` 结伴客项目 (根目录) ├── mini-program // 微信小程序 (uni-app) │ ├── pages │ │ ├── user // 用户相关页面 │ │ │ ├── login // 登录页面 │ │ │ ├── register // 注册页面 │ │ │ ├── profile // 个人主页 │ │ │ └── settings // 设置页面 │ │ ├── merchant // 商家相关页面 │ │ │ ├── register // 商家注册 │ │ │ ├── profile // 商家主页 │ │ │ └── dashboard // 商家控制台 │ │ ├── travel // 旅行结伴页面 │ │ │ ├── plan // 旅行计划 │ │ │ ├── search // 搜索结伴 │ │ │ └── activities // 其他活动 │ │ ├── animal // 动物认领页面 │ │ │ ├── list // 动物列表 │ │ │ ├── detail // 动物详情 │ │ │ └── claim // 认领流程 │ │ ├── social // 社交互动页面 │ │ │ ├── messages // 消息聊天 │ │ │ └── feed // 动态分享 │ │ ├── flower // 送花服务页面 │ │ │ ├── products // 鲜花产品 │ │ │ └── orders // 订单管理 │ │ └── promotion // 推广奖励页面 │ │ ├── invite // 邀请推广 │ │ └── rewards // 奖励中心 │ ├── components // 可复用组件 │ │ ├── common // 通用组件 │ │ ├── user // 用户相关组件 │ │ ├── travel // 旅行相关组件 │ │ ├── animal // 动物相关组件 │ │ ├── social // 社交相关组件 │ │ ├── merchant // 商家相关组件 │ │ └── flower // 鲜花相关组件 │ ├── utils // 工具函数 │ │ ├── request // 网络请求封装 │ │ ├── auth // 认证相关工具 │ │ ├── storage // 存储相关工具 │ │ └── helpers // 辅助函数 │ ├── static // 静态资源 │ │ ├── images // 图片资源 │ │ └── styles // 样式文件 │ └── store // 状态管理 │ ├── modules // 模块化状态 │ │ ├── user // 用户状态 │ │ ├── travel // 旅行状态 │ │ ├── animal // 动物状态 │ │ ├── social // 社交状态 │ │ ├── merchant // 商家状态 │ │ ├── flower // 鲜花状态 │ │ └── promotion // 推广状态 │ └── index.js // 状态管理入口 ├── admin-system // 后台管理系统 (Vue.js 3 + TypeScript + Ant Design Vue + Pinia) │ ├── public // 静态资源 │ ├── src │ │ ├── api // API接口 │ │ │ ├── user // 用户相关接口 │ │ │ ├── merchant // 商家相关接口 │ │ │ ├── travel // 旅行相关接口 │ │ │ ├── animal // 动物相关接口 │ │ │ ├── order // 订单相关接口 │ │ │ ├── promotion // 推广相关接口 │ │ │ └── system // 系统管理接口 │ │ ├── assets // 静态资源 │ │ ├── components // 公共组件 │ │ │ ├── layout // 布局组件 │ │ │ ├── common // 通用组件 │ │ │ ├── user // 用户相关组件 │ │ │ ├── merchant // 商家相关组件 │ │ │ ├── travel // 旅行相关组件 │ │ │ ├── animal // 动物相关组件 │ │ │ ├── order // 订单相关组件 │ │ │ ├── promotion // 推广相关组件 │ │ │ └── dashboard // 仪表板组件 │ │ ├── composables // 组合式函数 │ │ ├── directives // 自定义指令 │ │ ├── layouts // 页面布局 │ │ │ ├── default.vue // 默认布局 │ │ │ ├── auth.vue // 认证布局 │ │ │ └── empty.vue // 空白布局 │ │ ├── locales // 国际化资源 │ │ │ ├── zh-CN.json // 中文语言包 │ │ │ └── en-US.json // 英文语言包 │ │ ├── pages // 页面视图 │ │ │ ├── dashboard // 仪表板页面 │ │ │ ├── user // 用户管理页面 │ │ │ ├── merchant // 商家管理页面 │ │ │ ├── travel // 旅行管理页面 │ │ │ ├── animal // 动物管理页面 │ │ │ ├── order // 订单管理页面 │ │ │ ├── promotion // 推广管理页面 │ │ │ ├── system // 系统管理页面 │ │ │ ├── login.vue // 登录页面 │ │ │ └── register.vue // 注册页面 │ │ ├── plugins // 插件 │ │ ├── router // 路由配置 │ │ │ ├── modules // 模块路由 │ │ │ │ ├── user.ts // 用户路由 │ │ │ │ ├── merchant.ts // 商家路由 │ │ │ │ ├── travel.ts // 旅行路由 │ │ │ │ ├── animal.ts // 动物路由 │ │ │ │ ├── order.ts // 订单路由 │ │ │ │ ├── promotion.ts // 推广路由 │ │ │ │ └── system.ts // 系统路由 │ │ │ └── index.ts // 路由入口 │ │ ├── stores // 状态管理 │ │ │ ├── modules // 模块状态 │ │ │ │ ├── user.ts // 用户状态 │ │ │ │ ├── merchant.ts // 商家状态 │ │ │ │ ├── travel.ts // 旅行状态 │ │ │ │ ├── animal.ts // 动物状态 │ │ │ │ ├── order.ts // 订单状态 │ │ │ │ ├── promotion.ts // 推广状态 │ │ │ │ └── system.ts // 系统状态 │ │ │ └── index.ts // 状态管理入口 │ │ ├── styles // 样式文件 │ │ ├── types // TypeScript类型定义 │ │ ├── utils // 工具函数 │ │ │ ├── request.ts // 请求封装 │ │ │ ├── auth.ts // 认证工具 │ │ │ ├── storage.ts // 存储工具 │ │ │ ├── format.ts // 格式化工具 │ │ │ └── validate.ts // 验证工具 │ │ └── App.vue // 根组件 │ │ └── main.ts // 入口文件 │ ├── tests // 测试目录 │ ├── .env // 环境配置 │ ├── .env.development // 开发环境配置 │ ├── .env.production // 生产环境配置 │ ├── index.html // HTML模板 │ ├── tsconfig.json // TypeScript配置 │ ├── vite.config.ts // 构建配置 │ └── package.json // 依赖配置 ├── website // 官网系统 (HTML5 + Bootstrap) │ ├── index.html // 首页 │ ├── about.html // 关于我们 │ ├── contact.html // 联系我们 │ ├── merchant // 商家合作页面 │ │ ├── index.html // 商家合作首页 │ │ ├── policy.html // 合作政策 │ │ └── apply.html // 入驻申请 │ ├── case.html // 案例展示 │ ├── css // 样式文件 │ │ ├── bootstrap.min.css // Bootstrap样式 │ │ └── custom.css // 自定义样式 │ ├── js // JavaScript文件 │ │ ├── bootstrap.min.js // Bootstrap脚本 │ │ └── custom.js // 自定义脚本 │ ├── images // 图片资源 │ └── vendor // 第三方库 ├── backend // 后端接口服务 (Node.js + Express) │ ├── src │ │ ├── controllers // 控制器层 │ │ │ ├── user // 用户控制器 │ │ │ ├── merchant // 商家控制器 │ │ │ ├── travel // 旅行控制器 │ │ │ ├── animal // 动物控制器 │ │ │ ├── social // 社交控制器 │ │ │ ├── flower // 鲜花控制器 │ │ │ ├── promotion // 推广控制器 │ │ │ └── auth // 认证控制器 │ │ ├── services // 业务逻辑层 │ │ │ ├── user // 用户服务 │ │ │ ├── merchant // 商家服务 │ │ │ ├── travel // 旅行服务 │ │ │ ├── animal // 动物服务 │ │ │ ├── social // 社交服务 │ │ │ ├── flower // 鲜花服务 │ │ │ ├── promotion // 推广服务 │ │ │ └── auth // 认证服务 │ │ ├── models // 数据模型层 │ │ │ ├── user.js // 用户模型 │ │ │ ├── merchant.js // 商家模型 │ │ │ ├── travelPlan.js // 旅行计划模型 │ │ │ ├── animal.js // 动物模型 │ │ │ ├── claim.js // 认领模型 │ │ │ ├── message.js // 消息模型 │ │ │ ├── activity.js // 活动模型 │ │ │ ├── product.js // 商品模型 │ │ │ ├── order.js // 订单模型 │ │ │ ├── review.js // 评价模型 │ │ │ └── reward.js // 奖励模型 │ │ ├── routes // 路由定义 │ │ │ ├── api // API路由 │ │ │ │ ├── v1 // v1版本API │ │ │ │ │ ├── user.js // 用户相关API │ │ │ │ │ ├── merchant.js // 商家相关API │ │ │ │ │ ├── travel.js // 旅行相关API │ │ │ │ │ ├── animal.js // 动物相关API │ │ │ │ │ ├── social.js // 社交相关API │ │ │ │ │ ├── flower.js // 鲜花相关API │ │ │ │ │ └── promotion.js // 推广相关API │ │ │ │ └── index.js // API路由入口 │ │ │ └── web // Web路由(管理后台) │ │ ├── middleware // 中间件 │ │ │ ├── auth // 认证中间件 │ │ │ ├── validation // 验证中间件 │ │ │ ├── rateLimit // 限流中间件 │ │ │ └── error // 错误处理中间件 │ │ ├── utils // 工具函数 │ │ │ ├── database // 数据库工具 │ │ │ ├── logger // 日志工具 │ │ │ ├── helpers // 辅助函数 │ │ │ └── constants // 常量定义 │ │ ├── config // 配置文件 │ │ │ ├── database.js // 数据库配置 │ │ │ ├── redis.js // Redis配置 │ │ │ ├── rabbitmq.js // RabbitMQ配置 │ │ │ └── app.js // 应用配置 │ │ └── app.js // 应用入口 │ ├── tests // 测试目录 │ │ ├── unit // 单元测试 │ │ └── integration // 集成测试 │ ├── docs // 文档目录 │ └── package.json // 依赖配置 └── docs // 项目文档 ├── requirements.md // 需求文档 ├── architecture.md // 架构文档 ├── detailed_design.md // 详细设计文档 └── development_plan.md // 开发计划文档 ``` ## 2. 技术栈选型 ### 2.1 后端技术栈 - 编程语言:Node.js (TypeScript) - 框架:Express.js - API规范:RESTful API - 容器化:Docker - 容器编排:Kubernetes - API网关:Kong - 监控:Prometheus + Grafana - 日志:ELK Stack (Elasticsearch, Logstash, Kibana) ### 2.2 前端技术栈 - 小程序框架:uni-app - 开发语言:JavaScript/TypeScript - UI框架:WeUI - 状态管理:Redux - 构建工具:Webpack - 包管理:npm/yarn ### 2.3 官网技术栈 - 核心技术:HTML5 + Bootstrap - 开发语言:JavaScript - 构建工具:Webpack - 包管理:npm/yarn ### 2.3 数据库选型 - 主数据库:MySQL 8.0 ### 2.4 缓存选型 - 分布式缓存:Redis Cluster - 本地缓存:Node.js内置缓存 ### 2.5 消息队列选型 - 消息中间件:RabbitMQ - 实时消息推送:WebSocket ### 2.6 选型理由与对比分析 #### 后端技术栈选型理由 **Node.js (TypeScript) + Express.js** - **优势**: - 高性能:Node.js基于事件驱动和非阻塞I/O模型,适合高并发场景 - 生态丰富:npm生态系统庞大,可快速集成各种第三方库 - 全栈统一:前后端均可使用JavaScript/TypeScript,降低开发成本 - 轻量级:Express.js是一个轻量级的Web框架,灵活性高 - **劣势**: - CPU密集型任务处理能力较弱 - 回调地狱问题(TypeScript可有效缓解) #### 前端技术栈选型理由 **uni-app** - **优势**: - 一套代码多端运行:可同时发布到iOS、Android、H5、以及各种小程序平台 - 开发生态:基于Vue.js,学习成本低,社区活跃 - 性能优化:接近原生应用的性能体验 - **劣势**: - 平台限制:某些平台特定功能需要特殊处理 - 复杂度:多端兼容可能带来额外的复杂性 #### 官网技术栈选型理由 **HTML5 + Bootstrap** - **优势**: - 简单易用:技术门槛低,开发效率高 - 兼容性好:Bootstrap提供了良好的浏览器兼容性 - 响应式设计:Bootstrap内置响应式布局,适配各种设备 - 社区活跃:Bootstrap拥有庞大的社区和丰富的组件 - **劣势**: - 定制性相对较弱:需要额外工作来实现独特的设计效果 - 文件体积:Bootstrap框架本身会增加页面加载体积 #### 数据库选型理由 **MySQL 8.0** - **优势**: - 成熟稳定:关系型数据库,事务支持完善 - 生态丰富:社区活跃,文档齐全 - 性能优化:MySQL 8.0在性能方面有显著提升 - **劣势**: - 水平扩展性相对较弱 - 复杂查询性能可能不如专门的分析型数据库 #### 缓存选型理由 **Redis Cluster** - **优势**: - 高性能:内存数据库,读写速度极快 - 分布式支持:Redis Cluster提供高可用和水平扩展能力 - 丰富数据结构:支持字符串、哈希、列表、集合等多种数据结构 - **劣势**: - 内存成本:数据存储在内存中,成本较高 - 持久化性能:持久化操作可能影响性能 #### 消息队列选型理由 **RabbitMQ** - **优势**: - 成熟稳定:经过多年发展,稳定性好 - 协议支持:支持多种消息协议 - 灵活路由:支持多种消息路由模式 - **劣势**: - 吞吐量:相比Kafka等大数据消息队列,吞吐量较低 - Erlang语言:维护和调优需要掌握Erlang语言 **WebSocket** - **优势**: - 实时性:全双工通信,实时性好 - 节省资源:相比轮询,节省网络资源 - **劣势**: - 连接管理:需要处理连接断开重连等问题 - 浏览器兼容性:老旧浏览器支持不好 ## 3. 部署视图 ``` 外网: ├── uni-app前端用户 --- HTTPS --> API网关 ├── 官网用户 --- HTTPS --> Nginx反向代理 --> 官网系统 └── 第三方支付平台 <-- 支付回调 --- 后端服务 腾讯云服务器: ├── Nginx反向代理 --> 官网系统 │ ├── 静态资源服务 │ └── SSR渲染服务 (Nuxt.js) ├── API网关 --> 后端服务 ├── 后端服务 --> MySQL数据库 ├── 后端服务 --> Redis缓存 ├── 后端服务 --> RabbitMQ消息队列 └── 后端服务 --监控--> Prometheus监控 --> Grafana |--> ELK Stack ``` ### 3.1 部署环境 - 云服务提供商:腾讯云 - 服务器配置:4台4核8GB服务器组成Kubernetes集群 - 负载均衡:腾讯云负载均衡CLB - SSL证书:腾讯云SSL证书服务 - 域名解析:腾讯云DNS解析 - 对象存储:腾讯云COS(用于存储图片、视频等静态资源) - CDN加速:腾讯云CDN(用于加速静态资源访问) - 反向代理:Nginx - 静态资源服务器:Nginx ### 3.2 部署流程 1. 代码提交到Git仓库触发CI/CD流水线 2. 通过Docker构建服务镜像并推送到镜像仓库 3. Kubernetes从镜像仓库拉取镜像并部署服务 4. 配置健康检查和自动扩缩容策略 5. 配置监控和日志收集系统 6. 配置域名解析和SSL证书 7. 配置Nginx反向代理和静态资源服务器 ### 3.3 备份与灾备 - 数据库每日自动备份到COS - 关键服务配置文件版本化管理 - 多可用区部署实现高可用 ## 4. 风险分析与应对策略 ### 4.1 技术风险 #### 系统性能瓶颈 - **风险描述**:随着用户量增长,系统可能面临性能瓶颈,特别是在高并发场景下。 - **应对策略**: - 使用Redis缓存热点数据,减少数据库访问压力 - 对数据库进行读写分离和分库分表 - 使用CDN加速静态资源访问 - 实施自动扩缩容策略,根据负载动态调整服务实例数量 #### 数据安全风险 - **风险描述**:系统涉及用户个人信息、支付信息等敏感数据,存在数据泄露风险。 - **应对策略**: - 对敏感数据进行加密存储(AES/RSA算法) - 实施严格的访问控制和身份认证机制 - 定期进行安全审计和渗透测试 - 遵循GDPR等数据保护法规要求 ### 4.2 业务风险 #### 用户增长压力 - **风险描述**:产品上线后可能面临用户快速增长的压力,对系统稳定性提出挑战。 - **应对策略**: - 提前进行压力测试,评估系统承载能力 - 设计可水平扩展的架构,支持快速扩容 - 制定限流和降级策略,保证核心功能稳定运行 #### 商家服务质量风险 - **风险描述**:商家用户提供的服务质量和用户体验直接影响平台声誉。 - **应对策略**: - 建立商家资质审核机制 - 实施用户评价体系,公开服务评价 - 建立投诉处理机制,及时处理用户反馈 - 对低质量商家实施警告、限流或清退措施 ### 4.3 运维风险 #### 系统监控不足 - **风险描述**:缺乏有效的监控可能导致问题发现不及时,影响用户体验。 - **应对策略**: - 建立全方位监控体系,包括基础设施、应用性能、业务指标等 - 设置合理的告警阈值和通知机制 - 定期审查和优化监控策略 #### 故障恢复能力 - **风险描述**:系统故障可能导致服务中断,影响业务连续性。 - **应对策略**: - 制定详细的应急预案和故障恢复流程 - 定期进行故障演练,验证恢复能力 - 实施多可用区部署,提高容灾能力 - 建立数据库备份和恢复机制