如何解决.net核心api和nginx作为反向代理的性能问题
说明: 我们使用Nginx作为反向代理,它将负载分配给使用HotChocolate(.net core 3.1)运行Graphql接口的多个后端服务器。然后,Graphql接口会触发一个ElasticSearch调用(使用官方的nesT库)。
问题: 我们使用4个后端服务器和一个Nginx反向代理启动系统,并使用JMeter对其进行负载测试。那绝对很棒。当我们杀死第四个吊舱时,它的表现也很好。 当我们剩下两个(或一个)豆荚时,问题才跳进来。 Nginx开始仅返回错误,不再将负载分配给其余两个服务器。
我们尝试了什么:
-
我们认为弹性搜索查询的性能不佳,从而可能会阻塞后端。当直接针对弹性搜索执行查询时,我们具有更高的性能。所以那应该不是问题。
-
我们的第二种方法是graphql.net库是伪造的,因此我们将其替换为HotChocolate,这完全没有效果。
-
当我们用REST API接口替换graphql接口时,它突然起作用了吗?!
-
我们使用了Nginx配置,但是找不到实际修复它的设置。
-
我们用traefik替换了Nginx,但是结果也一样。
-
我们发现,一旦我们将Pod设置为3,反向代理上的ESTABLISH Connections数量就会突然翻倍(没有任何额外的传入)。 =>也许它正在等待这些连接的超时并阻止任何其他传入的连接?!
我们非常感谢您的帮助。 非常感谢。
如果您想/需要了解其他信息,请告诉我!
更新:我对代码做了一些更改。现在效果更好,但是当从一个Pod扩展到两个Pod时,性能下降约20-30秒。这是为什么?我们该如何改善呢?
[warn] 21#21: *9717 upstream server temporarily disabled while reading response header from upstream,client: 172.20.0.1,server: dummy.prod.com,request: "POST /graphql HTTP/1.1",upstream: "http://172.20.0.5:5009/graphql",host: "dummy.prod.com:81"
Nginx_1 | 2020/09/14 06:01:24 [error] 21#21: *9717 upstream timed out (110: Connection timed out) while reading response header from upstream,host: "dummy.prod.com:81"
Nginx_1 | 172.20.0.1 - - [14/Sep/2020:06:01:24 +0000] "POST /graphql HTTP/1.1" 504 167 "-" "Apache-HttpClient/4.5.12 (Java/14)" "-"
Nginx配置:
upstream dummy {
server dummy0:5009 max_fails=3 fail_timeout=30s;
server dummy1:5009 max_fails=3 fail_timeout=30s;
server dummy3:5009 max_fails=3 fail_timeout=30s;
server dummy2:5009 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
location / {
proxy_connect_timeout 180s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_buffering off;
proxy_buffer_size 128k;
proxy_buffers 4 128k;
proxy_max_temp_file_size 1024m;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_cookie_domain off;
proxy_cookie_path off;
# In case of errors try the next upstream server before returning an error
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 0;
proxy_next_upstream_tries 3;
proxy_pass http://dummy;
}
server_name dummy.prod.com;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。