背景 #
2025年6月到2026年3月,我在亚信科技实习,参与了公司核心号卡业务系统的微服务重构项目。
这个项目是将一个基于 Spring Boot 的单体应用,逐步迁移至 Spring Cloud 微服务架构。作为实习生,我主要负责网关层优化、服务间通信、分布式事务等模块的设计与开发。
一、网关统一管理与路由优化 #
系统重构的第一步是建立统一的API网关。我们基于 Spring Cloud Gateway 对所有外部请求进行统一管理。
核心工作 #
- 路由转发优化:对原有路由规则进行二次封装,提升网关转发效率
- 全局过滤器:自定义全局过滤器,统一处理接口鉴权和请求耗时统计
- 异常处理:排查并修复空指针异常、请求404、网关转发失败等问题
@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange,
GatewayFilterChain chain) {
String path = exchange.getRequest().getURI().getPath();
// 白名单路径直接放行
if (isWhiteList(path)) {
return chain.filter(exchange);
}
// Token 校验
String token = exchange.getRequest()
.getHeaders().getFirst("Authorization");
if (token == null || !validateToken(token)) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return exchange.getResponse().setComplete();
}
// 耗时统计
long start = System.currentTimeMillis();
return chain.filter(exchange).doFinally(signal -> {
long cost = System.currentTimeMillis() - start;
log.info("[Gateway] {} cost: {}ms", path, cost);
});
}
@Override
public int getOrder() {
return -1;
}
}
⚠️ 实际生产中,全局过滤器的 order 值要合理设置,确保鉴权过滤器优先于业务过滤器执行,同时要处理好白名单和健康检查接口的放行逻辑。
二、服务间通信与熔断降级 #
微服务拆分后,服务间调用变得频繁。我们基于 OpenFeign 封装外部请求接口进行远程调用,并使用 Sentinel 实现自定义降级策略。
@FeignClient(
name = "card-service",
fallbackFactory = CardServiceFallbackFactory.class
)
public interface CardServiceClient {
@GetMapping("/card/query")
Result<CardVO> queryCardInfo(@RequestParam("cardNo") String cardNo);
}
@Component
public class CardServiceFallbackFactory
implements FallbackFactory<CardServiceClient> {
@Override
public CardServiceClient create(Throwable cause) {
return new CardServiceClient() {
@Override
public Result<CardVO> queryCardInfo(String cardNo) {
log.warn("卡服务降级触发: {}", cause.getMessage());
return Result.fail("服务繁忙,请稍后重试");
}
};
}
}降级策略的核心思路:当某个服务不可用时,不直接抛异常,而是返回一个兜底结果,保证用户侧的体验不受影响。
三、Seata 分布式事务保障一致性 #
在微服务场景下,任务审批流程涉及多个服务协同操作。为保障数据一致性,我们采用 Seata AT 模式 实现分布式事务:
sequenceDiagram
participant Client as 客户端
participant GW as Gateway
participant Approve as 审批服务
participant Project as 项目服务
participant TC as Seata TC
Client->>GW: 提交审批请求
GW->>Approve: 创建审批单
Approve->>TC: 开启全局事务
Approve->>Project: 更新项目状态
Project->>TC: 注册分支事务
Project-->>Approve: 操作成功
Approve->>TC: 全局提交/回滚
Approve-->>GW: 返回结果
GW-->>Client: 响应Seata AT 模式最大的好处是对业务代码零侵入,只需要加一个 @GlobalTransactional 注解,框架会自动管理事务的提交和回滚。
四、LiteFlow 可视化业务编排 #
在号卡业务中,很多流程涉及多个步骤的串联。我们引入 LiteFlow 框架,通过可视化配置界面来编排业务逻辑:
<chain name="cardProcessChain">
THEN(
validateParams,
checkCardStatus,
doBusiness,
sendNotification
);
</chain>这样做的好处是业务人员可以通过界面拖拽调整流程顺序,不需要每次都改代码重新发布。
实习收获 #
这9个月让我从「能写CRUD」成长为「能参与微服务架构设计」:
| 能力维度 | 成长 |
|---|---|
| 架构思维 | 理解微服务设计原则,能参与技术方案评审 |
| 排错能力 | 独立排查生产环境的空指针、404、网关转发等问题 |
| 工程实践 | LiteFlow编排、Docker部署、CI/CD流程 |
| 沟通协作 | 与产品、测试、前端团队高效协作 |