海量URL定时监测的解决方案

假设有这样一个需求。


数据库中有1000个URL地址,当然也可以会持续增加,一万几万都有可能,需要每60秒监测一次这1000个URL的状态。

每个URL扫描的时间是按照 URL添加的时间为基数,递加60秒来计算的。

比如:

url-1的添加时间是 10点01分20秒,则他的监测频率是 10点01分20秒、10点02分20秒、10点03分20秒……

url-2的添加时间是 10点01分35秒,则他的监测频率是 10点01分35秒、10点02分35秒、10点03分35秒……

url-3的添加时间是 11点12分33秒,则他的监测频率是 11点12分33秒、10点13分33秒、10点14分33秒……

每个URL地址平均响应时长在5秒左右,每个URL访问的超时时间是10秒,如果10秒没返回数据,代表URL状态访问异常。

如果某个URL连续扫描3次(也就是3分钟的时候)都返回 非http200的状态/或超时,则暂停下一次对该URL的访问监测。

如果用户在数据库中插入了1条URL地址后,则在60秒之后,会被自动添加到扫描的任务中去。

不限制技术栈,求大niu们帮出出点子~


我先说一下我自己的一个大概的解决方法吧:

  1. 使用一个定时器,每秒执行一次,去数据库里找当前时分秒的URL地址

  2. 比如8点10分01秒的时候,去数据库查找到上次url请求时间是8点9分01秒的记录,共50条记录,就开启50个线程去请求这50个URL

  3. 大概5秒种后,得到url的访问状态,更新到各自的状态字段 status_code中。

  4. 8点10分02秒的时候,去数据库查找到上次url请求时间是8点9分02秒的记录,比如共80条,就开启80个线程去请求这80个url

  5. 依次类推。

  6. 没有个10年脑溢血想不出我这种解决方案,哈哈。

url-1的添加时间是 10点01分20秒,则他的监测频率是 10点01分20秒、10点02分20秒、10点03分20秒……
url-2的添加时间是 10点01分35秒,则他的监测频率是 10点01分35秒、10点02分35秒、10点03分35秒……
url-3的添加时间是 11点12分33秒,则他的监测频率是 11点12分33秒、10点13分33秒、10点14分33秒……
是必须条件么?可不可以 60秒统一扫描一次