V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
timchou
V2EX  ›  Python

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

  •  
  •   timchou · 2020-06-24 19:49:46 +08:00 via Android · 2736 次点击
    这是一个创建于 1604 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如站长网、boce.com 这样的网站,前端很简单,输入一个域名或者 ip,然后全国各地的节点进行测速,然后返回统计结果。

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

    前端再展示。

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

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

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

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

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

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

    还是先把基础功能做出来吧。如果你真想做的话,感觉这个前期投资还挺大的。
    jeeyong
        6
    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
        7
    timchou  
    OP
       2020-06-25 00:14:48 +08:00
    @jeeyong 谢谢
    heiheidewo
        8
    heiheidewo  
       2020-06-25 00:21:12 +08:00
    爱站和站长工具这两个网站经常出现 ping 和测速功能不能用的情况,挺垃圾的
    opengps
        9
    opengps  
       2020-06-25 01:03:58 +08:00 via Android
    个人觉得,你的公网环境下,需要选择的差异已经不明显了,及时有 10ms 的差异,公网波动带来的 1000ms 差异更应当优先考虑。
    语言只是个工具,我提倡哪个称手用哪个,等你在这个领域解决掉了 1000ms 的公网环境问题,你才有必要去优化语言带来的性能差异
    janxin
        10
    janxin  
       2020-06-25 08:48:40 +08:00
    这个挺简单的吧...通知机制可以主动 push 也可以 pull
    ohao
        11
    ohao  
       2020-06-25 09:13:02 +08:00 via iPhone
    没那么麻烦,我 php 写过一个,100 多个节点
    分 master 和 slave

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

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

    这种工具类的需求不大 小众的很
    而且也不适合作为基准测试,节点一般都是数据中心
    线路和普通民用宽带的数据包优先级不一样
    没什么参考价值
    misty8873
        12
    misty8873  
       2020-06-25 13:46:49 +08:00
    @ohao 但是广告确实赚钱啊。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1508 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 17:16 · PVG 01:16 · LAX 09:16 · JFK 12:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.