一、热点文章需求及实现方案
1.1 需求分析
判断文章是否是热点,有几项标准:
阅读数量(权重1)
点赞数量(权重3)
评论数量(权重5)
收藏数量(权重8)
文章分值=行为数量*对应权重结果相加之和
分值高低决定文章是否是热点文章,分值排名前30的都是热点文章
计算热点文章,有两种方案:
- 定时计算热点文章
- 实时计算热点文章
1.2 定时计算
- 每天按时准点根据文章的行为(点赞、评论、阅读、收藏)计算文章的分值
- 把分值排名前30的文章安分值倒排序数据存入redis中
- App端用户查询文章列表中,优先从redis中查询热度较高的文章数据
二、分布式任务调度技术
2.1 什么是任务调度
我们可以先思考一下业务场景的解决方案:
- 某电商系统需要在每天上午10点,下午3点,晚上8点发放一批优惠券。
- 某银行系统需要在信用卡到期还款日的前三天进行短信提醒。
- 某财务系统需要在每天凌晨0:10结算前一天的财务数据,统计汇总。
- 12306会根据车次不同,设置某几个时间点进行分批放票。
以上业务场景的解决方案就是任务调度
任务调度是指系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程。有了任务调度即可解放更多的人力,而是由系统自动取执行任务。
如何实现任务调度?
- JDK提供的API,例如:Timer、ScheduledExecutor
- 框架,体乳Quartz,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求
- SpringTask
2.2 cron表达式
cron表达式是一个字符串,用来设置定时规则,有其部分组成,每部分中间用空格隔开,每部分的含义如下表所示:
cron表达式还可以包含一些特殊符号来设置更加灵活的定时规则,如下表所示
下面列举了一些例子,如下表所示:
2.3 什么是分布式任务调度
在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度
三、xxl-job调度技术使用
3.1 xxl-job简介
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
源码地址:https://gitee.com/xuxueli0323/xxl-job
文档地址:https://www.xuxueli.com/xxl-job/
3.2 配置部署调度中心-docker安装
1、启动xxl-job容器
docker starter xxl-job-admin
2、启动调度中心,访问地址http://192.168.200.130/xxl-job-admin
登录账号 “admin/123456”
3、xxl-job数据库表
3.3 xxl-job架构图
调度中心会发出调度请求,任务执行器接收到请求之后会去执行任务,任务则专注于任务业务的处理
调度中心: 就是这个管控平台
执行器: 用来执行业务对应的微服务
3.4 具体实现
①:在xxl-job-admin调度中心配置执行器和任务
②:添加xxl-job依赖(heima-leadnews-test提供了xxl-demo工程)
<