业务设计
1.需要实现一个发放优惠券的功能,用户量1亿,从1亿的用户中获取当日过生日的用户,在当天早上8点-10点,进行优惠券发放。
设计:
1.失败重试
2.查询过程前置,不影响阻塞发放功能主流程
(用到的中间件 redis,rocketMq)
步骤:
分批查询,分批存储。
- 在凌晨0点,开始查询,从多个分库中使用多线程查询获取uid,将uid分批存储在redis中。
1.从es中查询。
2.从分库分表中查询,多线程查询,不同的分库,用concurentHashMap存储返回结果再聚合。
- 在目标时间内8-10点,将redis里面的数据逐步导入rocketMq中,在消费端执行发送逻辑。若发送逻辑执行失败则返回消费失败,利用rq的重试机制最大努力保证成功。若用户数量激增,则利用rocketmq的特性,新增消费者数量来达到并发能力的提升保证在相同时间内把逻辑执行完成。
--
2.自选股资讯问题
某个交易客户端,有一个模块叫自选股( 就是类似添加自己的关注股票),该模块的最高并发会在4w-5w。每个人最多可以添加3000个自选股。每个自选股可能有成千,上万个资讯。产品的需求:让用户在自选股资讯页面获取所有自选股的最新的资讯(分页获取,第一页20个所有自选股的最新资讯)。目前的做法是,每个股票的资讯都放到redis的zset中(一个股票一个zset)。每次用户请求如果自选股大于50个,取排名前面的50个最新资讯,如果小于50个自选股,那就全部获取(因为50个redis zset请求在200ms以内)但是其实这个是降级方案,不能完全满足业务需求。帮忙设计一个技术架构解决这个技术问题。
思路: