接口优化
本章节介绍 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 压测工具 |
