大家平时刷抖音、视频号、快手时,几乎总能刷到最新的视频。那这里是怎么实现的呢?
上述场景,可以简单抽象为曝光去重,就是用户看过的 feeds1、feeds2、feeds3 ...... 等,如何保证在用户下次进入系统时不会再次出现呢?今天,我们就来探讨下几种实现方案吧。
(资料图)
方案一 :Set
这个方案简单粗暴,就是每个用户用一个集合,存储看过的所有 feedsid。每次推荐系统要出新的 feeds 时,去 set 中 check 一下是否存在,如果存在的话,就过滤掉这条 feeds。
一般来说,像是短视频推荐的场景下,对 feeds 的实时性要求相对较高,一般会使用 Redis 作为曝光打击的载体。
不了解 Redis Set 的同学可以参考下:https://redis.io/commands/set/,简而言之就是一个字典。
这种方案的问题是,在海量用户的场景下,1是成本会很高(像 Redis 是纯内存数据库);2是随着 feeds 数量越来越多,set 查询会随之变慢(像短视频的场景下,1晚上刷个上百条还是不成问题的)。
我们来简单试算一下,假设国民级 App 的日活跃用户在 3kw,每人每天平均刷 200 条视频 feeds,每条 feeds 的 id 长度为 32B。
如果以 Redis Set 的方案来计算:3kw * 200 * 32 * 1.5(Redis 数据结构自身存储) ~ 288G,每天需要消耗存储 288G,1个月呢?8.6T,1年呢?103T。以腾讯云 keewiDB 的持久内存来估计 64元/GB/月,1月成本大约 55w,有钱也不能这么造啊。
那有没有更优惠的实现方案呢?这就要说到本文的主角,布隆过滤器了。
方案二:Bloom Filter
布隆过滤器,本质上是一个高阶 Bitmap,最适合的场景就是海量数据的过滤了。
不了解 Bitmap 的同学可以参考 https://www.cnblogs.com/dragonsuc/p/10993938.html。
布隆过滤器介绍
布隆过滤器的结构如下图示:
简单说下它的使用:
1. 写入:对数据 data 进行 k 次 hash 运算(hash 函数可选择,本文不具体较少),得到结果后,对 bit 数组相应位置置1。
2. 检查:对数据 data 同样进行 k 次 hash 运算,得到结果后,检测 bloom bit 数组中相应位置是否全为1,如全是1,则表示该 data 存在于 bloom 中;否则,表示该数据不在 bloom 中。
结合上述描述,我们可以得出如下结论:
1. bloom 中存的摘要,而不是原始数据 data,所以空间占用远远低于 set 的占用。
2. bloom 无法删除数据,如上图示 x、y 都对 bit 数组中 bits[2] 置1了,如果删除 x,则 bits[2]为0,y判定时,也判定失败了。
3. bloom 无法动态扩展大小,如上图示,bit 数组是固定的,如果 bits 数组长度调整了,那么同样的 x、y hash 后的 bits 索引也会发生变化。
4. bloom 存在误判的可能,例如 x、y hash 后得到的 bits 数组索引都是 1、3、5,那么即使 bloom 中只添加了 x,当 y 来判定时,也会判定为存在。
这里不细究它的推导过程了,感兴趣的同学可以自行研究。
布隆过滤器实现曝光打击
由上述布隆过滤器的特性所知:必须合理选择 bloom 过滤器的规格,bloom bit 数组太小,则误判率过高;bloom bit 数组太大,则过于浪费存储。
还是以相同的条件来试算,
假设国民级 App 的日活跃用户在 3kw,每人每天平均刷 200 条视频 feeds,每条 feeds 的 id 长度为 32B。
如果以 Redis bloom 的方案来计算:400B * 3kw ~ 12G,相比 set 方案的 288G,节约了 96% 的存储成本。1月可以节约 52.8w 成本,降本增效杠杠的。
当设置 bloom 容量为 200 时,每人每天1个key,可以保证当天看到不重复的 feeds,BF 规格如下:
采用 Redis Bloom 插件计算,https://redis.io/docs/stack/bloom/。
进一步优化
上述场景下,Bloom 大小按照 200 计算,那活跃用户呢?总有一些高活用户,每天会刷大几百条视频,这部分用户不做特殊处理的话,体验会非常差,后面总是看到重复的视频。还有就是一些特殊场景,例如业务希望用户1月内都不要看到重复的 feeds。这种,如果仅仅以每天每人作为 bloom 的 key,那么实现1个月内不重复,1个用户要查询30个 bloom,有点夸张。
Redis 虽然能抗,但假设用户刷视频的频率是 10w/s,扩散后,对 Redis 的压力就是300w/s
怎么优化呢?有几种思路。
1. 最简单,让 Redis 抗,单机扛不住,分片还扛不住吗?分片扛不住,读写分离还扛不住吗?反正肯定能抗住。
2. 记录1个总数量的 bloom key,分级,递增设置容量。例如起始 bf0 容量是 1000,当 bf0 满了,新建一个 bf1,容量是 10000,bf1 满了,再新建一个 bf2,容量是 10w。这种方案有两个好处,1是递进的增加 bf 容量,减少 Redis 的 key 访问次数,减轻 Redis 的压力;2是不浪费存储,大部分用户都是非活跃用户,可能看到的 feeds 量在 1w 以内,只有真正活跃的用户才会分配 10w 以上的大 bf,精准的占用存储。
至此,本文就大体结束了,后面有时间了再开一篇布谷鸟过滤器的说明,先鸽一下。
-
【全球时快讯】布隆过滤器在短视频 feeds 系统中的妙用
2023-03-12
上述场景,可以简单抽象为曝光去重,就是用户看过的feeds1、feeds2、feeds3 等,如何保证在...
-
今日要闻!大连去山东自驾旅游攻略(大连出发到山东自驾游攻略)
2023-03-12
1 大连出发到山东自驾游攻略山东烟台到大连89海里2 大连到山东旅游攻略两个地方都可以乘船从大连到山...
-
天天热议:淄博至连云港自驾游(淄博到连云港的火车时刻表)
2023-03-12
1 淄博到连云港的火车时刻表理论上1天左右。这个只是估计的大概时间,因为选择快递不同,到达目的地时...
-
淄博至连云港自驾游攻略(淄博至连云港自驾游攻略路线图) 天天最新
2023-03-12
1 淄博至连云港自驾游攻略路线图驾车路线:全程约473 5公里起点:宝应县1 宝应县内驾车方案1)从起点...
-
环球即时看!沈阳到济南自驾旅游(沈阳到济南旅游攻略)
2023-03-12
1 沈阳到济南旅游攻略沈阳到济南在1100公里左右,如果车耗油在百公里10升油的话,油耗在110升左右,也...
-
庐山景点之间可以自驾吗(庐山可以自驾车进去吗)-世界热点
2023-03-12
1 庐山可以自驾车进去吗不建议自驾上庐山,山道弯路特别多。庐山旅游十大忌讳:1 庐山气温比九江低7-1...
-
天柱山自驾停炼丹湖(天柱山炼丹湖的由来)-天天热头条
2023-03-12
1 天柱山炼丹湖的由来天柱山有两条索道,分别是大龙窝索道和天柱山索道。在游客中心乘坐换乘车可以自行...
-
全球微资讯!哈尔滨密山自驾路线(哈尔滨密山自驾路线推荐)
2023-03-12
1 哈尔滨密山自驾路线推荐驾车路线:全程约631 6公里起点:吉林市1 吉林市内驾车方案1)从起点向正南...
-
杭州到广州自驾需要多久时间(杭州到广州自驾需要多久时间能到)-全球观速讯
2023-03-12
1 杭州到广州自驾需要多久时间能到极兔快递跨省一般三四天到。从揽收开始算起,极兔快递因为价格便宜所...
-
青岛至黄山自驾游路线查询(青岛到黄山自驾沿途景点)
2023-03-12
1 青岛到黄山自驾沿途景点黄山住黄山上,青岛住崂山上,景区里都有宾馆,所以最近,就在景区里面。2 ...
-
自驾游去黄山旅游(自驾游去黄山旅游路线图)
2023-03-12
1 自驾游去黄山旅游路线图1、黄山景南大门区汤口镇停车场介绍:1、黄山南大门立体停车场收费情况为6小...
-
“医美茅”拟大手笔分红 多家机构密集关注!机构最青睐两大行业 上调7股评级(附名单)-全球信息
2023-03-12
【“医美茅”拟大手笔分红多家机构密集关注!机构最青睐两大行业上调7股评级(附名单)】据统计,3月6日至...
-
成都亲子乐园哪里好玩,成都亲子游乐园有哪些|世界观点
2023-03-12
一、成都亲子乐园哪里好玩,成都亲子游乐园有哪些自从亲子乐园火起来后,各地的亲子乐园越来越多,不少...
-
广州地铁博物馆到环球魔幻世界怎么走
2023-03-12
公交线路:地铁8号线→地铁3号线→apm线,全程约10 9公里1、从广州地铁博物馆步行约520米,到达万胜围站...
-
歇马山庄温泉 银石滩国家森林公园温泉怎么样
2023-03-12
歇马山庄温泉银石滩国家森林公园温泉怎么样之前去时感觉温泉一般,但是周围风景非常的好,没去过的还是...
-
镇江到福州市自驾路线(镇江到福州的火车时刻表查询) 天天观察
2023-03-12
1 镇江到福州的火车时刻表查询车次类别始发站出发站出发时间目的站到达时间终点站历时硬座1034 1035空...
-
佛山一韶关自驾游线路(佛山到韶关有多少公里?)_当前热闻
2023-03-12
1 佛山到韶关有多少公里?距离:261公里;时间:3小时7分钟韶关→京珠高速→深圳 佛山 东莞 肇庆 北...
-
赣州附近适合自驾的地方(赣州附近适合自驾的地方推荐) 天天视讯
2023-03-12
1 赣州附近适合自驾的地方推荐赣州---长沙---张家界自驾开车:511公里大约7小时2分钟;1、从起点出发,...
-
商丘到黄山自驾游路线(商丘到黄山过路费) 天天日报
2023-03-12
1 商丘到黄山过路费驾车路线:全程约783 5公里过路费大约400汽油大约65升起点:商丘市1 商丘市内驾车...
-
贵阳到威宁自驾车线路(贵阳到威宁多少钱车费) 环球百事通
2023-03-12
1 贵阳到威宁多少钱车费从威宁开车去贵阳共355公里,5小时23分钟7座及以下小客车收费155元2 贵阳到威...
“医美茅”拟大手笔分红 多家机构密集关注!机构最青睐两大行业 上调7股评级(附名单)-全球信息
【“医美茅”拟大手笔分红多家机构密集关注!机构最青睐两大行业上调7股评级(附名单)】据统计,3月6日至...
世界新资讯:03月12日七台河今日疫情最新动态消息 七台河出行进出返乡最新疫情防疫管控出入政策通知
2023年03月12日七台河今日疫情最新动态消息及七台河出行进出返乡最新疫情防疫管控出入政策通知。本次七...
每日热讯!1m是多少kb内存(1m是多少kb)
1、1GB等于1024MB1MB等于1024KB1KB等于1024字节1g=1024m1m=1024k1k=1024字节1GB=1024MB1MB=1024KB
传Meta(META.US)新一波裁员计划将于下周宣布 预计规模与去年相当_要闻速递
亚汇网获悉,据报道,talatfor(TA U)将宣布裁员,裁员规模将与去年的裁员规模相当。据了解,ta于去年11...
广告
X 关闭
全球消息!奥林巴斯是哪个国家品牌?什么是单反相机?
最近这段时间总有小伙伴问小编奥林巴斯是哪个国家品牌_奥林巴斯是哪个国家的品牌是什么,小编为此在网上...
观天下!军舰的排水量是什么意思?排水量怎么计算?
提起军舰的排水量是什么意思_排水量是什么意思大家在熟悉不过了,被越来越多的人所熟知,那你知道军舰的...
环球报道:联想v370笔记本综合测评?联想v370笔记本最新报价是多少?
提起联想z370cpu_lenovov370大家在熟悉不过了,被越来越多的人所熟知,那你知道联想z370cpu_lenovov370...
天天新消息丨微信新功能官方提醒怎么设置?如何使用微信的提醒功能?
(资料图片仅供参考)最近这段时间总有小伙伴问小编微信新功能官方提醒怎么设置_微信新功能官方提醒怎么玩...
当前报道:华为荣耀X1有哪些配置参数?华为荣耀x1标配是什么?
(资料图片)在生活中,很多人都不知道华为荣耀x10max_华为荣耀x1是什么意思,其实他的意思是非常简单的,...
全球今日讯!怎么选择适合自己的笔记本?实惠笔记本有哪些推荐?
最近小编看到大家都在讨论电脑啥牌子的好价格又实惠笔记本_实惠笔记本相关的事情,对此呢小编也是非常的...
焦点简讯:胸部怎么按摩健康(胸部怎么变大)
您好,现在渔夫来为大家解答以上的问题。胸部怎么按摩健康,胸部怎么变大相信很多小伙伴还不知道,现在让...
天天快看点丨挑战不可能第四季免费观看(挑战不可能第四季最新)
(相关资料图)您好,现在渔夫来为大家解答以上的问题。挑战不可能第四季免费观看,挑战不可能第四季最新相...
全球观焦点:爱亲者不敢恶于人敬亲者不敢慢于人(爱亲者不敢恶于人敬亲者不敢慢于人)
【资料图】您好,现在渔夫来为大家解答以上的问题。爱亲者不敢恶于人敬亲者不敢慢于人,爱亲者不敢恶于人...
消息!美年体检报告查询(美年体检报告查询)
(相关资料图)您好,现在渔夫来为大家解答以上的问题。美年体检报告查询,美年体检报告查询相信很多小伙伴...
广告
X 关闭
倒计时!国内新能源汽车行业或将进入“无补贴时代”
一个月之后,国内新能源汽车行业有可能进入无补贴时代。根据工信部、财政部、科技部和发展改革委联合发...