博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遇到过的问题整理-大量页面监控问题
阅读量:4697 次
发布时间:2019-06-09

本文共 667 字,大约阅读时间需要 2 分钟。

业务系统中有一个定时任务,需要每天两个时间点进行数据监控

场景如下:

需要监控全部在线的页面的内容中,指定某一类链接,是否有失效风险或者已经失效,这类链接本身也是我们维护的。

假如有10w个页面,常规做法是

定时拉取10w个页面内容,

实时解析页面,

分析出链接,

进行校验

这种做法存在很多问题:

1.定时任务的时间点本身可配置,意味着频率也是可以配置的,如果频率高了,这种做法一定会出现上一个任务还未执行过半,新任务又开始了

2.导致问题1的风险增高的点:10w个页面拉取内容,本身是直接读取的redis缓存,这个时间不长,但是解析10w个页面,分析出链接,这个时间相对不可控,假如一个页面需要500ms,执行完也需要5w秒,这个时间已经很长很长了

3.页面内容如果未更新过,也需要每次解析链接,这是一种资源的浪费,也会显著增加时长

5.单个线程处理这种任务无疑是可怕的,因此任务分布式执行也是不可避免的

 

以下是优化后的方式:

1.单线程读出10w个在线页面的id,没100个id生成一条消息,通过mq分发任务

2.mq的consumer端多实例执行任务

3.解析链接的过程放到生成链接的时候,只有内容有变,就自然重新生成链接列表,缓存到redis中,过期时间为页面结束时间

4.单个mq消费端那到消息体100个id后,顺序执行,从redis中获取id对应的链接列表,处理链接失效行

 

通过这个方法,保证了任务的快速执行与执行效率

转载于:https://www.cnblogs.com/windliu/p/8084552.html

你可能感兴趣的文章
面向对象和面向过程的区别及优劣对比详解
查看>>
const与指针
查看>>
thsi指针的一些用法及作用
查看>>
c++友元
查看>>
c++运算符重载
查看>>
一元运算符重载
查看>>
Windows 远程栈溢出挖掘
查看>>
(网页)the server responded with a status of 403 (Forbidden)
查看>>
葡萄城报表介绍:Java 报表
查看>>
android 通知消息一
查看>>
UNET学习笔记2 - 高级API(HLAPI)
查看>>
腾讯编程马拉松2012第一题
查看>>
Day18
查看>>
Web Service数据源
查看>>
php.ini详解(转)
查看>>
[转]基于Python的接口测试框架
查看>>
"ORA-00942: 表或视图不存在 "的原因和解决方法[转]
查看>>
PeekMessage、GetMessage的区别
查看>>
磁盘使用率达到100%
查看>>
linux跳过root密码登陆
查看>>