V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
abcbuzhiming
V2EX  ›  问与答

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

  •  
  •   abcbuzhiming · 47 天前 · 10227 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚看到一篇公众号,石墨文档说他们改造自己 websocket 网关,看了一眼是用 go 实现的,里面的有个数据很吓人,4 核心 8GB ,单机 48w 连接。

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

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

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

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

    现实:回复“资料”下载资料,百度云下载速度:8k/s ,打开资料来源 csdn+某某培训班。
    yanbo92
        6
    yanbo92  
       47 天前 via iPhone
    根据我的认知,这还是 nginx 的时代
    dolphintwo
        7
    dolphintwo  
       47 天前
    都是百万连接啊,谁也别笑谁,( Nginx 真好用
    Jooooooooo
        8
    Jooooooooo  
       47 天前   ❤️ 4
    没做过真正的业务喜欢吹这种数字
    xiao109
        9
    xiao109  
       47 天前
    你连上数据库啥也不干只查看一下数据库版本你也可以
    libook
        10
    libook  
       47 天前   ❤️ 6
    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
        11
    plko345  
       47 天前 via Android   ❤️ 2
    lvs > nginx >= haproxy > go 写的
    abcbuzhiming
        12
    abcbuzhiming  
    OP
       47 天前
    @wellsc nginx 做反代的时候单机一般就 3w 连接左右,5w 开始就不是很稳定,注意我说的是单机,数据来源来自极客时间的从零开始学架构课程,常见系统性能量级。另外我自己实际测试也差不多这个量级

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


    @libook Nginx 在做反代的时候大约就 3w-5w 的连接
    FakNoCNName
        13
    FakNoCNName  
       47 天前
    @abcbuzhiming 反向代理需要和真正的后端建立一次连接,一个主机连接服务时能建立的 socket 是有限的( 0xFFFF ),所以他们 100W 的单机连接是怎么来的?
    wslzy007
        14
    wslzy007  
       47 天前
    并发连接数这种为测试而测试的数据没太多实际意义,高并发下的 QPS 更有参考价值,另外同比资源占用也是个重要指标,否则一笑而过吧~
    starcraft
        15
    starcraft  
       47 天前 via Android
    这种 go 写出来的给 ngx 提鞋都不配。
    ly841000
        16
    ly841000  
       47 天前
    @abcbuzhiming 不稳定是因为系统,不是因为 Nginx ,想要更高连接需要对内核进行大量调节
    nash
        17
    nash  
       47 天前
    少看点公众号文章,多读点书
    rrfeng
        18
    rrfeng  
       47 天前   ❤️ 8
    你信不信它这个网关前面可能还挂了一层 nginx ……
    ila
        19
    ila  
       47 天前 via Android
    公众号看标题就能排雷
    dddd1919
        20
    dddd1919  
       47 天前
    吓死了,买个课程压压惊
    Illusionary
        21
    Illusionary  
       47 天前   ❤️ 3
    是的,我是在抖音看的
    ysc3839
        22
    ysc3839  
       47 天前 via Android
    我之前在服务器上搭建 WebDAV ,因为嫌 nginx 配置文件太复杂,就用了个 Golang 写的 WebDAV server ,nginx 反向代理它。
    结果仅仅用 16 个线程下载,就会出现前面几个连接有速度,后面直接连不上了,ssh 上去看发现 WebDAV server 的进程跑满了 CPU ,此时停止下载还是一直跑满,完全连不上。
    最后换成了 nginx ,32 线程轻轻松松。
    binux
        23
    binux  
       47 天前 via Android
    @ysc3839 这个 golang 也没关系啊
    ysc3839
        24
    ysc3839  
       47 天前 via Android
    @binux 当然有可能是那个 WebDAV server 自己实现有问题。
    但是用户感觉上就是,随便找一个开源的 Golang 程序,性能大概率是不如 nginx 这种使用 C/C++,且开发了多年,使用广泛的程序好的。
    shyangs
        25
    shyangs  
       47 天前
    一個主機連接服務時能建立的 socket 是有限的,他們 100W 的單機連接是怎麼來的?
    gesse
        26
    gesse  
       47 天前
    盲猜 caddy 改?
    mgcnrx11
        27
    mgcnrx11  
       47 天前 via iPhone
    多网卡、虚拟网卡、弄大一些 fd 也可以冲到 100w
    mgcnrx11
        28
    mgcnrx11  
       47 天前 via iPhone
    @mgcnrx11 是回复这位 @shyangs
    jasonkayzk
        29
    jasonkayzk  
       47 天前
    @supuwoerc #5 笑死我了,哈哈
    bruce0hh
        30
    bruce0hh  
       47 天前 via Android
    https://mp.weixin.qq.com/s/JLKbE-fsrjQNiMZH5mIX3g
    贴个 OSC 开源社区公众号的链接,本文由石墨文档技术杜旻翔分享
    0312birdzhang
        31
    0312birdzhang  
       47 天前
    看标题被吓到了,点进来放心了
    bipy
        32
    bipy  
       47 天前
    针对性优化跟通用方案没什么可比的吧
    iyaozhen
        33
    iyaozhen  
       47 天前
    nginx 没那么若,字节整个网关都是 nginx 集群搭的。当然 go 有 go 的好处,很多细节可控(性能不是重点),可以二次编程 百度的网关 BFE 就是 Go 写的,你可以看看。https://github.com/baidu/bfe-book
    MEX
        34
    MEX  
       47 天前
    文章没说是单机 100w 连接额....单机不带业务场景也测最多也就 50w 连接,而且还是不带业务逻辑的情况下。
    不使用 NGINX 的原因并不是性能差异问题,NGINX 的性能是很优秀的,不使用的原因单纯从成本角度考虑,使用四层负载加上 GO 挂载 TLS 证书,比七层负载的成本更低。
    yanzhiling2001
        35
    yanzhiling2001  
       47 天前
    人有多大胆,Nginx 有多大产
    ytmsdy
        36
    ytmsdy  
       47 天前
    呵呵,就算用 IIS 跑,咱们普通人的并发量也到达不了 IIS 的瓶颈!
    cache
        37
    cache  
       47 天前
    @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
        38
    xz410236056  
       47 天前
    @supuwoerc #5 百度云现在下载无会员也有几 M 了
    salmon5
        39
    salmon5  
       47 天前
    C1000K 不是古代的技术吗?
    keppelfei
        40
    keppelfei  
       47 天前
    @supuwoerc 笑尿了
    Lyv5
        41
    Lyv5  
       47 天前
    @supuwoerc 一气呵成 哈哈哈哈哈
    vanton
        42
    vanton  
       47 天前
    nginx 百万级没问题。
    go 要想超过 nginx ,可能性不大,基本可以认为是胡扯。
    lzs5240
        43
    lzs5240  
       47 天前
    OpenResty Tengine 不都是 nginx
    leavic
        44
    leavic  
       47 天前
    哪天 C 语言培训或者教程书籍之类的火了,nginx 就性能碾压全世界了
    kilala2020
        45
    kilala2020  
       47 天前
    吹 go 并发都已经这么卷了么?汇编>C>=C++>java>Go ,大概是这样?
    Xusually
        46
    Xusually  
       47 天前   ❤️ 1
    推 go 就算了,踩 nginx 是几个意思?
    hmli
        47
    hmli  
       47 天前   ❤️ 17
    不是,你们**有些人**真就一点原文不看,看了个标题就开始闭着眼写命题作文呗?
    我翻遍全文也没找到哪里有提到说 4c8g 单机 48w 连接, 下面作者的实测里倒是有一个 16c32g 单机 1~1.8W 连接的数据。
    我也没看到作者哪里有提到说"nginx"不行,得换 golang 才厉害的论点,只看到在他的”网关 2.0“里因为业务需求把 nginx 网关换成了自研。
    还是说你们都是评论 bot 吗? 看到“公众号” "Golang" "并发”, 就触发你们的关键词了?
    sujin190
        48
    sujin190  
       47 天前
    看到“nginx 的单机负载也就是 3w-5w 连接”才是被惊了,你不是用的假 nginx 吧
    newmlp
        49
    newmlp  
       47 天前
    通用和定制的问题,你要上 dpdk 单机百万也不是不可以
    miniliuke
        50
    miniliuke  
       47 天前
    nginx 不是号称 1000w 连接,100w 的 qps 吗......
    adoal
        51
    adoal  
       47 天前
    benchmarking 这种事,笑笑就好
    oncethink
        52
    oncethink  
       47 天前
    兄弟们,以后还是要注意来源请求,看了原文再评论
    wanguorui123
        53
    wanguorui123  
       47 天前
    数据库磁盘 IO 才是瓶颈
    lesismal
        54
    lesismal  
       47 天前   ❤️ 2
    连接数不等于 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
        55
    Deeymmm  
       47 天前
    @FakNoCNName 0xffff 是端口上限吧,不是连接数上限
    Donahue
        56
    Donahue  
       47 天前
    @ysc3839 webdav 要求不高直接起个 docker 挂载一下就好了哈哈
    pengtdyd
        57
    pengtdyd  
       47 天前
    go 啥时候能干过 c 了,这帮人吹牛皮不打草稿。我大 Rust 都没这么狂过。
    akira
        58
    akira  
       47 天前
    生产环境链接数没上过千的表示 毫无压力,你们继续。。
    BBCCBB
        59
    BBCCBB  
       47 天前
    nginx 单机没有这么弱吧?

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

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

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

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

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

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

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

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

    ======

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


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

    @icy37785 你们这帮数字 id 连一个首贴没有说别人带节奏?我没说清楚文章来源,数据来源是怎么的?
    icy37785
        77
    icy37785  
       45 天前 via iPhone
    @abcbuzhiming #74 原来不是带节奏,是单纯的不具备中文理解能力呀,那没事了,ban 了,再见。
    opengps
        78
    opengps  
       35 天前 via Android
    用 ng 转发会受到系统可用端口数量制约,直接写个服务只需要一个端口,就承受外边连进来的链接
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   919 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:51 · PVG 05:51 · LAX 13:51 · JFK 16:51
    ♥ Do have faith in what you're doing.