golang 一秒能完成多少次 http 探测

2020-01-03 11:31:32 +08:00
 holinhot
用 python 写了个,一秒几百而一。
最近有个任务,要一秒探测上万网址的 http 状态。这里只获取状态码,暂时没检测内容。

如果用 golang 一秒能完成多少次 http 探测?如果设置 10 秒超时。这样是不是最大的问题在于阻塞?如果很多 url 都超时了,这样就有 n 个 10 秒被阻塞。有没有什么好办法能高效探测成千上网 url.
如果排除超时阻塞一秒能完成多少次探测?

cpu 打算配置个双 E5,宽带 1gbps.
6642 次点击
所在节点    Go 编程语言
37 条回复
shoaly
2020-01-03 11:57:12 +08:00
golang 协程做这个玩意 好像正好合适, 没毛病
状态即可
holinhot
2020-01-03 12:08:55 +08:00
@shoaly 我看阿里云监控探测是用 go 写的
watsy0007
2020-01-03 12:32:05 +08:00
python 异步吗?
hitsmaxft
2020-01-03 13:30:45 +08:00
取决于你能开多少个 tcp 链接。
用纯异步执行模式
go routine,利用 channel,按 cpu 核数开几个队列异步消费,只检查 headline 不访问 body。
剩下的,就取决于你的网卡和 cpu 瓶颈了。
想高并发,首先一点是去阻塞
hitsmaxft
2020-01-03 13:32:47 +08:00
身边有 go 的简单代理服务,8core 的生产机器, 单机 1 万 qps,只检查头部应该更高。
encro
2020-01-03 14:00:15 +08:00
holinhot
2020-01-03 16:21:58 +08:00
@encro python 真能在这个场景中发挥长处吗? 好像 python 多线程是伪的吧。。压榨 cpu python 好像不行。
holinhot
2020-01-03 16:24:55 +08:00
@hitsmaxft tcp 连接网络几万肯定没问题。这是要开 1 万个协程吗
so1n
2020-01-03 16:28:45 +08:00
@holinhot 多线程不是伪的……
monkeyWie
2020-01-03 16:32:28 +08:00
考虑到客户端每个 tcp 连接要占用一个端口,所以单机同时最大应该在几 W 左右,当然前提是带宽够用,go 启几万个协程还是没什么压力的
monkeyWie
2020-01-03 16:36:56 +08:00
不过单机下用 docker 多跑几个容器,可以突破端口使用量的限制
encro
2020-01-03 16:45:43 +08:00
@holinhot
试一下就知道了,
这个是异步 request 库,
应该也是用到协程的,
能帮你压榨 CPU 和带宽、磁盘先到极限的
opengps
2020-01-03 16:49:05 +08:00
考虑这个问题更多因素在于网络延迟,程序只要做好并发控制就可以了
encro
2020-01-03 16:49:23 +08:00
fastapi 这 python 库,
因为用了不同的异步模型,
性能比 flask 原来提升了一个数量级。
https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7
veike
2020-01-03 16:55:25 +08:00
很好奇你要做什么,难道要和我的想法一样吗?
tourist2018
2020-01-03 16:57:09 +08:00
goroutine 并发去请求你说的那些网址就行了 至于能开多少 限制的应该不是语言这边 限制的应该是 tcp 连接你的机器一次能建立多少

如果只完成你说的任务 一秒探测网址的 status 最简单的 开你说的网址个 goroutine select 限制一秒时间 能返回正常值得说明就是符合的网址 超时的就是有问题的。。。
sagaxu
2020-01-03 17:02:00 +08:00
@monkeyWie 端口数是 per ip 的,多开 docker 能增加出口 IP 吗?
est
2020-01-03 17:05:18 +08:00
就没有一个人哪怕是提一下 gevent ?
monkeyWie
2020-01-03 17:14:34 +08:00
@sagaxu 每个容器都会有一个虚拟 ip 的呀,我之前看一个 C1000K 测试就是用 docker 来做的
phantomzz
2020-01-03 17:21:55 +08:00
blackbox_exporter 了解一下。。。现成的东西。。[]( https://github.com/prometheus/blackbox_exporter)

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

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

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

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

© 2021 V2EX