qd-today / qd

QD [v20240210] —— HTTP请求定时任务自动执行框架 base on HAR Editor and Tornado Server
https://qd-today.github.io/qd/
MIT License
4.23k stars 547 forks source link

[Feature] 添加网络状态(是否通路)检测功能 #281

Open ZeaKyX opened 2 years ago

ZeaKyX commented 2 years ago

Verify steps

Describe the Feature

现在多次失败自动停用功能可以保障安全,在问题是由模板或网站本身引起的情况下。 但像 Issue #101 里有提到签到大部分失败情况是因为网络问题,这个时候我不想停用。

Describe the solution

希望添加在签到前检测基本的网络通讯,比如说简单的 ping 。 例如这个项目中的 https://github.com/tty228/luci-app-serverchan/blob/master/root/usr/bin/serverchan/serverchan#L593 然后如果结果失败,则跳过此次签到,或提供另外设置重试时长的选项。

Describe alternatives

No response

Additional context

No response

a76yyyy commented 2 years ago

参考 B站“崩溃”始末 2021.07.13 我们是这样崩的,

多活SLB在故障时因CDN流量回源重试和用户重试,流量突增4倍以上,连接数突增100倍到1000W级别,导致这组SLB过载。

web服务端不堪重负时, 用户端不断地无意义或者恶意重试只会不断加剧服务端的负载, 所以框架才会在任务设置失败n次后自动禁用。

这里就有一个问题, 签到框架本身既是服务端(为用户提供模板保存、 api服务和任务调度), 也是客户端(执行任务时向http服务端发送请求), 面对您所提供的 feature 方案,有这么几个疑问:

  1. ping 不通容器外网本身不是框架本身存在的问题, 而是管理员采用不适当的配置部署了容器、或者外网环境发生了变动, 这时候应该先排查这些问题, 而不是简单地考虑让框架忽略这次网络错误跳过签到

  2. 如果设置 ping, ping 什么? ping 设置的模板网址么, 那可以考虑一下, 但这样的话会不会造成不必要的时间和资源浪费?

  3. 设置 重试时长 和 不限制重试次数 的功能, 框架中是包含的

ZeaKyX commented 2 years ago

@a76yyyy 确实没有考虑到服务在大流量情况下的占用问题,抱歉。我想了一下,主要是这样考虑

  1. 目前面对网络问题,就是需要管理员排查。如果出错并非外网配置改动,而是对面服务端暂时掉线(比如说暂时维护),框架是否考虑添加主动的规避策略。 其实更为激进的话,甚至在不用管理员的情况下自动重启容器等来尝试修复网络环境。😂
  2. ping 的对象根据想要针对的对象而定,如果确实考虑要有广域外网的侦测功能,那可以如我提到的链接处 ping 主流站点、DNS 服务器。如果不需要这种东西,那如您所说针对模版的ip地址ping就很不错。ping的次数我个人认为无需太多,但缺乏这方面的经验,没办法评估这样的资源消耗情况。
  3. 目前的重试设置项我已了解过,但与提到的问题是不同的情况。