Skip to content

接口优化

本章节介绍 HTTP 接口性能优化的常用手段与实践。

性能指标

  • 响应时间:P50 / P95 / P99
  • 吞吐量:QPS(每秒请求数)
  • 可用性:成功率 / 错误率

常用优化手段

1. 缓存

java
@Cacheable(value = "product", key = "#id", unless = "#result == null")
public Product getProduct(Long id) {
    return productDao.findById(id);
}
缓存层适用场景
本地缓存(Caffeine)热点数据,读多写少
分布式缓存(Redis)共享数据,跨实例一致
CDN 缓存静态资源、公开接口

2. 异步处理

java
// 非核心逻辑异步执行
@Async
public void sendNotification(Order order) {
    notificationService.send(order);
}

3. 并行调用

java
// CompletableFuture 并行调用多个服务
CompletableFuture<UserInfo> userFuture = CompletableFuture.supplyAsync(() -> userService.get(userId));
CompletableFuture<List<Order>> orderFuture = CompletableFuture.supplyAsync(() -> orderService.list(userId));

CompletableFuture.allOf(userFuture, orderFuture).join();

4. 减少网络往返

  • 接口合并(BFF 层聚合)
  • 批量查询替代循环单查
  • 使用 GraphQL 按需返回字段

5. 数据库优化

  • 索引覆盖,避免回表
  • 分页查询游标化
  • 读写分离,从库承担读流量

接口防抖与限流

java
// Sentinel 注解限流
@SentinelResource(value = "queryOrder", blockHandler = "handleBlock")
public OrderDTO queryOrder(Long orderId) {
    return orderService.getById(orderId);
}

性能测试工具

工具用途
JMeter压力测试,模拟并发请求
Arthas在线诊断,方法耗时分析
SkyWalking全链路追踪,定位瓶颈节点
wrk / hey轻量 HTTP 压测工具

基于 VitePress 构建