开发一个域名/ip 全国测速的系统,有什么比较好的设计架构

2020-06-24 19:49:46 +08:00
 timchou
比如站长网、boce.com 这样的网站,前端很简单,输入一个域名或者 ip,然后全国各地的节点进行测速,然后返回统计结果。

如果是 Python 体系,那 celery 来做分布式任务,在各个地区部署节点,比如 50 个节点,那每次要检测一个域名,就把该域名分发到 50 个节点上,类似 broadcast,每个节点进行测速,然后保存结果到 db 。

前端再展示。

但是又觉得 python 性能可能有点差,想用 go 来做,如果用 go 的话,类似的方案和组建分别是什么呢?

或者大家有什么思路?
2733 次点击
所在节点    Python
12 条回复
TuYanzheng
2020-06-24 19:56:29 +08:00
为什么要保存到 db ?这种东西,都有时效性吧?
linvon
2020-06-24 20:17:26 +08:00
这也没什么性能瓶颈吧,python 为啥性能差了
timchou
2020-06-24 20:22:55 +08:00
@TuYanzheng 查询结果要保存一下呀,前端要展示,当然可以存 cache 里,不用存 MySQL
timchou
2020-06-24 20:23:20 +08:00
@linvon 担心查询量大了 Python 会有性能问题。
XanderChen
2020-06-24 20:37:16 +08:00
@timchou

没啥思路,目前掌握的哪门编程语言熟练,就用。

机器嘛,只要能跑起来,就让它往死里跑。

性能什么的都是后面要考虑的事情。

说句难听的,你担心查询量大其实有点多余,

还是先把基础功能做出来吧。如果你真想做的话,感觉这个前期投资还挺大的。
jeeyong
2020-06-24 20:41:34 +08:00
python 开发的话, 主机环境 Python+Redis.
Python 接到任务, 推送到 Redis.
剩下的从机:
每 500 毫秒轮询一次. 有任务取出来执行, 返回结果. 结果可以用 UUID 或者 IP 去统一管理, 也可以就直接取 IP 地址.
如果担心从机数量多, 一直轮训造成 REDIS 主机负载过高.那就再做一个进程, 由他负责轮训, 如果有任务了, 通过 get 的方式触发从机的任务..
至于这套方案里, 真的发生了你担心的 python 导致的性能问题...
你可能已经有足够的资金雇一个 Golang, 一个 Nodejs, 一人写一个了. [/逃]

2H4GB 的 Flask 主机, 开 4 个线程监听, 每秒请求 500+应对起来我觉得没啥压力...很保守的说.
我现在一台 2H4GB 的性能突发型主机, 类似的业务, 86 台从机, 每天大概执行类似 ping 的任务 12000+.
CPU 积分攒了 300, 不能再高了..
timchou
2020-06-25 00:14:48 +08:00
@jeeyong 谢谢
heiheidewo
2020-06-25 00:21:12 +08:00
爱站和站长工具这两个网站经常出现 ping 和测速功能不能用的情况,挺垃圾的
opengps
2020-06-25 01:03:58 +08:00
个人觉得,你的公网环境下,需要选择的差异已经不明显了,及时有 10ms 的差异,公网波动带来的 1000ms 差异更应当优先考虑。
语言只是个工具,我提倡哪个称手用哪个,等你在这个领域解决掉了 1000ms 的公网环境问题,你才有必要去优化语言带来的性能差异
janxin
2020-06-25 08:48:40 +08:00
这个挺简单的吧...通知机制可以主动 push 也可以 pull
ohao
2020-06-25 09:13:02 +08:00
没那么麻烦,我 php 写过一个,100 多个节点
分 master 和 slave

slave 就是你理解的节点
提供 mtr ping traroute 3 个服务
就是直接 shell_exec 调用 mtr fping 返回格式化的结果

用户在 master 网页提交请求
async 请求后端每个 slave 节点,节点实时返回结果
特别注意做好 slave 的 api rate limit,很多批量 icmp 拿来刷攻击

这种工具类的需求不大 小众的很
而且也不适合作为基准测试,节点一般都是数据中心
线路和普通民用宽带的数据包优先级不一样
没什么参考价值
misty8873
2020-06-25 13:46:49 +08:00
@ohao 但是广告确实赚钱啊。。。

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

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

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

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

© 2021 V2EX