在 TLS 上 Go 比 Nginx 厉害这么多吗?

2022-09-01 15:49:50 +08:00
 dzdh

是我测试流程有问题吗?或者环境?

:2222的是 go 写的 https server 。代码很简单。都是标准库的。 根路径就返回个 index.html 内容是 404 not found

nginx 10 秒 1771 go 就 10 秒 6.9w

go 的 tlsconfig 如下

tlsCfg := &tls.Config{
    SessionTicketsDisabled: false,
    ClientSessionCache:     tls.NewLRUClientSessionCache(1000)
}

nginx ssl 配置部分如下

ssl_certificate   .pem;
ssl_certificate_key  .key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;

证书是 rsa2048

而且还有测试期间,nginx 部分就 cpu100% go 部分就 cpu50%上下。

服务器是阿里云的性能突发实例。

6807 次点击
所在节点    Go 编程语言
49 条回复
dem0ns
2022-09-01 15:55:43 +08:00
没有可比性
xuelu520
2022-09-01 15:56:41 +08:00
一个反代,和一个语言比,有点意思
dzdh
2022-09-01 15:56:43 +08:00
@dem0ns 道理我都懂,但是问题出在哪呢? tls 版本? nginx 换成 1.3?
rekulas
2022-09-01 15:57:04 +08:00
事出反常必有妖,go 开 cache nginx 不开是不是不公平
dzdh
2022-09-01 15:58:23 +08:00
@rekulas 有的。cache 在全局配置中 ssl_session_cache builtin:1000 shared:SSL:10m;
seers
2022-09-01 16:01:31 +08:00
都走的 http2 吗,Nginx 可能默认不是
dzdh
2022-09-01 16:02:01 +08:00
@seers 是 http2 。都一样。都是 HTTP2
rekulas
2022-09-01 16:03:02 +08:00
可能还有个原因,检查下 go 端是不是默认开启了 keep alive
dzdh
2022-09-01 16:03:57 +08:00
@seers
我 go 还 httputil.reverseproxy 到 localhost:80 了(nginx)
seers
2022-09-01 16:04:14 +08:00
还有一些 Nginx 的配置都会有影响,worker 数量,CPU aff ,multi acc 之类的,总得来的可比性不高
dzdh
2022-09-01 16:04:30 +08:00
@rekulas 这是哪个开关。但是 nginx 也有 keepalive_timeout 65 啊
rekulas
2022-09-01 16:07:35 +08:00
@dzdh wrk 没用过 你可以用 ab 压测下对比下结果里的 Keep-Alive 数量
DAPTX4869
2022-09-01 16:08:50 +08:00
@dzdh #7 记得 v2 的 h2+tls 教程, 写着 nginx 不支持 http2, 还特意换了 caddy
chendy
2022-09-01 16:10:46 +08:00
@DAPTX4869 nginx 好几年前就支持 http2 了啊……
justanetizen
2022-09-01 16:11:38 +08:00
@xuelu520 为什么没可比性,前者说到底是 C
dzdh
2022-09-01 16:12:49 +08:00
@justanetizen #15
是的。但是这个结果在我这很诡异啊。
justanetizen
2022-09-01 16:13:07 +08:00
现在有一些公司其实不用 nginx ,用的硬件负载 F5
justanetizen
2022-09-01 16:15:17 +08:00
@dzdh 两者都是用同一个版本的 TLS 呢?
DAPTX4869
2022-09-01 16:17:34 +08:00
@chendy #14 重新翻了下, 教程说的是 nginx 不支持 h2 反代. 不过引用的 issue 是 18 年的了
justanetizen
2022-09-01 16:19:15 +08:00
另外,nginx 是多进程,go 是多线程,架构本身是不同的,进程比线程的切换开销大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/877014

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX