本文从两个方向提升 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,可在热点端点与长连接场景实现显著的吞吐与时延改进。坚持“可验证”的方法与监控回归,才能稳定将收益带入生产。



点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部