对于热点数据,瞬间大量流量涌入,通过转发层nginx可能会流向同一个应用层nginx,因此可能导致崩溃。需要对这些热点数据进行降级处理,将流量负载均衡到所有的应用层nginx上
- 用storm实时统计处瞬间称为热点的数据
基于之前所描述,我们会将所有相关的流量请求都分上报至kafka从而通过storm来统计保存至LRUMap,接下来可以比较高频率的(秒级)去遍历这些LRUMap,将其中的访问次数进行排序,统计处靠后的95%的商品访问次数的平均值,然后从往前开始遍历去找有没有瞬间出现的热点数据,我们可以定义靠前的数据超过95%平均值多少倍的阀值就认定为热点数据,然后继续遍历直至小于平均值多少倍的一个安全值就brean这个循环。 - 将storm统计处认定为热点的数据上报到流量分发层nginx
通过http将统计出的热点数据发送至流量分发层nginx上,通过lua脚本去处理这个请求,并将商品列表放至本地缓存中,同时storm会将热点数据对应的完整缓存发送至所有的应用层nginx服务器上去,并放至本地缓存中 - 流量分发层nginx的分发降级策略
对于流量分发nginx,每次访问一个商品详情页的时候,如果发现它是热点,那么立即做流量分发策略的降。可以通过hash策略,针对同一个productId的访问都同一台应用nginx服务器上的这种情况降级成对这个热点商品,流量分发采取随机负载均衡发送到所有的后端应用nginx服务器上去,从而避免说大量的流量全部集中到一台机器 - storm保存热点商品id对应的list
storm每次统计热点的数据都需要基于上一次的统计结果,对于不是热点数据的商品发送http请求值流量分发的nginx上去,取消掉之前进行的降级策略处理,并从该nginx本地缓存中删除