使用布隆过滤器BloomFilter提高服务并发

场景

在实现聊天室时,需要对用户发布的信息进行敏感词过滤。敏感词过滤是cpu密集型服务,为提高聊天互动的实时性,除了做服务多实例时,每个实例的处理性能也需要被打满,那么敏感词匹配就需要高效。

方案

采用BllomFilter 布隆过滤器,guava库有现成的实现,其核心思路是采用hash + bitmap

我们将所有敏感词通过hash后设置布隆过滤器对应的位,当进行检测时同样计算检测的hash值后进行位匹配。

面试点

布隆过滤器的面试点不是hash算法,是了解其优缺点让我们可以适用在不同的场景。
其最大的优点是通过bitmap的方式可以减少我们内存的数据量:比如为了提高敏感词匹配性能,需要将上千上万敏感词加载到内存(减少io)进行计算,那bitmap便是最大的优化

缺点:因为hash碰撞原因,布隆会有误判的情况,不过在敏感词场景该问题可以忽略,通常也会运用在防爬虫的黑名单中,当误判拒绝了正常用户的请求时,可能得通过白名单进行处理。

关于BloomFilter 在我司生产环境中还有使用的场景是在防止缓存穿透攻击。
何为穿透:当缓存没有命中时,会向数据库请求数据。
攻击者会故意请求不存在的数据,可能通过分析正常数据的id等信息,这个时候可以将已有的数据设置在布隆过滤器,在请求时先进行匹配,存在数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值