跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang 一秒能完成多少次 http 探测
未分類
24 5 月 2020

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

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

資深大佬 : holinhot 56

用 python 写了个,一秒几百而一。
最近有个任务,要一秒探测上万网址的 http 状态。这里只获取状态码,暂时没检测内容。

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

cpu 打算配置个双 E5,宽带 1gbps.

大佬有話說 (37)

  • 資深大佬 : shoaly

    golang 协程做这个玩意 好像正好合适, 没毛病
    状态即可

  • 主 資深大佬 : holinhot

    @shoaly 我看阿里云监控探测是用 go 写的

  • 資深大佬 : watsy0007

    python 异步吗?

  • 資深大佬 : hitsmaxft

    取决于你能开多少个 tcp 链接。
    用纯异步执行模式
    go routine,利用 channel,按 cpu 核数开几个队列异步消费,只检查 headline 不访问 body。
    剩下的,就取决于你的网卡和 cpu 瓶颈了。
    想高并发,首先一点是去阻塞

  • 資深大佬 : hitsmaxft

    身边有 go 的简单代理服务,8core 的生产机器, 单机 1 万 qps,只检查头部应该更高。

  • 資深大佬 : encro

    Python httpx 库
    https://github.com/encode/httpx

  • 主 資深大佬 : holinhot

    @encro python 真能在这个场景中发挥长处吗? 好像 python 多线程是伪的吧。。压榨 cpu python 好像不行。

  • 主 資深大佬 : holinhot

    @hitsmaxft tcp 连接网络几万肯定没问题。这是要开 1 万个协程吗

  • 資深大佬 : so1n

    @holinhot 多线程不是伪的……

  • 資深大佬 : monkeyWie

    考虑到客户端每个 tcp 连接要占用一个端口,所以单机同时最大应该在几 W 左右,当然前提是带宽够用,go 启几万个协程还是没什么压力的

  • 資深大佬 : monkeyWie

    不过单机下用 docker 多跑几个容器,可以突破端口使用量的限制

  • 資深大佬 : encro

    @holinhot
    试一下就知道了,
    这个是异步 request 库,
    应该也是用到协程的,
    能帮你压榨 CPU 和带宽、磁盘先到极限的

  • 資深大佬 : opengps

    考虑这个问题更多因素在于网络延迟,程序只要做好并发控制就可以了

  • 資深大佬 : encro

    fastapi 这 python 库,
    因为用了不同的异步模型,
    性能比 flask 原来提升了一个数量级。
    https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7

  • 資深大佬 : veike

    很好奇你要做什么,难道要和我的想法一样吗?

  • 資深大佬 : tourist2018

    goroutine 并发去请求你说的那些网址就行了 至于能开多少 限制的应该不是语言这边 限制的应该是 tcp 连接你的机器一次能建立多少

    如果只完成你说的任务 一秒探测网址的 status 最简单的 开你说的网址个 goroutine select 限制一秒时间 能返回正常值得说明就是符合的网址 超时的就是有问题的。。。

  • 資深大佬 : sagaxu

    @monkeyWie 端口数是 per ip 的,多开 docker 能增加出口 IP 吗?

  • 資深大佬 : est

    就没有一个人哪怕是提一下 gevent ?

  • 資深大佬 : monkeyWie

    @sagaxu 每个容器都会有一个虚拟 ip 的呀,我之前看一个 C1000K 测试就是用 docker 来做的

  • 資深大佬 : phantomzz

    blackbox_exporter 了解一下。。。现成的东西。。[]( https://github.com/prometheus/blackbox_exporter)

  • 資深大佬 : tourist2018

    @tourist2018 golang 本身 client 可以限制超时时间 那就不用 timer 了

  • 資深大佬 : sagaxu

    @monkeyWie 不管你 nat 之后有几个虚拟 IP,对方服务器看到的 IP 只有出口 IP 这一个

  • 資深大佬 : monkeyWie

    @sagaxu 服务器对出口 IP 又没有限制,只要 fd 够用就行了

  • 資深大佬 : superrichman

    劝你别这么做,qps 太高分分钟被运营商屏蔽,第二天就上新闻:xxx 涉嫌对 xxx xxx 台服务器进行大规模攻击,已被拘留。 /狗头

  • 資深大佬 : sagaxu

    @monkeyWie 那是 tcpip 四元组的限制,跟服务器没有关系

  • 資深大佬 : sagaxu

    @monkeyWie 你的公网地址只有一个,无论你怎么开 docker,也变不出两个地址来

  • 資深大佬 : monkeyWie

    @sagaxu 懂了

  • 主 資深大佬 : holinhot

    @monkeyWie 端口问题可以用分配多个 ip 地址来解决

  • 資深大佬 : liuxu

    @superrichman 10K CC,不是买的发包机不封才怪

  • 主 資深大佬 : holinhot

    @phantomzz 还有 https://github.com/yanc0/beeping 这个我也看了,这两个如果任务量不大还行,任务量大了 call 自己的接口又浪费就个数量级的性能吧

  • 主 資深大佬 : holinhot

    @superrichman 自己的服务器,不是构建 cc 攻击器哦。

  • 資深大佬 : 0x1d12er

    @monkeyWie 我刚刚看了下 Docker 的文档好像每个 container 的 port 是映射到 host 的 port 上面的,所以可用的 port 的数量还是一样的吧
    https://docs.docker.com/config/containers/container-networking/
    https://github.com/mesosphere/marathon/issues/647

  • 資深大佬 : 0x000007b

    @est 哈哈哈哈老哥我也想问

  • 資深大佬 : monkeyWie

    @0x1d12er 看看这个项目
    github.com/eranyanay/1m-go-websockets/blob/master/setup.sh

  • 資深大佬 : b00tyhunt3r

    @veike 从你们头像分析应该相差不大

  • 資深大佬 : xvrzhao

    正好前些天用 Go 写了你这个需求,正好可以体现 goroutine 的优势,你可以看下: https://github.com/xvrzhao/site-monitor

  • 資深大佬 : xvrzhao

    哦 对了 我是单个 url,没有使用 channel,你可以用 channel 做 url 队列供给下面的 goroutine task 消费。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具