1
shoaly 2020-01-03 11:57:12 +08:00
golang 协程做这个玩意 好像正好合适, 没毛病
状态即可 |
3
watsy0007 2020-01-03 12:32:05 +08:00
python 异步吗?
|
4
hitsmaxft 2020-01-03 13:30:45 +08:00
取决于你能开多少个 tcp 链接。
用纯异步执行模式 go routine,利用 channel,按 cpu 核数开几个队列异步消费,只检查 headline 不访问 body。 剩下的,就取决于你的网卡和 cpu 瓶颈了。 想高并发,首先一点是去阻塞 |
5
hitsmaxft 2020-01-03 13:32:47 +08:00
身边有 go 的简单代理服务,8core 的生产机器, 单机 1 万 qps,只检查头部应该更高。
|
6
encro 2020-01-03 14:00:15 +08:00
Python httpx 库
https://github.com/encode/httpx |
7
holinhot OP @encro python 真能在这个场景中发挥长处吗? 好像 python 多线程是伪的吧。。压榨 cpu python 好像不行。
|
10
monkeyWie 2020-01-03 16:32:28 +08:00
考虑到客户端每个 tcp 连接要占用一个端口,所以单机同时最大应该在几 W 左右,当然前提是带宽够用,go 启几万个协程还是没什么压力的
|
11
monkeyWie 2020-01-03 16:36:56 +08:00
不过单机下用 docker 多跑几个容器,可以突破端口使用量的限制
|
12
encro 2020-01-03 16:45:43 +08:00
|
13
opengps 2020-01-03 16:49:05 +08:00
考虑这个问题更多因素在于网络延迟,程序只要做好并发控制就可以了
|
14
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 |
15
veike 2020-01-03 16:55:25 +08:00
很好奇你要做什么,难道要和我的想法一样吗?
|
16
tourist2018 2020-01-03 16:57:09 +08:00
goroutine 并发去请求你说的那些网址就行了 至于能开多少 限制的应该不是语言这边 限制的应该是 tcp 连接你的机器一次能建立多少
如果只完成你说的任务 一秒探测网址的 status 最简单的 开你说的网址个 goroutine select 限制一秒时间 能返回正常值得说明就是符合的网址 超时的就是有问题的。。。 |
18
est 2020-01-03 17:05:18 +08:00 2
就没有一个人哪怕是提一下 gevent ?
|
20
phantomzz 2020-01-03 17:21:55 +08:00
blackbox_exporter 了解一下。。。现成的东西。。[]( https://github.com/prometheus/blackbox_exporter)
|
21
tourist2018 2020-01-03 17:28:26 +08:00
@tourist2018 golang 本身 client 可以限制超时时间 那就不用 timer 了
|
22
sagaxu 2020-01-03 18:11:57 +08:00 via Android
@monkeyWie 不管你 nat 之后有几个虚拟 IP,对方服务器看到的 IP 只有出口 IP 这一个
|
24
superrichman 2020-01-03 18:22:47 +08:00 via iPhone 1
劝你别这么做,qps 太高分分钟被运营商屏蔽,第二天就上新闻:xxx 涉嫌对 xxx xxx 台服务器进行大规模攻击,已被拘留。 /狗头🐶
|
29
liuxu 2020-01-03 19:03:31 +08:00
@superrichman 10K CC,不是买的发包机不封才怪
|
30
holinhot OP @phantomzz 还有 https://github.com/yanc0/beeping 这个我也看了,这两个如果任务量不大还行,任务量大了 call 自己的接口又浪费就个数量级的性能吧
|
31
holinhot OP @superrichman 自己的服务器,不是构建 cc 攻击器哦。
|
32
0x1d12er 2020-01-04 07:27:56 +08:00
@monkeyWie 我刚刚看了下 Docker 的文档好像每个 container 的 port 是映射到 host 的 port 上面的,所以可用的 port 的数量还是一样的吧
https://docs.docker.com/config/containers/container-networking/ https://github.com/mesosphere/marathon/issues/647 |
34
monkeyWie 2020-01-04 12:02:43 +08:00
|
35
b00tyhunt3r 2020-01-04 12:13:02 +08:00 via iPhone
@veike 从你们头像分析应该相差不大
|
36
xvrzhao 2020-01-05 17:49:42 +08:00
正好前些天用 Go 写了你这个需求,正好可以体现 goroutine 的优势,你可以看下: https://github.com/xvrzhao/site-monitor
|
37
xvrzhao 2020-01-05 17:52:19 +08:00
哦 对了 我是单个 url,没有使用 channel,你可以用 channel 做 url 队列供给下面的 goroutine task 消费。
|