详谈布隆过滤器在亿级流量电商系统的应用

标签: 布隆 过滤器 流量 | 发表时间:2022-05-03 02:45 | 作者:菜鸟厚非
出处:https://juejin.cn/tag/%E6%9E%B6%E6%9E%84

!!! 本文已参与「新人创作礼」活动,一起开启掘金创作之路。更多干货文章,可以访问 菜鸟厚非

简介

布隆过滤器在实际中发挥着非常重要的作用,一呢可以防止网站被攻击,二呢可以提高系统的性能。接下来我们通过实际案例进行讲解。


案例详解

例如在电商平台,下面商品访问的地址为 https://item.jd.com/ 857.html,其中 857 是商品的 SKU 。不明白的同学可以简单理解为一个数字对于不同的商品。 在这里插入图片描述 接着我们来看一个正常的流程,用户访问商场,应用程序从 Redis 拿取数据,如此此时没有,则会到数据库里面拿取。 在这里插入图片描述 此时我们的缓存服务器缓存了 1-1000 的商品,且用户访问都是正常状态。但在当前的设计下有个致命的问题,0-1000 是存在的数据,但这些之外商品不存在。 在这里插入图片描述 恰逢今年双十一,突然遭到了攻击,不法分子通过改变商品的 SKU 进行频繁访问,且访问的商品还是不存在的。

此时这些产品在缓存中是不存在,而且数据库也是不存在,大量的请求都会到 DB ,大家都是数据库在短时高并发情况下,承载能力是并不行的。这时就会引起系统瘫痪,这在电商系统是非常非常严重的事情。

这种绕过 Redis 服务器,直接查询 DB 的攻击方式,称之为缓存穿透攻击。下面我们进行讲解 在这里插入图片描述

缓存穿透

什么是缓存穿透

缓存穿透攻击是指恶意用户在短时内大量查询不存在的数据,导致大量请求被送达数据库进行查询,当请求数量超过数据库负载上限时,使系统响应出现高延迟甚至瘫痪的攻击行为。

同学们不要小看这种攻入,如果感到像 618 双十一 等这样的节日活动,造成的损失可以不可估量的。

如何预防缓存穿透

要想预防缓存穿透,可以使用布隆过滤器。那什么是布隆过滤器呢?

巴顿.布隆于一九七零年提出的,其主旨是采用一个很长的二进制数组,通过一系列的Hash函数来确定该数据是否存在。如下图 在这里插入图片描述

此时我们将 1-1000 商品初始化到布隆过滤中。如下图 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

我们对 858 商品在布隆过滤器中进行判断,可以看到布隆过滤器的判断过程,可以看到所处位全部是1。如下图 在这里插入图片描述

接着对不存在的商品 8888 进行布隆过滤器判断,可以看到某些位为 0 说明,此商品是不存在的。

如果当前是缓存穿透攻击,判断没有后,直接返回结果,就不用再进行查询,有效的阻挡了非法请求。 在这里插入图片描述

误判情况

布隆过滤器并不是100%可以判断出是否存在,可以通过增加二进制数组位数、增加Hash次数来减少误判率。

通过例子解释什么是误判,商品 8889 在数据库是不存在的,但 hash 位全部是 1 ,之后就会进行查询操作,这种就是误判。 在这里插入图片描述

有的同学会疑问误判了会怎么样,布隆过滤在设计之处就存在的误判情况,且误判可以优化到 1% ,如果面对攻击 10000 次也就只有 100 会误判,这种影响是不大的,在可接受范围内。


项目中使用流程

在这里插入图片描述

布隆过滤与数据一致性

  • 解决方案 定时异步重建布隆过滤器
  • 解决方案 计数Bloom Fliter

相关 [布隆 过滤器 流量] 推荐:

详谈布隆过滤器在亿级流量电商系统的应用

- - 掘金 架构
本文已参与「新人创作礼」活动,一起开启掘金创作之路. 布隆过滤器在实际中发挥着非常重要的作用,一呢可以防止网站被攻击,二呢可以提高系统的性能. 接下来我们通过实际案例进行讲解. 例如在电商平台,下面商品访问的地址为 https://item.jd.com/ 857.html,其中 857 是商品的 SKU.

Hbase 布隆过滤器BloomFilter介绍

- - CSDN博客推荐文章
bloom filter的数据存在StoreFile的meta中,一旦写入无法更新,因为StoreFile是不可变的. Bloomfilter是一个列族(cf)级别的配置属性,如果你在表中设置了Bloomfilter,那么HBase会在生成StoreFile时包含一份bloomfilter结构的数据,称其为MetaBlock;MetaBlock与DataBlock(真实的KeyValue数据)一起由LRUBlockCache维护.

一个用于白名单服务的布隆过滤器(bloom filter)

- - CSDN博客架构设计推荐文章
      bloom filter这种数据结构用于判断一个元素是否在集合内,当然,这种功能也可以由HashMap来实现. bloom filter与HashMap的区别在于,HashMap会储存代表这个元素的key自身(如key为"IKnow7",那么HashMap将存储"IKnow7"这12个字节(java),其实还需要包括引用大小,但java中相同string只存一份),而bloom filter在底层只会使用几个bit来代表这个元素.

JQuery内容过滤器

- - CSDN博客推荐文章
jQuery的选择器非常众多,下面介绍其中的一种,内容过滤器. 内容过滤器顾名思义就是根据内容进行选择的一种. 选择器,下面我们来举例一下这个内容过滤器的使用方法. 使用jQuery内容过滤器. $(function(){//显示包含给定文本的元素. $(function(){//显示所有不包含子元素或者文本的空元素.

JavaEE过滤器处理原理

- - ITeye博客
     大家都知道JavaEE中的Filter是用了责任链模式来实现的,请求值先到达Filter,根据Filter在web.xml的配置顺序一个个按顺序地处理,处理完以后,再按反顺序来处理响应信息,有点像是一个栈(先处理请求的Filter,后处理响应). 下面就山寨一下它的实现,来说明它的实现原理.

Wireshark 过滤器语法 - 粪球

- - 博客园_首页
 wireshark有两种过滤器:.  捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中. 显示过滤器(DisplayFilters):用于在捕捉结果中进行详细查找. 捕捉过滤器 (此过滤器不需要比较运算符,查询关键字请全部小写). 捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件.

使用@WebFilter过滤器中设置例外URL的一种方式

- - 编程语言 - ITeye博客
        if (null!=excludedPages && excludedPages.length()!=0) { // 例外页面不为空   .         for (String page : excludedPageArray) {// 遍历例外url数组   .             // 判断当前URL是否与例外页面相同.

Spring Security 实战干货:图解Spring Security中的Servlet过滤器体系

- - SegmentFault 最新的文章
我在 Spring Security 实战干货:内置 Filter 全解析对 Spring Security的内置过滤器进行了罗列,但是 Spring Security真正的过滤器体系才是我们了解它是如何进行"认证"、“授权”、“防止利用漏洞”的关键. Servlet Filter体系. 这里我们以 Servlet Web为讨论目标, Reactive Web暂不讨论.

SpringCloudGateway网关中各个过滤器的作用与介绍(附debug图片)

- - 掘金 后端
在我搭建的微服务项目中,网关是非常重要的一环,起到了请求过滤和拦截的. 我最近需要在网关实现URL请求参数加密以及数字签名检验请求参数是否被篡改等功能,所以最近着手开始研究起了网关. 首先最重要的就是先配置一个自己的过滤器,来完成验证. 然后就在设计的过程中遇到了一些问题,比如请求转发,请求request修改失败等问题.

流量生意

- flypen - 张磊的blog
前些日子网上盛传某联盟的按月分成数据,其中番茄花园、雨木林风的分成都高达百万. 有人惊呼:原来做盗版软件这么赚钱. 也有人质疑:他们怎么可能赚这么多钱. 他们确实很赚钱,简单说,这就是流量生意. 为什么几乎每个巨头都有一个“网站联盟”. 为什么Google当年愿意付费推广Firefox. 为什么,推广Firefox、自己做Chrome的同时,把微软当作对手的Google还特意提供“优化的Internet Explorer”.