V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 25 页 / 共 56 页
回复总数  1112
1 ... 21  22  23  24  25  26  27  28  29  30 ... 56  
2023-02-26 19:52:48 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz
对,得多弄点不同变量参数对比,鸟窝老师 rpc 的测试里不同参数对比就相对全面一些

tls 直接标准库 copy 一份魔改的,难度倒是不大,主要是琐碎,debug 、覆盖比较烦躁
2023-02-26 17:49:51 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz #46
不同的参数下,跑出来的数据是不一样的。 -r 500 这种,在正常的服务里限流机制直接就把它 close 了的。
不同连接数、包体、 -r 取正常值范围的情况下,你可以试一下看看各个框架带宽和消耗能跑到多少,我环境下得到的数据并不是哪个固定第一,cpu 占用有差别,有的 cpu 高一些但是同样获得了更高的吞吐,有的 cpu 利用率上不去、跑多轮也还是低消耗低带宽比较奇怪。框架数量太多参数太多,跑几轮下来我眼睛都花了

不能只以一种参数来确定性能
2023-02-26 15:37:21 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz
我能想到的高频发包的场景,比如 RPC ,但是 RPC 通常内网,TCP 更具优势(所以我非常抵制 GRPC ),而且 RPC 服务承载的 client 连接数并不会特别大,所以基于标准库同步方案、同步解析就 ok 了,我的 arpc 也是这样。但是 arpc 也支持 web 前端 client 直接通过 http/websocket 交互,这时候虽然可能连接数量也很大,但是这种用户并不是服务之间的 RPC 调用、所以也不会有服务之间 RPC 那种单个连接高频发包的场景、真有攻击的话它自己这个连接慢了也活该。。。

我暂时没看懂 tcpkali 有没有办法进行类似 echo 测试这种,发-收-发-收,这样即使连接数不是特别大也可以把 server 性能跑满、更符合实际场景一些,而不是像上面那样通过-r 超过正常需求范围的情况下打满
2023-02-26 15:28:13 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
> 用普罗米修斯监控确实影响了测试 RPS, 同样的命令, 去掉监控后跑到了 8000Mbps, 加上监控只有 4400Mbps.

@Nazz
对,额外的重量级工具本身带来的消耗影响大,而且他们的消耗也不是平均持续稳定的、没法保障对不同框架测试时段的环境公平性,所以大家做压测通常不使用这些
2023-02-26 15:26:12 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz #42
我刚跑了下 tcpkali ,按照你的参数确实 gws 更快,但是我本地得到的数据差异没那么大。
netstat 查了下,tcp 收发缓冲区待读写的 size 较大、远超过单个包 size ,加上 tcpkali 的-r 参数你设置的 500 (每秒向每个连接发送 500 个包),这说明 tcpkali 压测方式是不管对方是否回包,都会按照-r 这个频率往对方发包。

nbio 的解析器是异步流解析器,在-r 500 这种测试情况下,相比于 gws 的同步读同步解析,nbio 要处理更多的包边界、半包缓存之类的,所以会不划算。但实际场景中单个连接 client 向 server 每秒 500 个包是不太可能的、fps 类也远低于此。server 端推送也不会有这么高的频率。如果是有人来攻击 server 、这个连接响应慢了也不怕。

1000 连接这种,如果把-r 调整到正常交互频率,性能就都差不多了。

我又尝试把-r 20 、连接数提高到 2w ,nbio 的数据会更好些:
tcpkali -c 20000 --connect-rate 5000 -r 20 -T 30s -f ./1K.txt --ws 127.0.0.1:28001/ws
2w 连接 gws 遇到过一次不知道是不是触发了 bug ,2w 在线、协程数却达到了 3w+,tcpkali 30 秒竟然也没返回,不知道是不是 tcpkali 测试 bug 导致不断有新连接才导致 gws 协程 3w+,忘记了保存现场、后面多跑了几轮没再遇到,所以暂时没法分析这个了

更大连接数用 tcpkali 不太好测了,多个节点一是卡、二是建立连接的时段不一样,有的节点建立连接后就开始猛发数据把 server 打满了,新节点再进入就困难了。但一些海量连接的业务的话可能是连接数多但频率没这么高所以新连接进来速度也还好。
这也是为什么我之前没用第三方的工具进行百万链接的测试、而是自己写 client 来测试的原因:
https://github.com/lesismal/nbio-examples/blob/master/websocket_1m/client/client.go

tinyws 在-r 500 的情况下跟 nbio 差不多可能略慢,我没看 tinyws 的代码、暂时没有分析慢的原因
2023-02-26 13:30:04 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz 运维用这种监控集群健康挺好,做 benchmark ,尽量保持测试环境稳定、少部署额外软件好些
2023-02-26 13:27:58 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz go 做简单 curd 确实不难,但是这种遍地并发对绝大多数人来说都挺难的,chan 适合解耦、串行化,能避免并发不熟的人一不小心就死锁了,但是性能肯定差一些
2023-02-26 13:26:29 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz
> 刚测了一下 1000 连接, nbio IOModBlocking 跑了 2600Mbps, gws:dev 同步读异步写是 5800Mbps, nbio 兼容多种 IO 模式是有开销的吧

代码发我下我试试看。多种 io Upgrade 后就没什么大影响了
2023-02-26 05:17:50 +08:00
回复了 Nazz 创建的主题 程序员 go websocket rps, cpu, latency 全面测评
@Trim21
有这种可能,但也得是反代跟 ws 服务内网或者至少同区、网络稳定才行,否则跨了公网就可能更高概率卡一下。

另一方面,既然它的目标也是解决海量并发问题,而且 ws 的协议功能没那么琐碎,自家反代加的这层节点成本也不低,还不如直接云 CDN 直接回源 ws 服务划算。
还有就是,gobwas 只能做到低消耗,相比其他 ws 框架,它性能几乎是最差的,我估计他们的业务本身可能就比较低频,所以即使用了问题也不大。

但按照你说的 medium 的博文搜了下,看到这句:
"Mail polling involves about 50,000 HTTP queries per second, 60% of which return the 304 status, meaning there are no changes in the mailbox."
原来 http 轮询的方式是 5w/s ,改为 ws 主动推新,加上一点心跳,频率要低得多,如果只是这个数量级,其实总量没多大,即使不用 poller 方案、多部署几个节点也随便搞定了

实际情况如何就不清楚了,但通用框架依赖这些特定因素才能稳定总不是好事情,哪天整个环境某个链条改变一下,服务就不稳了

我之前并不知道 gobwas/ws 这个库,还是之前一个人来我 repo issue 推荐我看,去扫了几眼就觉得不对,代码验证一下就确认问题了:
https://github.com/lesismal/arpc/issues/2#issuecomment-746694287
https://github.com/lesismal/arpc/issues/2#issuecomment-747258191
后来 nbio 里搞了更多,百万连接也没 gobwas/ws 这问题,终于可以省心了
2023-02-26 01:51:39 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz 我之前的简单压测是几个字节的 payload ,刚才又试了下 1k 字节 payload ,我环境得到的数据:
1k-1w 范围连接数时,tinyws 和 gws qps 差不多,nbio 略快,内存占用 gws > tinyws > nbio ,但内存差距不算特别大
10w 连接时,nbio 快更多一些,内存占用 gws 约 4.17G ,tinyws 约 3.73G, nbio 约 1.2G ,内存占用差距比较明显,而且 gws 和 tinyws 的 qps 不稳定、qps 摆动幅度较大,应该是连接数太多 gc 时 stw 更明显导致,nbio 的 qps 比较稳定
相同连接数压测的 cpu 消耗差不多,nbio 好像略低
2023-02-26 00:40:30 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz #27
这有点杀鸡用牛刀了,而且还是要统计 qps/tps 结合进程自己的消耗,压测里自带这些工具就可以的,比如字节这种:
github.com/cloudwego/kitex-benchmark

但是字节这个 perf 不跨平台,我自己用 gopsutil 简单封装了些:github.com/lesismal/perf
2023-02-26 00:36:42 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@guonaihong 我是超级不喜欢 grpc ,哈哈哈,用我自己的 arpc 一把梭才是爽。。。
2023-02-25 23:52:53 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz 是啊,多个框架跑一轮还得统计很麻烦,而且可以测试得内容太多了,tls non-tls http ws rpc 各种,所以一些项我也只跑了简单测试
2023-02-25 23:34:38 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@guonaihong 好像很久没出现了,是在忙着搬砖嘛 :joy:
2023-02-25 23:27:40 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
nbio 的 websocket 解析器,是支持异步流数据解析的、同步 io 的数据丢进去也一样解析,所以本身是有点吃亏的、逻辑比同步解析复杂得多,而且涉及半包 cache 之类的,否则只是同步解析,还能实现得更快。同步和异步 io 都能处理,所以结合自身的 IOModMixed ,能把性能和硬件消耗做到最佳,不同在线量全 cover ,其他框架高在线量太吃硬件资源了
2023-02-25 23:23:32 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz #9 gws 不是一骑绝尘的。。。你看我 #19 ,你把 tinyws 和 nbio 的 IOModBlocking 和 IOModMixed 也跑来对比下试试。。
2023-02-25 23:19:53 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@dw2693734d
哈哈哈,没参与日常维护,就之前偶尔读了下 melody 源码,发现那有个并发的问题会低概率导致 panic ,肉眼看出来,写测试一模拟果然就复现了,然后 pr 了下,那时候正好是疫情严重时期,作者消失很久了,我都担心他会不会感染了严重了之类的,还好后来他又出现了,并且 merge 了我的 pr

一些知名库的作者对并发这块的实现其实也不够好,一是被 go 官方和很多人鼓吹要用 chan 、少用锁,二是 go 这种多并发流确实复杂、肉眼难看出问题、测试压测也很难测出问题、甚至没办法模拟复现只能靠肉眼和想象力。。。

最近一个比较火的 conc 库也扫了几眼,接口设计非常优雅美丽,但是代码的实现也是受到太多尽量用 chan 少用锁这种观点的影响,所以它的实现是性能差一些的,不过这点性能损失对通常的项目也没什么影响、也还好
2023-02-25 23:10:17 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@Nazz
我这简单测了多个,tinyws ,nbio ,gws ,都高于 gorilla 的,三者数据差不多,连接数不是特别大的时候,我环境下 tinyws 略快一点点,nbio 、gws 差不多,nbio 的内存占用最少,连接数越大,nbio 会越均衡。没有做大量测试,比如不同 body size ,综合情况没做统计:
https://github.com/lesismal/nbio-examples/tree/master/websocket_1m
2023-02-25 22:30:57 +08:00
回复了 Nazz 创建的主题 程序员 go websocket rps, cpu, latency 全面测评
@Trim21
不知道他有没有把 gobwas/ws 用于他们大业务量的项目。
但 gobwas/ws 的实际问题是存在的,所以跟它用到哪里了不是直接关系,有问题就是有问题,只是可能问题影响范围他们可以接受,但并不代表别人的业务也能接受,尤其是被别人盯上随便来攻击一下的时候,影响要更大得多。
而且你看他的 issue 列表里也确实是别人提出了生产环境遇到了问题,我在那里讨论,他都是想着 timeout 之类的方式去解决,但那并不能解决问题。所以我才说它需要“三靠”才能稳定。。。但总不能大家项目都“三靠”保平安吧。。。
2023-02-25 17:46:24 +08:00
回复了 dw2693734d 创建的主题 Go 编程语言 golang 的哪个 websocket 好用?
@0o0O0o0O0o
哈哈哈,感谢关注支持!
刚看到 melody 里有人提到因为 gorilla 不维护了、要不要切换到基于 nbio 或者其他基于框架,我也去凑热闹回复了下
https://github.com/olahol/melody/issues/73
1 ... 21  22  23  24  25  26  27  28  29  30 ... 56  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2484 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 09:24 · PVG 17:24 · LAX 02:24 · JFK 05:24
Developed with CodeLauncher
♥ Do have faith in what you're doing.