推荐学习书目
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 · Jun 24, 2020 via Android · 3234 views
    This topic created in 2176 days ago, the information mentioned may be changed or developed.
    比如站长网、boce.com 这样的网站,前端很简单,输入一个域名或者 ip,然后全国各地的节点进行测速,然后返回统计结果。

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

    前端再展示。

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

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

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

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

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

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

    还是先把基础功能做出来吧。如果你真想做的话,感觉这个前期投资还挺大的。
    jeeyong
        6
    jeeyong  
       Jun 24, 2020
    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
       Jun 25, 2020
    @jeeyong 谢谢
    heiheidewo
        8
    heiheidewo  
       Jun 25, 2020
    爱站和站长工具这两个网站经常出现 ping 和测速功能不能用的情况,挺垃圾的
    opengps
        9
    opengps  
       Jun 25, 2020 via Android
    个人觉得,你的公网环境下,需要选择的差异已经不明显了,及时有 10ms 的差异,公网波动带来的 1000ms 差异更应当优先考虑。
    语言只是个工具,我提倡哪个称手用哪个,等你在这个领域解决掉了 1000ms 的公网环境问题,你才有必要去优化语言带来的性能差异
    janxin
        10
    janxin  
       Jun 25, 2020
    这个挺简单的吧...通知机制可以主动 push 也可以 pull
    ohao
        11
    ohao  
       Jun 25, 2020 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  
       Jun 25, 2020
    @ohao 但是广告确实赚钱啊。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1266 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 17:38 · PVG 01:38 · LAX 10:38 · JFK 13:38
    ♥ Do have faith in what you're doing.