乐趣区

关于华为云:华为云PB级数据库GaussDBfor-Redis揭秘第六期Feed流场景中的应用

摘要:探讨常见的 Feed 流零碎蕴含的概念、架构和挑战以及如何应用高斯 Redis 设计一个 Feed 流零碎。

本文分享自华为云社区《华为云 PB 级数据库 GaussDB(for Redis)揭秘第六期:Feed 流场景中的利用》,原文作者:高斯 Redis 官网博客。

一、背景

GaussDB(for Redis)(下文简称高斯 Redis),是华为自研的强统一、长久化 NoSQL 数据库,兼容 Redis5.0 协定。

在互联网时代,咱们日常生活充斥着 Feed 流,微信朋友圈、微博、抖音以及头条等等都在应用 Feed 流,将咱们关注的好友或感兴趣的内容及时推送给咱们,使咱们沉沦其中无法自拔,带来商业价值的晋升。接下来将和大家一起探讨常见的 Feed 流零碎蕴含的概念、架构和挑战以及如何应用高斯 Redis 设计一个 Feed 流零碎。

二、概念

Feed 流零碎从模式上是 Feed 生成者将生产的 Feed 通过存储散发零碎传递给 Feed 消费者,最终以某种展示模式。

  1. Feed:单次推送的内容。一条微博就是一个 Feed。
  2. Feed 流:由间断的 Feed 组成的信息流。
  3. 展示模式:展现模式目前次要有 Timeline 和 Rank。比方微博以 Timeline 展现。头条客户端次要以举荐 Rank 来进行展现。
  4. Feed 生产者:对于微博就是每个用户,针对头条就是举荐算法。
  5. Feed 消费者:接管 Feed 告诉的主体。
  6. 同步存储系统:这部分个别又能够分为三局部(具体实现会略有差别)。
    6.1 内容存储模块:这部分关怀 Feed 原始内容如何存储。如你发的一条微博。
    6.2 关联关系存储模块:对于微博存储的是用户的关注人和被关注人,对于头条存储的是人群(依据用户画像对所有用户进行分类)
    6.3 信箱模块:个别又可叫做消息传递模块,Feed 音讯存储到信箱,能力最终造成 Feed 流。

三、架构设计

通过上述的概念介绍,咱们来看 Feed 如何从 Feed 生产者最终流转到 Feed 消费者。

Feed 生产者创作一条内容后发到 Server 端,Server 端先将音讯内容存储到音讯存储模块,接着依据信箱模块的设计查问关系存储库将告诉信息写入信箱模块,Feed 消费者通过查问信箱获取及时音讯。

音讯存储模块:
Feed 内容个别都是半结构化数据,数据量大,须要长久化内容,逻辑上就是一个 KV 零碎,ID 到内容的映射关系。

关系存储模块:
关联关系会产生新增和删除,是一个变长的汇合,须要可能反对疾速的增删查动作,个别不须要反对 join 等简单操作。因而 NoSQL 数据库比拟适宜这类数据的存储。

信箱模块:
说到信箱模块个别大家都会探讨是采纳推模式、拉模式或推拉模式联合形式。在华为云 PB 级数据库 GaussDB(for Redis)揭秘第五期:高斯 Redis 在 IM 场景中的利用 也有过探讨。
推模式,在查问完关联关系后,将 Feed 告诉写入到每个 Feed 消费者的收件箱中,Feed 消费者查问本人的收件箱就能获取残缺的 Feed 流,告诉会写入每个须要告诉的人收件箱,写会放大。

拉模式,将 Feed 告诉写入本人的发件箱,Feed 消费者先查问关系库,而后从所有关注人的发件箱中获取 Feed 音讯后合并展现,因而收件箱被读次数和被关注人数目无关,读会放大。

推拉模式联合:针对大多数用户的写入用推模式,特定用户采纳拉模式,Feed 消费者读取时别离读取本人的收件箱和特定用户的发件箱,合并之后展现。

到底选用哪种模式,看具体业务场景和要求。

很多业务在具体实现的时候,会先将音讯写入音讯队列,一方面能够起到流量削峰的作用,另一方面能够实现一些特定的推送优化逻辑,如判断为垃圾广告或者敏感词不进行推送。

四、技术挑战

咱们首先从微信朋友圈颁布的数据来感受一下。在 2021 年 1 月 19 日,在微信公开课 Pro 上微信创始人张小龙披露微信最新数据:微信每天有 7.8 亿用户进入朋友圈,1.2 亿用户发表朋友圈。均匀每人关上浏览十几次,每天 100 亿次浏览量。若咱们想实现相似的 Feed 流零碎会有什么挑战。从存储量上来看,若用户均匀每天发送 3 次朋友圈,每条内容 1kB,一年大概 1000 亿条记录,存储容量靠近 100TB。从拜访申请次数来看,每天写入和读取 OPS 峰值至多百万级别,用户写入和读取提早都要有实时性,响应工夫至多都要在秒级内,否则用户分分钟敞开 APP。因而咱们须要一个长久化、海量存储、高吞吐、易扩大、低提早、低存储老本的分布式存储系统。

五、高斯 Redis 的劣势

5.1 高斯 Redis 简介

高斯 Redis 是华为云数据库团队自主研发且兼容 Redis5.0 协定的云原生数据库,采纳计算存储拆散架构。存储侧应用自研的存储系统 DFV,容量有限扩大、强统一、高牢靠。计算侧基于 LSM 存储引擎实现,具备极佳的写性能和读性能。利用计算拆散架构的劣势,高斯 Redis 扩容无需进行数据拷贝,实现秒级扩容,充分发挥了云原生的弹性伸缩、资源共享的劣势。

5.2 Feed 流场景如何利用高斯 Redis 劣势

针对 Feed 流场景,能够依照如下形式应用高斯 Redis:

  1. 音讯内容存储
    利用高斯 Redis 的 KV 构造即可实现,高斯 Redis 采纳存储计算拆散架构,能够轻松撑持海量数据存储及低提早拜访提早。
  2. 关联关系存储
    高斯 Redis 汇合构造或字典构造能够轻松实现关联关系的增删改查。
  3. 信箱存储
    信箱从实现上就是一个队列,反对从指定地位生产的能力。高斯 Redis 的 Stream 构造能够实现队列能力,轻松实现 Feed 流音讯读取。

5.3 高斯 Redis Feed 流实际

以下用高斯 Redis 实现一个简略的微博样例,采纳写扩散模型,用以阐明可行性。
零碎中存在四个用户,Jay、Jolin、ZhangSan、LiSi。其中 ZhangSan、LiSi 关注了 Jay,LiSi 同时关注了 Jolin。

以上实现了一个简略的微博零碎,实在零碎会比这个简单,会波及业务场景特定解决逻辑。用高斯 Redis 作为 Feed 流存储底座是比拟现实的技术选型。

六、总结

高斯 Redis 具备长久化、海量存储、高吞吐、易扩大、低提早、低存储老本等长处, 作为 Feed 流存储底座十分适合,其优异的读写性能和高级个性将会极大简化利用开发。同时,高斯 Redis 在开源 Redis 根底之上,较好均衡了性能和老本,可能广泛应用在智慧医疗、流量削峰、计数器等畛域。

七、完结

本文作者:华为云高斯 Redis 团队。
更多技术文章,关注高斯 Redis 官网博客:https://bbs.huaweicloud.com/community/usersnew/id_1614151726110813

八、参考资料

  1. 《GaussDB(for Redis)官方主页》
    https://www.huaweicloud.com/product/gaussdbforredis.html
  2. 《华为云 GaussDB(for Redis)与自建开源 Redis 的老本比照》
    https://www.modb.pro/db/42739
  3. 《华为云 PB 级数据库 GaussDB(for Redis)揭秘第一期:Redis 与存算拆散》
    https://bbs.huaweicloud.com/blogs/238584
  4. 《华为云 PB 级数据库 GaussDB(for Redis)揭秘第二期:Redis 音讯队列 Stream 的利用探讨》
    https://bbs.huaweicloud.com/blogs/245623
  5. 《华为云 PB 级数据库 GaussDB(for Redis)揭秘第五期:高斯 Redis 在 IM 场景中的利用》
    https://bbs.huaweicloud.com/blogs/249247
  6. 《feed 流拉取,读扩散,到底是啥?》
    https://cloud.tencent.com/dev…
  7. 《朋友圈微博 feed 流,推拉实际》
    https://cloud.tencent.com/dev…

点击关注,第一工夫理解华为云陈腐技术~

退出移动版