abcbuzhiming
V2EX  ›  问与答

是 Nginx 已经落后时代了,还是那些人在吹水?

  •  
  •   abcbuzhiming · Nov 30, 2021 · 14547 views
    This topic created in 1806 days ago, the information mentioned may be changed or developed.
    刚刚看到一篇公众号,石墨文档说他们改造自己 websocket 网关,看了一眼是用 go 实现的,里面的有个数据很吓人,4 核心 8GB ,单机 48w 连接。

    然后我在 v2 搜了一下,好家伙,有人宣称自己写出了单机 100w 连接数的网络库。一看也是 go 。

    我记得 nginx 的单机负载也就是 3w-5w 连接,网上极少见有人能搞到 10w 连接的。上面这些 50w 和 100w 单机连接数的真的不是在吹牛?
    78 replies  •  2021-12-12 18:16:15 +08:00
    wellsc
    wellsc
    Nov 30, 2021
    1
    ng 的数据有这么弱吗?你的数据哪来的
    murmur
    murmur
    Nov 30, 2021
    2
    那你应该能搜出 nginx 百万连接的文章啊,而且 2019 年就开始吹了

    他的连接是 48w ,但是并发是 1.8w/s 建立数,测试数据是心跳包,这个应该比 web 页面还轻一点吧
    maskerTUI
    maskerTUI
    Nov 30, 2021
    3
    用脚思考都知道答案
    ipwx
    ipwx
    Nov 30, 2021
    4
    通用机和定制机,当然在某些极端场景下表现有差别。
    supuwoerc
    supuwoerc
    Nov 30, 2021❤️69
    5
    公众号啊,那没事了。

    按照公众号上吹的,我能二十天精通了 xx ,一个月成为了 xx 架构师,三年步入年薪百万。

    现实:回复“资料”下载资料,百度云下载速度:8k/s ,打开资料来源 csdn+某某培训班。
    yanbo92
    yanbo92
    Nov 30, 2021 via iPhone
    6
    根据我的认知,这还是 nginx 的时代
    dolphintwo
    dolphintwo
    Nov 30, 2021
    7
    都是百万连接啊,谁也别笑谁,( Nginx 真好用
    Jooooooooo
    Jooooooooo
    Nov 30, 2021❤️4
    8
    没做过真正的业务喜欢吹这种数字
    xiao109
    xiao109
    Nov 30, 2021
    9
    你连上数据库啥也不干只查看一下数据库版本你也可以
    libook
    libook
    Nov 30, 2021❤️6
    10
    https://www.nginx.com/blog/nginx-websockets-performance/

    2014 年的文章。

    “Even with 50,000 active WebSocket connections, NGINX required less than 1 Gb memory and less than 1 core of CPU capacity”

    所以单机负载 3w-5w 的信息不知道是什么来源。

    Nginx 这种用 C 写的优化怪物,Go 是无论如何都跟不上的,当然不排除有些非通用场景需要依靠定制化来优化性能,但应该也比不上开发 Nginx module 或者直接魔改 Nginx ,如果追求极致的话。
    plko345
    plko345
    Nov 30, 2021 via Android❤️2
    11
    lvs > nginx >= haproxy > go 写的
    abcbuzhiming
    abcbuzhiming
    OP
    Nov 30, 2021
    12
    @wellsc nginx 做反代的时候单机一般就 3w 连接左右,5w 开始就不是很稳定,注意我说的是单机,数据来源来自极客时间的从零开始学架构课程,常见系统性能量级。另外我自己实际测试也差不多这个量级

    @murmur Nginx 单机百万连接的文章?你找个让我看看它的配置。石墨文档那个是用来做 websocket gateway ,也就是说其实是个反代


    @libook Nginx 在做反代的时候大约就 3w-5w 的连接
    FakNoCNName
    FakNoCNName
    Nov 30, 2021
    13
    @abcbuzhiming 反向代理需要和真正的后端建立一次连接,一个主机连接服务时能建立的 socket 是有限的( 0xFFFF ),所以他们 100W 的单机连接是怎么来的?
    wslzy007
    wslzy007
    Nov 30, 2021
    14
    并发连接数这种为测试而测试的数据没太多实际意义,高并发下的 QPS 更有参考价值,另外同比资源占用也是个重要指标,否则一笑而过吧~
    starcraft
    starcraft
    Nov 30, 2021 via Android
    15
    这种 go 写出来的给 ngx 提鞋都不配。
    ly841000
    ly841000
    Nov 30, 2021
    16
    @abcbuzhiming 不稳定是因为系统,不是因为 Nginx ,想要更高连接需要对内核进行大量调节
    nash
    nash
    Nov 30, 2021
    17
    少看点公众号文章,多读点书
    rrfeng
    rrfeng
    Nov 30, 2021❤️8
    18
    你信不信它这个网关前面可能还挂了一层 nginx ……
    ila
    ila
    Nov 30, 2021 via Android
    19
    公众号看标题就能排雷
    dddd1919
    dddd1919
    Nov 30, 2021
    20
    吓死了,买个课程压压惊
    Illusionary
    Illusionary
    Nov 30, 2021❤️3
    21
    是的,我是在抖音看的
    ysc3839
    ysc3839
    Nov 30, 2021 via Android
    22
    我之前在服务器上搭建 WebDAV ,因为嫌 nginx 配置文件太复杂,就用了个 Golang 写的 WebDAV server ,nginx 反向代理它。
    结果仅仅用 16 个线程下载,就会出现前面几个连接有速度,后面直接连不上了,ssh 上去看发现 WebDAV server 的进程跑满了 CPU ,此时停止下载还是一直跑满,完全连不上。
    最后换成了 nginx ,32 线程轻轻松松。
    binux
    binux
    Nov 30, 2021 via Android
    23
    @ysc3839 这个 golang 也没关系啊
    ysc3839
    ysc3839
    Nov 30, 2021 via Android
    24
    @binux 当然有可能是那个 WebDAV server 自己实现有问题。
    但是用户感觉上就是,随便找一个开源的 Golang 程序,性能大概率是不如 nginx 这种使用 C/C++,且开发了多年,使用广泛的程序好的。
    shyangs
    shyangs
    Nov 30, 2021
    25
    一個主機連接服務時能建立的 socket 是有限的,他們 100W 的單機連接是怎麼來的?
    gesse
    gesse
    Nov 30, 2021
    26
    盲猜 caddy 改?
    mgcnrx11
    mgcnrx11
    Nov 30, 2021 via iPhone
    27
    多网卡、虚拟网卡、弄大一些 fd 也可以冲到 100w
    mgcnrx11
    mgcnrx11
    Nov 30, 2021 via iPhone
    28
    @mgcnrx11 是回复这位 @shyangs
    jasonkayzk
    jasonkayzk
    Nov 30, 2021
    29
    @supuwoerc #5 笑死我了,哈哈
    bruce0hh
    bruce0hh
    Nov 30, 2021 via Android
    30
    https://mp.weixin.qq.com/s/JLKbE-fsrjQNiMZH5mIX3g
    贴个 OSC 开源社区公众号的链接,本文由石墨文档技术杜旻翔分享
    1daydayde
    1daydayde
    Nov 30, 2021
    31
    看标题被吓到了,点进来放心了
    bipy
    bipy
    Nov 30, 2021
    32
    针对性优化跟通用方案没什么可比的吧
    iyaozhen
    iyaozhen
    Nov 30, 2021
    33
    nginx 没那么若,字节整个网关都是 nginx 集群搭的。当然 go 有 go 的好处,很多细节可控(性能不是重点),可以二次编程 百度的网关 BFE 就是 Go 写的,你可以看看。https://github.com/baidu/bfe-book
    MEX
    MEX
    Nov 30, 2021
    34
    文章没说是单机 100w 连接额....单机不带业务场景也测最多也就 50w 连接,而且还是不带业务逻辑的情况下。
    不使用 NGINX 的原因并不是性能差异问题,NGINX 的性能是很优秀的,不使用的原因单纯从成本角度考虑,使用四层负载加上 GO 挂载 TLS 证书,比七层负载的成本更低。
    40EaE5uJO3Xt1VVa
    40EaE5uJO3Xt1VVa
    Nov 30, 2021
    35
    人有多大胆,Nginx 有多大产
    ytmsdy
    ytmsdy
    Nov 30, 2021
    36
    呵呵,就算用 IIS 跑,咱们普通人的并发量也到达不了 IIS 的瓶颈!
    cache
    cache
    Nov 30, 2021
    37
    @shyangs
    想要单机百万连接多配几个 ip 就行了,只是这种评测没什么意义

    [AnyIP: Bind a whole subnet to your Linux machine – Widodh]( https://blog.widodh.nl/2016/04/anyip-bind-a-whole-subnet-to-your-linux-machine/)
    xz410236056
    xz410236056
    Nov 30, 2021
    38
    @supuwoerc #5 百度云现在下载无会员也有几 M 了
    salmon5
    salmon5
    Nov 30, 2021
    39
    C1000K 不是古代的技术吗?
    keppelfei
    keppelfei
    Nov 30, 2021
    40
    @supuwoerc 笑尿了
    Lyv5
    Lyv5
    Nov 30, 2021
    41
    @supuwoerc 一气呵成 哈哈哈哈哈
    vanton
    vanton
    Nov 30, 2021
    42
    nginx 百万级没问题。
    go 要想超过 nginx ,可能性不大,基本可以认为是胡扯。
    lzs5240
    lzs5240
    Nov 30, 2021
    43
    OpenResty Tengine 不都是 nginx
    leavic
    leavic
    Nov 30, 2021
    44
    哪天 C 语言培训或者教程书籍之类的火了,nginx 就性能碾压全世界了
    kilala2020
    kilala2020
    Nov 30, 2021
    45
    吹 go 并发都已经这么卷了么?汇编>C>=C++>java>Go ,大概是这样?
    Xusually
    Xusually
    Nov 30, 2021❤️1
    46
    推 go 就算了,踩 nginx 是几个意思?
    hmli
    hmli
    Nov 30, 2021❤️17
    47
    不是,你们**有些人**真就一点原文不看,看了个标题就开始闭着眼写命题作文呗?
    我翻遍全文也没找到哪里有提到说 4c8g 单机 48w 连接, 下面作者的实测里倒是有一个 16c32g 单机 1~1.8W 连接的数据。
    我也没看到作者哪里有提到说"nginx"不行,得换 golang 才厉害的论点,只看到在他的”网关 2.0“里因为业务需求把 nginx 网关换成了自研。
    还是说你们都是评论 bot 吗? 看到“公众号” "Golang" "并发”, 就触发你们的关键词了?
    sujin190
    sujin190
    Nov 30, 2021
    48
    看到“nginx 的单机负载也就是 3w-5w 连接”才是被惊了,你不是用的假 nginx 吧
    newmlp
    newmlp
    Nov 30, 2021
    49
    通用和定制的问题,你要上 dpdk 单机百万也不是不可以
    miniliuke
    miniliuke
    Nov 30, 2021
    50
    nginx 不是号称 1000w 连接,100w 的 qps 吗......
    adoal
    adoal
    Nov 30, 2021
    51
    benchmarking 这种事,笑笑就好
    oncethink
    oncethink
    Nov 30, 2021
    52
    兄弟们,以后还是要注意来源请求,看了原文再评论
    wanguorui123
    wanguorui123
    Nov 30, 2021
    53
    数据库磁盘 IO 才是瓶颈
    lesismal
    lesismal
    Nov 30, 2021❤️2
    54
    连接数不等于 qps ,如果百万连接数建立起来放那不用,也没什么压力呀,所以你看石墨的文章里,好像只是 5s 广播一次不算太大的消息吧,48w/5s ,不到 10w qps ,这个确实没什么压力,对于很多语言都没压力

    基于以上,楼主缺少正常的压力数据指标来对比性能是没什么意义的

    另外,
    “然后我在 v2 搜了一下,好家伙,有人宣称自己写出了单机 100w 连接数的网络库。一看也是 go 。”
    这好像是在说我?但是宣称这个词感觉怪怪的
    我这也备上了 websocket 百万连接的测试例子,有兴趣的同学完全可以自己跑下试试、而不是觉得这只是宣称,因为这应该是事实:
    https://github.com/lesismal/nbio-examples/tree/master/websocket_1m

    老帖子在这:
    https://www.v2ex.com/t/763906
    https://www.v2ex.com/t/794435


    鸟窝老师还有篇帖子对比 RPC 框架的,我的另一个仓库也在里面
    https://colobu.com/2021/08/01/benchmark-of-rpc-frameworks/

    百万连接也好、RPC 也好,有兴趣的同学,建议自己跑代码亲测对比,而不是只看别人仓库文档里的数据,因为一些朋友交流下来,自测结果跟一些公司出品项目自带文档里的排名数据对不上,这其中可能有环境差异的因素,也可能有一些其他因素,但请以自测为准。
    Deeymmm
    Deeymmm
    Nov 30, 2021
    55
    @FakNoCNName 0xffff 是端口上限吧,不是连接数上限
    Donahue
    Donahue
    Nov 30, 2021
    56
    @ysc3839 webdav 要求不高直接起个 docker 挂载一下就好了哈哈
    pengtdyd
    pengtdyd
    Nov 30, 2021
    57
    go 啥时候能干过 c 了,这帮人吹牛皮不打草稿。我大 Rust 都没这么狂过。
    akira
    akira
    Nov 30, 2021
    58
    生产环境链接数没上过千的表示 毫无压力,你们继续。。
    BBCCBB
    BBCCBB
    Nov 30, 2021
    59
    nginx 单机没有这么弱吧?

    很早 linkedin 基于 netty 就能做到单机 50w+ socket 连接了.
    eason1874
    eason1874
    Nov 30, 2021❤️2
    60
    Nginx 是通用 Web Server ,有一系列 Filter 要跑,在用不上这些 Filter 的专用场景比不上专用软件再正常不过了

    脱离业务需求去比较,没多大意义。再厉害的狙击枪在近战时也比不上一把菜刀

    看了 #30 发的链接,那篇文章里没有说 Nginx 性能怎么样,只说了他们的 Nginx 只用到一个小功能,不值得用。“Nginx 仅使用 TLS 解密,请求透传,产生了大量的资源浪费”
    nl101531
    nl101531
    Nov 30, 2021 via iPhone
    61
    梦回大跃进
    kkbblzq
    kkbblzq
    Dec 1, 2021
    62
    楼上的大部分回复,我知道为啥现在网上带节奏这么容易了。
    zachgenius
    zachgenius
    Dec 1, 2021
    63
    现在应该还是 NGINX/apache 是主流。性能不够加机器啊,搞一些魔改最后运维和 debug 成本远高于加机器。大多数普通”互联网“公司可能到最后倒闭了都未必能跑满 nginx 的最大并发量
    keenkiller
    keenkiller
    Dec 1, 2021
    64
    看了原文,决定先把楼主 block 了
    yl20181003
    yl20181003
    Dec 1, 2021 via Android
    65
    已经屏蔽楼主,纯带节奏
    suyuyu
    suyuyu
    Dec 1, 2021
    66
    营销号日常作妖
    hourui
    hourui
    Dec 1, 2021
    67
    但凡看过 nginx 源码的人,不会有这种疑问的。
    kerro1990
    kerro1990
    Dec 1, 2021
    68
    nginx 百万毫无压力,看下代码实现就知道了
    runze
    runze
    Dec 1, 2021
    69
    @ysc3839 很正常嘛
    随便找一个开源的 C/C++/Whatever 程序,性能大概率是不如 nginx 这种使用 C/C++,且开发了多年,使用广泛的程序好的
    heyjei
    heyjei
    Dec 1, 2021
    70
    @rrfeng 哈哈哈哈哈,必须的,前面必须还得一个 Nginx 来做负载均衡🐶
    icy37785
    icy37785
    Dec 1, 2021 via iPhone
    71
    楼主在这里带节奏,底下一堆不是喷 go 的就是喷公众号的,
    没看公众号原文就喷的我都能理解,
    有些喷起来像连楼主这个帖子都没看的,我确实理解不了。
    总不能是机器人吧。
    millken
    millken
    Dec 1, 2021
    72
    写得好的情况下,golang fasthttp server 的性能是可以超越 nginx 的,fasthttp 下可以实现 zero allocate 。
    SteveWoo
    SteveWoo
    Dec 1, 2021
    73
    推送服务用 c++、golang 分别写过接入层。8C/16G 单机压测 120w 长连接,生产稳定 100w 长连接(实际上只管连接 4C 也够了,但是业务加了些拆包的东东)。

    并发长连接数量得益于 linux 内核多路复用升级跟普通开发没啥关系,懂其原理很容易实现 C1000K 。

    对于网关产品还要考虑稳定性、热更、平滑升级、上面有同学提到 QPS:“并发连接数这种为测试而测试的数据没太多实际意义,高并发下的 QPS 更有参考价值”

    “单机负载也就是 3w-5w 连接” 这个说法是把 nginx 当做 1:1 的透传代理来用,因为后向转发本地要占用一个端口,单网卡,ip 范围最多就 65535 ,这里本机多配置些 IP 就可以了。
    SteveWoo
    SteveWoo
    Dec 1, 2021
    74
    结论:nginx 很牛,没有落后时代;那些人也没有吹水;楼主要提升认知。
    saberlong
    saberlong
    Dec 1, 2021 via Android
    75
    golang 之前确实有篇单机 100 万连接实践。本质上是讲 golang 在 100 万连接下怎么优化的。比较采用常规的一个链连接 2 个 go 程方案与通过 syscall
    直接使用 epoll 方案之间的内存占用和延迟差别等。和 100 万并发不是同个概念。文章里实现单机 100 万连接的一些设置以及测试方式还是可以借鉴的。其它语言也能做到
    abcbuzhiming
    abcbuzhiming
    OP
    Dec 2, 2021
    76
    @hmli
    你自己看原文不仔细,原文和内容我贴出来

    https://mp.weixin.qq.com/s/jl14D6XYJ5PeR3rmYAPdpQ

    4.1 压测准备
    选择一台配置为 4 核 8G 的虚拟机,作为服务机,目标承载 48w 连接;
    选择八台配置为 4 核 8G 的虚拟机,作为客户机,每台客户机开放 6w 个端口。

    ======

    @sujin190
    我都说了好多遍了,是 Nginx 做反向代理时的连接数,连文章的出处我都给了


    ======
    @tairan2006 赶紧屏,永不相见。
    @yl20181003 你这种数字 id 跑来说别人带节奏?

    @icy37785 你们这帮数字 id 连一个首贴没有说别人带节奏?我没说清楚文章来源,数据来源是怎么的?
    icy37785
    icy37785
    Dec 3, 2021 via iPhone
    77
    @abcbuzhiming #74 原来不是带节奏,是单纯的不具备中文理解能力呀,那没事了,ban 了,再见。
    opengps
    opengps
    Dec 12, 2021 via Android
    78
    用 ng 转发会受到系统可用端口数量制约,直接写个服务只需要一个端口,就承受外边连进来的链接
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1657 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 136ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    ♥ Do have faith in what you're doing.