Golang Go语言中一秒能完成多少次http探测
Golang Go语言中一秒能完成多少次http探测
用 python 写了个,一秒几百而一。
最近有个任务,要一秒探测上万网址的 http 状态。这里只获取状态码,暂时没检测内容。
如果用 golang 一秒能完成多少次 http 探测?如果设置 10 秒超时。这样是不是最大的问题在于阻塞?如果很多 url 都超时了,这样就有 n 个 10 秒被阻塞。有没有什么好办法能高效探测成千上网 url.
如果排除超时阻塞一秒能完成多少次探测?
cpu 打算配置个双 E5,宽带 1gbps.
golang 协程做这个玩意 好像正好合适, 没毛病
状态即可
更多关于Golang Go语言中一秒能完成多少次http探测的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我看阿里云监控探测是用 go 写的
python 异步吗?
取决于你能开多少个 tcp 链接。
用纯异步执行模式
go routine,利用 channel,按 cpu 核数开几个队列异步消费,只检查 headline 不访问 body。
剩下的,就取决于你的网卡和 cpu 瓶颈了。
想高并发,首先一点是去阻塞
身边有 go 的简单代理服务,8core 的生产机器, 单机 1 万 qps,只检查头部应该更高。
Python httpx 库
https://github.com/encode/httpx
python 真能在这个场景中发挥长处吗? 好像 python 多线程是伪的吧。。压榨 cpu python 好像不行。
tcp 连接网络几万肯定没问题。这是要开 1 万个协程吗
多线程不是伪的……
考虑到客户端每个 tcp 连接要占用一个端口,所以单机同时最大应该在几 W 左右,当然前提是带宽够用,go 启几万个协程还是没什么压力的
不过单机下用 docker 多跑几个容器,可以突破端口使用量的限制
试一下就知道了,
这个是异步 request 库,
应该也是用到协程的,
能帮你压榨 CPU 和带宽、磁盘先到极限的
考虑这个问题更多因素在于网络延迟,程序只要做好并发控制就可以了
fastapi 这 python 库,
因为用了不同的异步模型,
性能比 flask 原来提升了一个数量级。
https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7
很好奇你要做什么,难道要和我的想法一样吗?
goroutine 并发去请求你说的那些网址就行了 至于能开多少 限制的应该不是语言这边 限制的应该是 tcp 连接你的机器一次能建立多少
如果只完成你说的任务 一秒探测网址的 status 最简单的 开你说的网址个 goroutine select 限制一秒时间 能返回正常值得说明就是符合的网址 超时的就是有问题的。。。
端口数是 per ip 的,多开 docker 能增加出口 IP 吗?
就没有一个人哪怕是提一下 gevent ?
每个容器都会有一个虚拟 ip 的呀,我之前看一个 C1000K 测试就是用 docker 来做的
blackbox_exporter 了解一下。。。现成的东西。。[]( https://github.com/prometheus/blackbox_exporter)
golang 本身 client 可以限制超时时间 那就不用 timer 了
不管你 nat 之后有几个虚拟 IP,对方服务器看到的 IP 只有出口 IP 这一个
服务器对出口 IP 又没有限制,只要 fd 够用就行了
劝你别这么做,qps 太高分分钟被运营商屏蔽,第二天就上新闻:xxx 涉嫌对 xxx xxx 台服务器进行大规模攻击,已被拘留。 /狗头🐶
那是 tcpip 四元组的限制,跟服务器没有关系
你的公网地址只有一个,无论你怎么开 docker,也变不出两个地址来
懂了😅,又看了那个 C1000K 测试也是本地一台机器做的,所以可以适用
端口问题可以用分配多个 ip 地址来解决
10K CC,不是买的发包机不封才怪
还有 https://github.com/yanc0/beeping 这个我也看了,这两个如果任务量不大还行,任务量大了 call 自己的接口又浪费就个数量级的性能吧
自己的服务器,不是构建 cc 攻击器哦。
哈哈哈哈老哥我也想问
从你们头像分析应该相差不大
正好前些天用 Go 写了你这个需求,正好可以体现 goroutine 的优势,你可以看下: https://github.com/xvrzhao/site-monitor
哦 对了 我是单个 url,没有使用 channel,你可以用 channel 做 url 队列供给下面的 goroutine task 消费。
在Go语言中,HTTP探测(即HTTP请求)的性能受到多种因素的影响,包括但不限于网络延迟、服务器响应时间、客户端和服务器的硬件配置、Go程序的并发处理能力以及所使用的HTTP库和配置等。
理论上,Go语言以其高效的并发处理能力和强大的网络编程支持,能够处理非常高的HTTP请求吞吐量。然而,具体到一秒内能完成多少次HTTP探测,这是一个非常依赖于实际环境和条件的数值。
在理想情况下(即网络延迟极低、服务器响应迅速、硬件资源充足等),Go程序可以通过goroutine和channel等并发原语,高效地发起并处理大量的HTTP请求。使用Go的标准库net/http
,配合合理的并发控制和资源分配,通常可以达到每秒数千到数万次的HTTP探测。
然而,在实际应用中,由于上述各种因素的影响,实际性能往往远低于理论最大值。因此,要准确评估Go语言HTTP探测的性能,建议进行实际的性能测试,通过模拟真实场景下的HTTP请求,并监控和分析请求的处理时间、成功率、资源消耗等指标。
总的来说,Go语言具备处理高并发HTTP请求的能力,但具体性能还需根据实际应用场景和需求进行评估和优化。在设计和实现HTTP探测功能时,应充分考虑并发控制、错误处理、资源分配等方面的问题,以确保系统的稳定性和可靠性。