【发布时间】:2021-10-09 20:32:08
【问题描述】:
我有一个 .NET Core WebAPI,我的 React UI 正在调用它来验证用户。它为此调用了第 3 方 API。一切正常,但我们已经开始对其进行性能测试,当我们增加尝试同时登录的用户时,它的扩展性不好。 (耗时 30 秒)
我们调用的第 3 方 API 表示它们以毫秒为单位做出响应。
我的 API 托管在 AWS 上的 Kubernetes 容器中。我已将 AWS X-ray 添加到代码中以尝试获取更多信息,但我不确定如何解释结果。
代码非常简单 - 这是来自 MyAuthenticationProvider 类的 sn-p(构造函数采用指标收集器(用于 AWS X-Ray 和用于进行调用的 securityProvider http 客户端)
metricCollector.StartCollection("Stage 1");
HttpResponseMessage response = await securityProvider.SendAsync(requestMessage);
metricCollector.EndCollection();
上述代码的 X-Ray 图像是:
X-Ray 是否显示该 API 确实等待 30 多秒才能返回响应,我应该联系该公司进行进一步调查,即使他们告诉我所有流量也在毫秒。
或者是我在 Startup.cs 的 MyAuthProvider 类中定义的 http 客户端在并发用户增加时无法正确扩展?
这是 Startup.cs 中的代码
services.AddTransient<IMyAuthenticationProvider>(ctx =>
{
IHttpClientFactory clientFactory = ctx.GetRequiredService<IHttpClientFactory>();
return new MyAuthenticationProvider(
clientFactory.CreateClient("3RDPARTYAUTHCLIENT"),
ctx.GetService<IMetricCollector>());
});
我要提高性能的另一件事是引入 Redis 来缓存其中一些响应,因为它们会为不同的操作多次调用但结果将是相同的
【问题讨论】:
-
需要注意的一点是
HttpClient,默认情况下,只允许向给定端点发送类似 6 个并发请求。因此,如果您的负载超过 6 个请求/(下游 API 响应的时间),它们将开始备份。您可以增加并发 HTTP 请求的数量(例如,请参阅here) -
@RB。 - 感谢链接 - 在这里阅读 - docs.microsoft.com/en-us/dotnet/framework/network-programming/… - 说 ServicePoint 在 .NET Core 5 中被认为是旧版?我不知道这是否意味着它应该在里面解决
-
我想我可以在这里设置它 - docs.microsoft.com/en-us/dotnet/api/…
-
MyAuthenticationProvider 的生命周期是什么?控制器是否每次都在构造它并调用它?将其注册为瞬态的任何理由?
标签: c# performance asp.net-core .net-core aws-xray