在这里插入图片描述


📖 相关链接

官方网站

演示站点

开源仓库


目录

  1. 微服务架构概述
  2. Spring Cloud Alibaba 技术栈选型
  3. 点狮多业务管理平台整体架构设计
  4. 注册中心与配置中心
  5. 服务网关设计
  6. 服务间通信
  7. 服务保障机制
  8. 分布式事务
  9. 多租户架构设计
  10. 监控与运维
  11. 单体/微服务双模式运行
  12. 生产环境最佳实践

1. 微服务架构概述

1.1 为什么选择微服务架构

随着企业业务系统的日益复杂,传统的单体架构逐渐暴露出诸多问题:

单体架构痛点 微服务解决方案
代码耦合严重,难以维护 服务独立部署,职责清晰
技术栈锁定,难以升级 服务技术选型灵活
扩展性差,无法按需伸缩 独立扩展,资源利用率高
故障影响范围大 故障隔离,降级熔断
团队协作困难 服务边界清晰,并行开发

1.2 点狮多业务管理平台微服务化历程

点狮多业务管理平台平台从最初的单体架构逐步演进到现在的微服务架构,经历了以下阶段:

单体阶段 → 模块化阶段 → 服务化阶段 → 微服务阶段

图1-1:点狮多业务管理平台系统界面展示


2. Spring Cloud Alibaba 技术栈选型

2.1 技术栈对比

在微服务框架选型时,我们对比了主流方案:

特性 Spring Cloud Netflix Spring Cloud Alibaba Dubbo
社区活跃度 维护模式,部分组件停更 活跃,阿里主导 活跃,Apache
中文文档 完善 完善 一般
服务治理 Eureka(已停更) Nacos Nacos/Zookeeper
配置中心 Spring Cloud Config Nacos Nacos/Zookeeper
服务限流 Hystrix(已停更) Sentinel Hystrix/Sentinel
分布式事务 Seata Seata
网关 Zuul(已停更) Spring Cloud Gateway
易用性 一般 优秀 一般

2.2 点狮多业务管理平台技术栈

基于以上对比,点狮多业务管理平台选择了 Spring Cloud Alibaba 作为微服务基础框架:

<properties>
    <spring.boot.version>2.7.18</spring.boot.version>
    <spring.cloud.version>2021.0.9</spring.cloud.version>
    <spring.cloud.alibaba.version>2021.0.6.2</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Spring Cloud -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!-- Spring Cloud Alibaba -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring.cloud.alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

3. 点狮多业务管理平台整体架构设计

3.1 架构全景图

点狮多业务管理平台采用分层微服务架构,整体分为以下几层:

┌─────────────────────────────────────────────────────────────┐
│                         接入层                                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐       │
│  │  Web 前端     │  │  移动端       │  │  第三方系统   │       │
│  │  Vue3/Vue2   │  │  Uni-App     │  │  API 接入     │       │
│  └──────────────┘  └──────────────┘  └──────────────┘       │
└─────────────────────────────────────────────────────────────┘
                           ↓ HTTPS
┌─────────────────────────────────────────────────────────────┐
│                         网关层                                │
│  ┌─────────────────────────────────────────────────────┐    │
│  │           Spring Cloud Gateway                       │    │
│  │  • 路由转发  • 限流熔断  • 统一认证  • 日志追踪         │    │
│  └─────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘
                           ↓ RPC/REST
┌─────────────────────────────────────────────────────────────┐
│                       业务服务层                              │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐       │
│  │ System   │ │   OA     │ │   CRM    │ │   ERP    │       │
│  │ 服务     │ │  服务    │ │  服务    │ │  服务    │       │
│  ├──────────┤ ├──────────┤ ├──────────┤ ├──────────┤       │
│  │  BPM     │ │  MES     │ │  IoT     │ │  Mall    │       │
│  │ 服务     │ │  服务    │ │  服务    │ │  服务    │       │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘       │
└─────────────────────────────────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│                       基础设施层                              │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐       │
│  │ Nacos    │ │  Redis   │ │ MySQL    │ │ RocketMQ │       │
│  │ 注册/配置 │ │  缓存    │ │  数据库  │ │ 消息队列  │       │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘       │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐                  │
│  │ Sentinel │ │  Seata   │ │ XXL-Job  │                  │
│  │ 限流熔断 │ │ 分布式事务│ │ 定时任务 │                  │
│  └──────────┘ └──────────┘ └──────────┘                  │
└─────────────────────────────────────────────────────────────┘

在这里插入图片描述

图3-1:点狮多业务管理平台整体架构设计图

3.2 模块划分

点狮多业务管理平台采用模块化设计,核心模块包括:

<!-- pointlion-cloud/pom.xml -->
<modules>
    <!-- 基础依赖 -->
    <module>pointlion-dependencies</module>

    <!-- 网关服务 -->
    <module>pointlion-gateway</module>

    <!-- 基础框架 -->
    <module>pointlion-framework</module>

    <!-- Server 主项目 -->
    <module>pointlion-server</module>

    <!-- 业务模块 -->
    <module>pointlion-module-system</module>    <!-- 系统管理 -->
    <module>pointlion-module-infra</module>     <!-- 基础设施 -->
    <module>pointlion-module-bpm</module>       <!-- 工作流 -->
    <module>pointlion-module-mall</module>      <!-- 商城系统 -->
    <module>pointlion-module-report</module>    <!-- 报表系统 -->
    <module>pointlion-module-mp</module>        <!-- 微信公众号 -->
    <module>pointlion-module-crm</module>       <!-- CRM系统 -->
    <module>pointlion-module-erp</module>        <!-- ERP系统 -->
    <module>pointlion-module-iot</module>        <!-- 物联网 -->
    <module>pointlion-module-oa</module>         <!-- OA系统 -->
    <module>pointlion-module-hrm</module>        <!-- 人力资源 -->
    <module>pointlion-module-am</module>         <!-- 资产管理 -->
    <module>pointlion-module-ams</module>        <!-- 资产管理系统 -->
    <module>pointlion-module-mail</module>       <!-- 邮件系统 -->
    <module>pointlion-module-im</module>         <!-- 即时通讯 -->
    <module>pointlion-module-mes</module>        <!-- 制造执行 -->
</modules>

在这里插入图片描述

图3-2:点狮多业务管理平台IDEA项目模块结构


4. 注册中心与配置中心

4.1 Nacos 部署架构

点狮多业务管理平台使用 Nacos 同时作为注册中心和配置中心:

                    ┌─────────────┐
                    │   Nacos     │
                    │   集群      │
                    │  (3节点)    │
                    └─────────────┘
                           │
         ┌─────────────────┼─────────────────┐
         ↓                 ↓                 ↓
    ┌─────────┐      ┌─────────┐      ┌─────────┐
    │ Gateway │      │ System  │      │   OA    │
    │  服务   │      │  服务   │      │  服务   │
    └─────────┘      └─────────┘      └─────────┘

4.2 服务注册配置

bootstrap.yml 中配置 Nacos 注册中心:

spring:
  application:
    name: pointlion-module-system-server
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # Nacos 地址
      username: nacos              # Nacos 用户名
      password: nacos              # Nacos 密码
      discovery:
        namespace: dev             # 命名空间
        group: DEFAULT_GROUP       # 分组
        metadata:
          version: v1               # 版本号
          label: gray              # 灰度标记
      config:
        namespace: dev             # 配置命名空间
        group: DEFAULT_GROUP       # 配置分组
        file-extension: yml        # 配置文件格式

在这里插入图片描述

图4-1:Nacos控制台服务列表展示

从上图可以看到,点狮多业务管理平台的各个微服务实例都已成功注册到 Nacos 注册中心,包括:

  • pointlion-gateway:API 网关服务
  • pointlion-module-system-server:系统管理服务
  • pointlion-module-oa-server:OA 办公服务
  • pointlion-module-crm-server:CRM 客户管理服务
  • pointlion-module-bpm-server:工作流服务
  • 等其他业务服务…

4.3 配置中心使用

在 Nacos 中统一管理配置,实现配置的集中管理和动态刷新:

# Nacos 配置:pointlion-module-system-server.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/pointlion_cloud
    username: root
    password: 123456
  redis:
    host: localhost
    port: 6379

# 自定义配置
pointlion:
  security:
    mock-enable: true
  swagger:
    enable: true

配置中心优势

  1. 集中管理:所有服务配置统一管理
  2. 动态刷新:配置修改无需重启服务
  3. 环境隔离:支持多环境配置(dev/test/prod)
  4. 权限控制:配置读写权限细粒度控制

5. 服务网关设计

5.1 Gateway 核心配置

点狮多业务管理平台使用 Spring Cloud Gateway 作为统一入口:

spring:
  cloud:
    gateway:
      routes:
        # 系统管理服务路由
        - id: admin-system
          uri: lb://pointlion-module-system-server
          predicates:
            - Path=/admin-api/system/**
          filters:
            - RewritePath=/admin-api/system/(?<segment>.*), /$\{segment}

        # OA 服务路由
        - id: admin-oa
          uri: lb://pointlion-module-oa-server
          predicates:
            - Path=/admin-api/oa/**
          filters:
            - RewritePath=/admin-api/oa/(?<segment>.*), /$\{segment}

      # 全局 CORS 配置
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders: "*"
            allowCredentials: true

5.2 统一认证过滤器

实现全局 Token 校验:

@Component
public class TokenAuthFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1. 获取请求路径
        String path = exchange.getRequest().getPath().value();

        // 2. 白名单路径直接放行
        if (isWhitePath(path)) {
            return chain.filter(exchange);
        }

        // 3. 获取 Token
        String token = exchange.getRequest().getHeaders().getFirst("Authorization");

        // 4. Token 校验
        if (StringUtils.isEmpty(token) || !validateToken(token)) {
            return unauthorized(exchange);
        }

        // 5. 解析用户信息并传递给下游服务
        String userId = parseUserId(token);
        ServerHttpRequest mutatedReq = exchange.getRequest().mutate()
            .header("X-User-Id", userId)
            .build();

        return chain.filter(exchange.mutate().request(mutatedReq).build());
    }

    @Override
    public int getOrder() {
        return -100; // 过滤器优先级
    }
}

5.3 限流熔断配置

使用 Sentinel 实现限流熔断:

@Configuration
public class GatewayConfiguration {

    @Bean
    public BlockRequestHandler blockRequestHandler() {
        return new BlockRequestHandler() {
            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange exchange,
                                                        Throwable ex) {
                // 返回限流异常
                return ServerResponse.status(429)
                    .contentType(MediaType.APPLICATION_JSON)
                    .body(BodyInserters.fromValue(Result.error(429, "请求过于频繁,请稍后再试")));
            }
        };
    }
}

6. 服务间通信

6.1 OpenFeign 远程调用

点狮多业务管理平台使用 OpenFeign 实现服务间同步通信:

// API 接口定义
@FeignClient(
    contextId = "userApi",
    name = "pointlion-module-system-server", // 服务名
    path = "/system/user"                    // 路径前缀
)
public interface UserApi {

    /**
     * 获取用户信息
     */
    @GetMapping("/get")
    UserRespDTO getUser(@RequestParam("id") Long id);

    /**
     * 批量获取用户
     */
    @PostMapping("/list-by-ids")
    List<UserRespDTO> listUsers(@RequestBody List<Long> ids);
}

6.2 RPC 通信优化

@Configuration
public class FeignConfiguration {

    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.BASIC; // 日志级别
    }

    @Bean
    public Request.Options feignOptions() {
        return new Request.Options(
            5, TimeUnit.SECONDS,  // 连接超时
            30, TimeUnit.SECONDS  // 读取超时
        );
    }
}

6.3 RocketMQ 消息队列

使用 RocketMQ 实现服务间异步通信:

@Component
public class MessageProducer {

    @Resource
    private RocketMQTemplate rocketMQTemplate;

    /**
     * 发送消息
     */
    public void sendMessage(String topic, Object message) {
        rocketMQTemplate.asyncSend(topic, message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                log.info("[sendMessage][消息发送成功] topic={}, message={}", topic, message);
            }

            @Override
            public void onException(Throwable throwable) {
                log.error("[sendMessage][消息发送失败] topic={}, message={}", topic, message, throwable);
            }
        });
    }
}

// 消息消费者
@RocketMQMessageListener(
    topic = "TOPIC_OA_TODO",
    consumerGroup = "CG_OA_TODO"
)
@Service
public class TodoMessageConsumer implements RocketMQListener<TodoMessage> {

    @Override
    public void onMessage(TodoMessage message) {
        log.info("[onMessage][收到消息] message={}", message);
        // 处理待办消息
    }
}

在这里插入图片描述

图6-1:点狮多业务管理平台即时通讯功能展示


7. 服务保障机制

7.1 Sentinel 流控规则

# Sentinel 流控规则配置
spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8858  # Sentinel 控制台地址
      eager: true                   # 立即加载
      datasource:
        flow:
          nacos:
            rule-type: flow         # 规则类型
            nacos:
              server-addr: localhost:8848
              group-id: SENTINEL_GROUP
              data-id: ${spring.application.name}-flow-rules

7.2 降级策略配置

@RestController
public class UserController {

    @Resource
    private UserApi userApi;

    @GetMapping("/api/user/{id}")
    @SentinelResource(
        value = "getUser",
        blockHandler = "handleBlock",
        fallback = "handleFallback"
    )
    public Result<UserRespDTO> getUser(@PathVariable Long id) {
        UserRespDTO user = userApi.getUser(id);
        return Result.success(user);
    }

    // 限流处理
    public Result<UserRespDTO> handleBlock(Long id, BlockException ex) {
        return Result.error(429, "系统繁忙,请稍后再试");
    }

    // 降级处理
    public Result<UserRespDTO> handleFallback(Long id, Throwable ex) {
        return Result.error(500, "服务暂时不可用");
    }
}

8. 分布式事务

8.1 Seata 配置

点狮多业务管理平台使用 Seata 实现分布式事务:

seata:
  enabled: true
  application-id: ${spring.application.name}
  tx-service-group: ${spring.application.name}-group
  service:
    vgroup-mapping:
      pointlion-module-system-group: default
    grouplist:
      default: 127.0.0.1:8091
  registry:
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      username: nacos
      password: nacos

8.2 分布式事务使用

@Service
public class OrderService {

    @GlobalTransactional(name = "create-order", rollbackFor = Exception.class)
    public void createOrder(OrderCreateReqDTO reqDTO) {
        // 1. 创建订单
        OrderDO order = buildOrder(reqDTO);
        orderMapper.insert(order);

        // 2. 扣减库存(远程调用)
        productApi.deductStock(reqDTO.getProductId(), reqDTO.getCount());

        // 3. 扣减余额(远程调用)
        userApi.deductBalance(reqDTO.getUserId(), order.getAmount());

        // 如果任何一步失败,Seata 会自动回滚所有操作
    }
}

9. 多租户架构设计

9.1 多租户隔离策略

点狮多业务管理平台采用数据隔离的多租户架构:

/**
 * 租户上下文
 */
public class TenantContextHolder {

    private static final ThreadLocal<Long> TENANT_ID = new ThreadLocal<>();

    public static void setTenantId(Long tenantId) {
        TENANT_ID.set(tenantId);
    }

    public static Long getTenantId() {
        return TENANT_ID.get();
    }

    public static void clear() {
        TENANT_ID.remove();
    }
}

/**
 * 租户拦截器
@Component
*/
public class TenantInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                            Object handler) throws Exception {
        // 从 Header 或 Token 中解析租户 ID
        Long tenantId = parseTenantId(request);
        TenantContextHolder.setTenantId(tenantId);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) {
        TenantContextHolder.clear();
    }
}

9.2 MyBatis-Plus 租户插件

@Configuration
public class MyBatisPlusConfiguration {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        // 租户插件
        TenantLineInnerInterceptor tenantInterceptor = new TenantLineInnerInterceptor();
        tenantInterceptor.setTenantLineHandler(new TenantLineHandler() {
            @Override
            public Long getTenantId() {
                return TenantContextHolder.getTenantId();
            }

            @Override
            public boolean ignoreTable(String tableName) {
                // 忽略不需要租户隔离的表
                return "system_tenant".equals(tableName)
                    || "system_dict_data".equals(tableName);
            }
        });

        interceptor.addInnerInterceptor(tenantInterceptor);
        return interceptor;
    }
}

10. 监控与运维

10.1 Spring Boot Actuator

management:
  endpoints:
    web:
      exposure:
        include: '*'  # 暴露所有端点
  endpoint:
    health:
      show-details: always  # 显示健康详情

10.2 SkyWalking 链路追踪

在启动参数中添加 SkyWalking Agent:

java -javaagent:/path/to/skywalking-agent.jar \
     -Dskywalking.agent.service_name=pointlion-system \
     -Dskywalking.collector.backend_service=localhost:11800 \
     -jar pointlion-module-system-server.jar

11. 单体/微服务双模式运行

11.1 双模式架构设计

点狮多业务管理平台支持单体和微服务两种模式运行,满足不同场景需求:

<!-- 单体模式打包配置 -->
<profiles>
    <profile>
        <id>standalone-package</id>
        <properties>
            <maven.jar.skip>true</maven.jar.skip>
        </properties>
    </profile>
</profiles>

<!-- 单体打包命令 -->
mvn clean package -am -pl pointlion-server -Dmaven.test.skip=true -Pstandalone-package

11.2 服务启动模式

模式 启动方式 适用场景
微服务模式 各模块独立启动 大型部署、高并发场景
单体模式 pointlion-server 统一启动 快速部署、小型应用

12. 生产环境最佳实践

12.1 容器化部署

FROM openjdk:8-jre-alpine
COPY target/pointlion-module-system-server.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

12.2 环境隔离

开发环境 (dev) → 测试环境 (test) → 预发环境 (pre) → 生产环境 (prod)

12.3 性能优化建议

  1. 数据库优化:索引优化、慢查询优化、读写分离
  2. 缓存策略:Redis 缓存热点数据、缓存预热
  3. 异步处理:使用 MQ 异步处理非核心流程
  4. 服务治理:合理设置超时时间、熔断降级策略
  5. 监控告警:建立完善的监控告警体系

总结

本文详细介绍了点狮多业务管理平台基于 Spring Cloud Alibaba 的微服务架构设计,涵盖了从技术选型到生产部署的完整过程。通过合理的架构设计和技术选型,点狮多业务管理平台实现了:

  1. ✅ 服务独立部署,职责清晰
  2. ✅ 灵活的扩展能力
  3. ✅ 完善的服务保障机制
  4. ✅ 多租户 SaaS 支持
  5. ✅ 单体/微服务双模式运行

希望本文能为正在做微服务架构选型的团队提供参考。


参考资料


演示站点

  • 官网:http://www.dianshixinxi.com
  • 点狮多业务管理平台:http://cloud.dianshixinxi.com:90
  • Ruoyi-多业务单体版本:http://admin.dianshixinxi.com:90

感谢阅读!如果觉得有帮助,欢迎 Star 支持我们的开源项目:

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐