热点数据的发现、处理、更新

热点数据发现

1.发现静态热点数据:静态热点数据的发现相对简单些,是可以提前预估预测的数据。比如:秒杀活动商品、降价促销商品、节假日的火车票机票、热门电影门票、明星发布新专辑,以及大数据分析流行趋势预测热点。

2.发现动态热点数据:创建异步监控统计服务和热点数据服务。异步监控统计服务在一个周期内对Key进行请求统计,在达到请求量级后将热点Key发送到热点数据服务收集,然后热点数据服务对这些热点Key进行聚合分析,最后推送到业务系统。

热点数据处理

1.缓存热点数据,放入LRU队列淘汰替换。

2.对请求限制、限流,加入验证、防刷机制,对单一Key限流。

3.熔断降级处理,返回一个固定值。

4.热点数据隔离,防止影响其他业务。

热点数据更新

热点数据写数据库会造成大量的线程来竞争锁,会严重影响数据库的响应时间。

1.将请求放入消息队列,顺序将更新请求发送到数据库执行。

2.优化数据库存储引擎,对单行记录并发排队写。(淘宝的数据库团队开发了针对MySQL的InnoDB层上的patch,可以做到数据库层上对单行记录做到并发排队。InnoDB内部的死锁检测以及MySQL Server和InnoDB的切换会比较耗性能,淘宝的MySQL核心团队还做了很多其他方面的优化,如COMMIT_ON_SUCCESS和ROLLBACK_ON_FAIL的patch,配合在SQL里面加hint,在事务里不需要等待应用层提交COMMIT而在数据执行完最后一条SQL后直接根据TARGET_AFFECT_ROW结果提交或回滚,可以减少网络的等待时间)

3.在数据库层面对SQL限流,thread_running达到阈值拒绝执行。

4.修改数据库innodb_thread_concurrency并发线程数配置,限制并发线程的数量,会造成大量连接等待。

5.热点数据的动态迁移到单独数据库,实现难度大。

6.将热点数据在缓存更新,定时同步到数据库,一定时间内会出现数据不一致。

猜你喜欢

转载自blog.csdn.net/Anenan/article/details/114935349
今日推荐