本文从两个方向提升 ASP.NET Core 服务的性能:
- 通过 Output Cache 减少热点端点的重复计算与 IO;
- 通过 HTTP/3(QUIC) 在支持的环境下降低握手与队头阻塞带来的延迟。
## 版本与环境校验(可验证)
dotnet --info
输出中确认 `Runtime: .NET 8`;HTTP/3 需要操作系统与网络栈支持(Windows 11/Server 2022、现代 Linux 发行版等)以及 HTTPS 证书。
## Output Cache 最小示例(可验证)
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.OutputCaching;
using Microsoft.Extensions.DependencyInjection;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOutputCache(options =>
{
options.AddPolicy("short", p => p.Expire(TimeSpan.FromSeconds(10))
.SetVaryByRouteValue("id"));
});
var app = builder.Build();
app.UseOutputCache();
app.MapGet("/news/{id}", (int id) => new { id, ts = DateTimeOffset.UtcNow })
.CacheOutput("short");
app.Run();
验证:连续请求同一 `id`,在 10 秒有效期内应返回缓存命中(观察响应头 `x-cache: cached` 或时戳不变化)。跨不同 `id` 不共享缓存。
### 缓存失效(可验证)
using Microsoft.AspNetCore.OutputCaching;
app.MapPost("/news/{id}/invalidate", async (int id, IOutputCacheStore store, CancellationToken ct) =>
{
await store.EvictByTagAsync("news-" + id, ct); // 如使用 Tag 策略时
return Results.Ok();
});
在复杂场景中可改为基于 Tag 的策略:`p.Tag("news-" + id)`,写操作后按 Tag 失效以保证一致性。
## 启用 HTTP/3(QUIC)(可验证)
using Microsoft.AspNetCore.Server.Kestrel.Core;
builder.WebHost.ConfigureKestrel(options =>
{
options.ListenAnyIP(5001, listen =>
{
listen.UseHttps();
listen.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
});
});
验证:
- 使用支持 HTTP/3 的客户端访问,如 `curl --http3 -I https://localhost:5001/news/1`,应建立 QUIC 连接并返回 200。
- 在不支持 HTTP/3 的客户端将回退到 HTTP/2/1.1。
## 与 Response Caching 的差异
- Output Cache 工作在应用层,支持多策略、端点级配置与失效;Response Caching 更接近代理式缓存,能力较为有限。
- 面向热点 API,优先使用 Output Cache;静态文件或强代理场景可结合 CDN。
## 压测建议(可验证)
- 选择典型热点端点(如 `/news/{id}`)进行 60–120 秒压测,记录 `RPS`、`p95/p99` 与 CPU 使用率;对比开启/关闭 Output Cache 的收益。
- 对比 `HTTP/3` 与 `HTTP/2` 在弱网络或高并发下的延迟分布;以 `curl --http3` 或团队现有工具链进行验证。
## 注意事项
- HTTP/3 需要 HTTPS 与系统网络栈支持;在不满足前提的环境下保持回退路径(HTTP/2/1.1)。
- Output Cache 的有效期与失效策略需要与业务一致性策略匹配,谨慎缓存读写混合端点。
- 在生产前于预演环境跑通端到端链路(证书、反向代理、网关),确保兼容性与观测数据可用。
## 结语
组合使用 Output Cache 与 HTTP/3,可在热点端点与长连接场景实现显著的吞吐与时延改进。坚持“可验证”的方法与监控回归,才能稳定将收益带入生产。

发表评论 取消回复