什么是热点:
热点分为热点操作和热点数据。热点数据又分为静态热点数据和动态热点数据
发现热点数据:
发现静态热点数据:
1、静态热点数据可通过强制卖家报名,提前把商品筛选,然后通过后台系统将热点商品进行预处理(提前进行缓存),不过增加了卖家的使用成本,也不够灵活
2、通过技术手动进行提前预测,大数据分析,统计TOPN商品
发现动态热点数据: 可以通过大数据预测等手动提前预测,但是实时性较差
1、构建一个异步系统,可收集交易链路上各个环节的中间件产品的热点key,如Nginx、缓存、RPC服务框架等(一些中间件产品本身有热点统计模块)
2、简历热点上报和按需订阅热点服务的下发规范,主要通过交易链路上的各个系统(详情、购物车、交易、优惠、库存、物流等)时间差,把上游热点发现的热点透传给下游系统,提前保护。比如,大促期间,详情页系统最早知道,统一接入Nginx模块统计热点URL
3、上游系统手机的任店数据发送到热点服务台,下游系统(交易系统)就会知道哪些商品频发调用,然后做热点保护。
通过每台机器上的Agent日志汇总到聚合和分析集群中,通过订阅分发推送到响应系统。可以进行热点数据填充到Cache,或者直接推送到应用服务器的内存中。
注意事项:
1、抓取热定数据采用异步方式,保证通用不影响主流程。
2、热点服务发现和中间件自身热点保护模块应该并存。中间件和应用需要保护自己。
3、热点发现要做到接近实时(3s内完成热点数据发现),这样才有意义。
处理热点数据:
几个思路: 一是优化,二是限制,三是隔离
优化:
最有效的缓存热点数据,热点数据动静分离,则可以长期保存静态数据。不管动、静数据,用队列LRU淘汰算法进行淘汰替换
限制
限制更多的是一种保护机制,比如,对被访问商品的ID做一致性HASH,然后根据Hash做分桶,每个分桶设置一个队列处理,这样可以吧热点商品限制在一个请求队列中,防止某些热点商品占用太多资源
隔离
隔离: 热点数据隔离,不要让1%的请求影响到另外的99%,隔离出来后,更方便对1%进行针对性的优化
1、业务隔离。卖家参加秒杀需要但单独报名,已知热点,可提前预热
2、系统隔离。运行时隔离,通过分组部署和另外99%分开。
3、数据隔离。秒杀数据都是热点数据,比如启用单独的Cache集群或MySQL数据放热点数据