在 分发层 用 lua 的 kafka 工具包 , 把商品数据传输到 kafka 中,
然后 storm 的 kafkaSpout 对 kafka 数据进行消费 并发射到 HotProductBolt中
HotProductBolt 对 kafka message进行 解析 ,发射 productId 到 ProductCountBolt 中
ProductCountBolt 利用 LRUMap 对 productId 出现的次数进行统计,选出 95% productId次数的 平均值,然后 同一时刻,productId的次数,超过
95% productId的平均值的 10倍,可认为 是突发热点商品, 将这些商品 根据 调用 nginx+lua 提供的接口
在ProductCountBolt 调用 分发层OpenResty 接口写 productId 到 其中的 share内存中,如果发现有 这些商品 就进行 随机负载,而不是 hash负载均衡
在ProductCountBolt 调用 业务层OpenResty 接口写 productId 对应的完整商品数据到 share 内存,这样就能在 业务层的 nginx 内存中获取到商品数据
同时还需要把 上一次的热点数据记录下来,下一次统计出来热点数据的时候,进行 diff操作 把,热点数据从 分发层OpenResty 业务层OpenResty 移除
网友评论