10w定时任务,如何高效触发超时

  1. 云栖社区>
  2. 阿里云MVP>
  3. 博客>
  4. 正文

10w定时任务,如何高效触发超时

初商 2019-08-12 19:40:45 浏览300
展开阅读全文

一、缘起

很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。

例如:58到家APP实时消息通道系统,对每个用户会维护一个APP到服务器的TCP连接,用来实时收发消息,对这个TCP连接,有这样一个需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。

其中,单机TCP同时在线量约在10w级别,keepalive请求包大概30s一次,吞吐量约在3000qps。

一般来说怎么实现这类需求呢?

“轮询扫描法”

1)用一个Map来记录每一个uid最近一次请求时间last_packet_time

2)当某个用户uid有请求包来到,实时更新这个Map

3)启动一个timer,当Map中不为空时,轮询扫描这个Map,看每个uid的last_pac

网友评论

登录后评论
0/500
评论
初商
+ 关注
所属云栖号: 阿里云MVP