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

场景

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

方案

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

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

面试点

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

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

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

你可能感兴趣的:(面试)