1.下单未支付,关单,订单量小的时候可以用脚本,把这些找出来,订单大的时候,分库分表,用脚本找不现实,所以把关单操作独立出来,类似kafka,mq,投递消息的时候带上投递时间,本平台会在指定时间点,让消费者消费,单机和集群版,考虑怎么操作?
不同操作,定时的时间不同,知识点:
1)存储方面底层数据结构什么样子好?
时间轮:任务添加\移除O(1);不占用大量资源;一个线程推进就工作 千万级delayQueue增删非常慢
2)消息怎么存好?kafka怎么存,扫描器怎么设计?可以根据自己的结构设计一个扫描器。
为什么Kafka速度那么快https://www.jianshu.com/p/c9c4279164ed
kafka解决了什么问题?https://www.jianshu.com/p/c9c4279164ed
(3)Kafka中的时间轮算法https://www.jianshu.com/p/ae84bb32366c
3)我随便回答的,kafka超时么?他问:超时kafka会支持么?让他出队?如果是队列,怎么存储好?
(三)延迟任务处理方案 https://www.jianshu.com/p/ca46c393be1f
延迟队列DelayQueue实现订单自动取消https://www.jianshu.com/p/072ecd523590
高并发异步延时消息系统https://www.jianshu.com/p/791d9079493e
2.缓存类的组件,短信平台,防止骚扰,比如1小时不能超过两条短信,一天不能超过5条短信。怎么落地比较好?整个集群无状态。
每次发短信的时候都要去db,缓存里存?两个字段怎么存储,比如发短信时间,计数器(吞吐量不大的时候,而且会出现毛刺)。
用滑动窗口算法解决
3.分布式锁,过期时间很短,gc期间已经过期,实际还在执行,另一个线程也拿到锁,也继续执行,执行两次,这个分布式锁,我们应该怎么写?
为什么要用lua脚本?lua脚本里的内容?应该还有什么别的办法?