一个超时功能的设计

超时功能的设计

产品需求

有一个产品需求,需要执行某个动作之后,需要生成一个超时的任务,在超时时间到了之后执行后续的动作,后续动作的执行大约耗时1秒钟。
任务允许在未到超时间删除,超时时间不超过30天。要求在现有的产品架构上实现此功能。

产品架构

  • 分布式服务实例数量:3
  • 缓存:redis 3.2.3
  • 数据库:mysql 5.7
  • 消息队列:rabbitMq 3.7.6
  • 分布式定时任务:elastic-job 2.1.5

功能设计

  • 方案一
    首先看到这个需求,第一时间想到的就是在内存中维护一个集合,然后通过定时任务每分钟扫描集合,将到过期时间的任务取出并执行后续的操作。
    删除任务则直接将集合中的任务删除。
    在这里插入图片描述

    • 优点:
      • 代码逻辑实现简单。
      • 充分利用了所有实例,每个实例指需要负责自己内存中的任务即可。
    • 存在问题:
      • 每次全量扫描集合过于浪费cpu性能,比如许多任务远还未到过期时间的任务。优化方案:采用有序集合,每次只需要扫
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值