考研圈项目

51 阅读9分钟

讲一下这个项目整体框架架构设计,我准备写一篇博客贴到我的简历上

项目架构设计详解

1. 项目概述

一个考研经验交流项目,主要包括笔记发布、点赞、收藏、关注等功能。

平台需要满足海量用户的 高并发读写和数据一致性要求,确保用户操作的实时响应,并通过分布式架构实现高可用和高扩展性。

2. 整体架构设计

2.1 微服务架构图

┌─────────────────────────────────────────────────────────────────────────┐
│                           客户端层 (Web/APP)                             │
└───────────────────────┬─────────────────────────────────────────────────┘
                        │
┌───────────────────────▼─────────────────────────────────────────────────┐
│                          网关层 (Spring Cloud Gateway)                   │
└───────────────────────┬─────────────────────────────────────────────────┘
                        │
┌───────────────────────┼─────────────────────────────────────────────────┐
│                       │                                                 │
▼                       ▼                                                 ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│   认证服务      │ │   用户服务      │ │   笔记服务      │ │   评论服务      │
│ (xiaohashu-auth)│ │ (xiaohashu-user)│ │(xiaohashu-note) │ │(xiaohashu-comment)│
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘
         │                   │                   │                   │
┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐
│  用户关系服务   │ │  搜索服务       │ │  计数服务       │ │  对象存储服务   │
│(xiaohashu-user-relation) │(xiaohashu-search)│(xiaohashu-count) │(xiaohashu-oss) │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘
         │                   │                   │                   │
┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐ ┌────────▼────────┐
│  数据对齐服务   │ │  分布式ID生成服务│ │  键值存储服务   │ │  基础框架       │
│(xiaohashu-data-align)│(xiaohashu-distributed-id-generator)│(xiaohashu-kv) │ │(xiaoha-framework) │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
         │                   │                   │                   │
┌────────▼───────────────────▼───────────────────▼───────────────────▼────────┐
│                       基础设施层                                           │
│ Nacos(注册/配置中心)  Redis(缓存)  MySQL(数据库)  Elasticsearch(搜索)        │
│ RocketMQ(消息队列)  XXL-JOB(任务调度)  MinIO/OSS(对象存储)                  │
└─────────────────────────────────────────────────────────────────────────────┘

2.2 架构分层设计

小哈书项目采用经典的微服务架构分层设计,各层职责明确:

  1. 客户端层:用户直接交互的界面层,包括Web端和移动端
  2. 网关层:统一入口,负责请求路由、负载均衡、安全认证等
  3. 业务服务层:核心业务逻辑实现,按功能模块拆分为多个独立微服务
  4. 基础设施层:提供各类中间件支持,如数据库、缓存、消息队列等
  5. 公共框架层:提供共享组件、工具类、通用配置等

3. 核心技术栈

项目基于现代化技术栈构建,主要包括:

技术/组件版本用途选型理由
Spring Boot3.0.2应用基础框架简化开发、内嵌容器、自动配置
Spring Cloud Alibaba2022.0.0.0微服务生态套件阿里巴巴开源,本土化支持好,组件丰富
Spring Cloud2022.0.0微服务基础框架提供服务发现、负载均衡等核心功能
JDK17编程语言运行环境长期支持版本,性能提升显著
MySQL8.0.29关系型数据库稳定性高,社区活跃,性能优秀
Elasticsearch-全文搜索引擎提供高效的全文搜索和复杂查询能力
Redis-分布式缓存高性能内存数据库,支持多种数据结构
RocketMQ-消息队列高吞吐量、高可用、顺序消息支持
Nacos-服务注册与配置中心阿里巴巴开源,同时支持服务发现和配置管理
Spring Cloud Gateway-API网关基于WebFlux,响应式编程,性能优秀
Feign-声明式REST客户端简化服务间调用,与Spring Cloud无缝集成
Sa-Token-权限认证框架轻量级,API友好,功能丰富
XXL-JOB-分布式任务调度开源、轻量级、易扩展
Caffeine-本地缓存高性能Java缓存库,比Guava Cache性能更好

4. 核心微服务模块详解

4.1 网关服务 (xiaohashu-gateway)

网关服务作为系统的统一入口,负责请求路由、权限校验、限流熔断等功能。

核心功能

  • 请求路由:根据URL路径将请求转发到对应的微服务
  • 负载均衡:整合Ribbon,提供客户端负载均衡能力
  • 认证授权:前置校验请求的合法性
  • 请求过滤:通过StripPrefix等过滤器处理请求路径

路由配置示例

spring:
  cloud:
    gateway:
      routes:
        - id: auth
          uri: lb://xiaohashu-auth
          predicates:
            - Path=/auth/**
          filters:
            - StripPrefix=1
        - id: user
          uri: lb://xiaohashu-user
          predicates:
            - Path=/user/**
          filters:
            - StripPrefix=1

4.2 认证服务 (xiaohashu-auth)

认证服务负责用户身份认证相关功能,是整个系统的安全入口。

核心功能

  • 用户登录/注册:支持手机号+验证码登录,自动完成注册
  • 密码管理:密码修改、找回密码等
  • 短信验证码:集成阿里云短信服务发送验证码
  • Token生成与管理:基于Sa-Token实现

认证流程

  1. 用户通过手机号和验证码请求登录
  2. 验证手机号和验证码的合法性
  3. 调用用户服务检查用户是否存在,不存在则自动注册
  4. 生成Token并返回给客户端

4.3 用户服务 (xiaohashu-user)

用户服务管理用户的基础信息和个人资料。

核心功能

  • 用户信息管理:创建、查询、更新用户信息
  • 个人主页:展示用户发布的内容、关注/粉丝信息
  • 权限管理:用户角色和权限分配

数据模型

  • 用户基本信息:手机号、昵称、头像、个性签名等
  • 用户账号信息:密码、状态等
  • 用户角色关联:用户与角色的多对多关系

4.4 笔记服务 (xiaohashu-note)

笔记服务是系统的核心内容服务,负责笔记的创建、管理和展示。

核心功能

  • 笔记发布:支持文字、图片等多媒体内容
  • 笔记管理:更新、删除、置顶等操作
  • 互动功能:点赞、收藏、分享等
  • 发现页:推荐热门笔记和内容

内容存储设计

  • 笔记元数据(标题、话题、发布时间等)存储在MySQL中
  • 笔记正文内容存储在KV服务中,提高读写性能
  • 图片等媒体资源存储在OSS对象存储服务中

4.5 搜索服务 (xiaohashu-search)

搜索服务提供全文检索能力,支持笔记和用户的快速查找。

核心功能

  • 笔记搜索:支持关键词搜索、类型筛选、时间范围过滤、排序等
  • 用户搜索:支持按昵称、用户ID搜索
  • 搜索高亮:关键词高亮显示
  • 文档重建:支持数据同步和重建索引

技术实现

  • 基于Elasticsearch实现全文检索
  • 采用Multi-match查询,支持多字段搜索和权重设置
  • 结合HighlightBuilder实现搜索结果高亮
// 搜索笔记核心实现
@Override
public PageResponse<SearchNoteRspVO> searchNote(SearchNoteReqVO searchNoteReqVO) {
    // 构建查询条件
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(
            QueryBuilders.multiMatchQuery(keyword)
                    .field(NoteIndex.FIELD_NOTE_TITLE, 2.0f) // 设置标题权重
                    .field(NoteIndex.FIELD_NOTE_TOPIC) // 默认权重
    );
    
    // 构建排序、分页、高亮等
    // ...
    
    // 执行搜索并处理结果
    // ...
}

4.6 分布式ID生成服务 (xiaohashu-distributed-id-generator)

提供全局唯一ID生成能力,解决分布式系统中的ID一致性问题。

核心功能

  • 基于Leaf号段模式生成各类业务ID
  • 支持多个业务标识(bizTag)的ID生成
  • 高可用设计,支持故障转移

应用场景

  • 用户ID生成
  • 笔记ID生成
  • 小哈书号(类似小红书号)生成

5. 关键技术实现

5.1 微服务间用户信息传递机制

系统实现了一套完善的用户信息在微服务间透明传递的机制,基于ThreadLocal和TransmittableThreadLocal实现。

核心组件

  • HeaderUserId2ContextFilter:从请求头提取用户ID并设置到ThreadLocal中
  • LoginUserContextHolder:提供获取和设置当前用户ID的静态方法
  • FeignRequestInterceptor:在Feign调用时自动将用户ID添加到请求头

技术流程

  1. 网关层通过AddUserId2HeaderFilter将用户ID添加到请求头
  2. 各微服务通过HeaderUserId2ContextFilter从请求头提取用户ID并设置到ThreadLocal
  3. 服务内部通过LoginUserContextHolder.getUserId()获取当前用户ID
  4. 微服务间调用时,FeignRequestInterceptor自动将用户ID添加到请求头

代码实现

// ThreadLocal管理用户上下文
public class LoginUserContextHolder {
    private static final ThreadLocal<Map<String, Object>> THREAD_LOCAL = new TransmittableThreadLocal<>();
    
    public static void setUserId(Long userId) {
        // 设置用户ID到ThreadLocal
    }
    
    public static Long getUserId() {
        // 从ThreadLocal获取用户ID
    }
    
    public static void remove() {
        // 清理ThreadLocal,防止内存泄漏
    }
}

5.2 分布式事务处理

系统采用多种策略处理分布式事务问题,确保数据一致性:

  1. 本地事务 + 最终一致性:对于非核心业务,采用本地事务保证数据一致性,通过异步消息实现最终一致性
  2. TCC事务:对于核心业务,采用Try-Confirm-Cancel模式确保数据一致性
  3. 幂等设计:所有接口都进行幂等设计,防止重复操作
  4. 分布式锁:使用Redis分布式锁解决并发更新问题

5.3 缓存策略

系统采用多级缓存策略,提高系统性能:

  1. 本地缓存:使用Caffeine实现本地缓存,减少热点数据的数据库访问
  2. 分布式缓存:使用Redis作为分布式缓存,缓存共享数据和会话信息
  3. 缓存更新策略:采用失效策略和主动更新相结合的方式
  4. 缓存预热:关键业务数据在系统启动时进行预热

6. 服务治理

6.1 服务注册与发现

基于Nacos实现服务注册与发现,提供高可用的服务注册中心。

核心特性

  • 自动注册:服务启动时自动注册到Nacos
  • 健康检查:定期检查服务健康状态
  • 服务发现:支持根据服务名动态发现服务实例
  • 配置管理:支持动态配置更新

6.2 配置管理

统一使用Nacos配置中心管理各环境的配置文件。

配置隔离

  • 命名空间(Namespace):隔离不同环境(开发、测试、生产)
  • 配置分组(Group):隔离不同业务线或应用
  • 配置集(Data ID):具体的配置文件

6.3 监控与日志

系统集成了完善的监控和日志系统:

  1. 业务日志:通过自定义注解@ApiOperationLog实现接口操作日志的自动记录
  2. 系统监控:集成Spring Boot Actuator提供健康检查、指标监控等功能
  3. 分布式链路追踪:预留了链路追踪接口,可集成SkyWalking等组件

7. 扩展性设计

7.1 模块化设计

项目采用严格的模块化设计,每个微服务都分为API层和业务层:

  • API层:定义服务接口和数据模型,供其他服务调用
  • 业务层:实现具体的业务逻辑,依赖API层

这种设计使得服务之间通过API解耦,便于独立开发和部署。

7.2 水平扩展

各微服务均支持水平扩展,通过Nacos服务发现和Gateway负载均衡实现:

  • 无状态设计:服务本身不存储状态,状态数据存储在Redis或数据库中
  • 弹性伸缩:支持根据负载动态调整服务实例数量

8. 安全机制

系统实现了多层次的安全防护机制:

  1. 身份认证:基于Sa-Token实现统一的身份认证
  2. 权限控制:基于角色的访问控制(RBAC)
  3. 接口防护:防SQL注入、XSS攻击、CSRF攻击等
  4. 敏感数据加密:用户密码等敏感数据加密存储
  5. 接口限流:防止恶意请求和流量攻击

9. 总结与展望

小哈书项目采用现代化的微服务架构,通过合理的模块划分和技术选型,构建了一个高性能、可扩展、易维护的社交分享平台。

项目充分利用了Spring Cloud Alibaba生态的优势,结合各类中间件,实现了丰富的业务功能和良好的系统性能。