假设有这样一个需求。
数据库中有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们帮出出点子~
我先说一下我自己的一个大概的解决方法吧:
使用一个定时器,每秒执行一次,去数据库里找当前时分秒的URL地址
比如8点10分01秒的时候,去数据库查找到上次url请求时间是8点9分01秒的记录,共50条记录,就开启50个线程去请求这50个URL
大概5秒种后,得到url的访问状态,更新到各自的状态字段 status_code中。
8点10分02秒的时候,去数据库查找到上次url请求时间是8点9分02秒的记录,比如共80条,就开启80个线程去请求这80个url
依次类推。
没有个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秒统一扫描一次