? 啥是热数据探测?
如果数据也要像垃圾一样分类,热数据算哪类呢?
大家好,我是鱼皮,今天分享一个有点儿干的技术知识。
大家知道,各种网站、应用的运行离不开数据的支撑,尤其对于企业来说,业务数据就是它的生命。
但有时,将所有数据堆成一坨、统一处理可能无法满足我们对性能和存储空间等要求。因此,我们需要对数据进行分类处理,以适应不同的业务需求和应用场景。
其中,有一种划分方式是将数据分为 “热数据”、“冷数据”,甚至还有 “暖数据”!
就和垃圾分类一样一样的~
先来聊一聊什么是热数据吧!
什么是热数据?
顾名思义,热数据是指 很热门、频繁被访问 的数据。
比如某度热榜上的新闻,可能每秒都会有成千上万次的访问量。
根据热数据的特点,又可以分为两类:
- 有预期:数据成为热门是在意料之中的,比如提前预告的大促活动中由网红代言的爆款商品,某宝的双十一购物节就是最好的例子。
- 无预期:数据的访问量突然飙升!可能是受到了人为恶意攻击、网络爬虫,或者是不经意间突然火爆的内容。比如突然出现了一个大新闻,某浪微博还没来得及做好防护,可能就炸了。
为了应对热数据,通常我们会选用缓存技术,将数据以 K / V(键值对)的方式提前存储到内存中。
了解了啥是热数据后,我们再来聊聊热数据探测技术,即 “找出热数据” 的技术。
为什么要检测热数据?
我们检测热数据的原因很简单:
1. 提升性能
如果使用分布式缓存,在读取时还是需要网络通讯的,就会有额外的时间开销。那如果能对热点数据提前进行本地缓存,即预热,就能大幅提升机器读取数据的性能,减轻下层缓存集群的压力。
当然,这不意味着所有数据都应该存储到本地。缓存级数越多,更新操作就越复杂,数据不一致的风险就越大!
2. 规避风险
对于无预期的热数据(热 key),可能会对业务带来极大的风险,可将风险分为两个层次:
对数据层的风险
正常情况下,Redis 缓存单机就可支持十万左右 QPS(每秒请求量),并能通过集群增大并发度。对于并发量一般的系统,用 Redis 做缓存就足够了。但是如果有一个商品数据突然爆火,或者收到恶意请求,对该数据 key 的访问 QPS 可能飙升到百万、千万量级!在低版本 Redis 单线程的工作方式下,会导致正常的请求排队,无法及时响应,严重时会导致整个分片集群瘫痪。
还有一种情况,某热点 key 突然过期,会导致大量请求直接砸向脆弱的数据库,导致数据库挂掉!
对应用服务的风险
每个应用在单位时间所能接受和处理的请求量是有限的,如果受到恶意请求的攻击,让恶意用户独自占用了大量请求处理资源,就会导致其他人畜无害的正常用户的请求无法及时响应。
那么如何检测热数据呢?
如何检测热数据?
首先,我们需要给 “热” 定义一个阈值或规则,到底多热算热呢?
可以根据经验值定义,也可以根据系统数据的平均热度来定义,比如 1 秒内访问 1000 次的数据算是热数据。
对于单机应用,检测热数据很简单,直接在本地为每个key创建一个滑动窗口计数器,统计单位时间内的访问总数(频率),并通过一个集合存放检测到的热 key。