小红书如何实现高效推荐?解密背后的大数据计算平台架构

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 2019阿里云峰会·上海开发者大会于7月24日盛大开幕,本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货,共同探讨前沿科技趋势。本文整理自开源大数据专场中小红书实时推荐团队负责人郭一先生的精彩演讲,将为大家分享小红书大数据计算平台架构演进。

2019阿里云峰会·上海开发者大会于7月24日盛大开幕,本次峰会与未来世界的开发者们分享开源大数据、IT基础设施云化、数据库、云原生、物联网等领域的技术干货,共同探讨前沿科技趋势。本文整理自开源大数据专场中小红书实时推荐团队负责人郭一先生的经常演讲,将为大家分享小红书大数据计算平台架构演进。

开源大数据专场PPT下载

以下内容根据演讲视频以及PPT整理而成。

一、实时计算在推荐业务中的场景

1. 线上推荐流程

小红书线上推荐的流程主要可以分为三步。第一步,从小红书用户每天上传的的笔记池中选出候选集。既通过各种策略从近千万条的笔记中选出上千个侯选集进行初排。第二步,在模型排序阶段给每个笔记打分。小红书内部用户的点赞和收藏的给平台带来的价值做了一套权重的设计,通过预估用户的点击率CTR,预计点击之后的点赞、收藏和评论的概率进行打分。第三步,在将笔记展示给用户之前,选择分数高的笔记,通过各种策略进行多样性调整。
image.png

2. 推荐系统架构

下图展示了小红书推荐系统架构,红颜色表示实时操作,灰色则是离线操作。通过算法推荐之后,用户和笔记进行交互,产生用户的曝光、点赞和点击的信息,这些信息被收集之后形成用户笔记画像,也会成为模型训练的训练样本,产生分析报表。训练样本最终生成预测模型,投入线上进行算法推荐,这样就形成了一个闭环。分析报表则由算法工程师或策略工程师进行分析,调整推荐策略,最后投入线上。
image.png

3. 离线批处理

离线批处理流程如下图所示,在客户端产生用户交互和打点,打点好的数据以T+1模式更新用户笔记画像,生成报表并生成训练样本,最后进行模型训练和分析。这是小红书初级版本的离线批处理情况,整个流程都基于Hive进行处理,可以发现整个流程是非常慢的。
image.png

4.实时流处理

2018年开始小红书将离线的pipeline升级成实时的pipeline。用户一旦产生交互点击,系统会实时维护数据,更新用户笔记画像,实时产生训练样本,更新模型及生成报表。实时的流处理大大增加了开发效率。实时流处理依赖于Flink,首先用户的实时交互进入Kafka,借助Flink任务维护用户笔记画像,将其传给线上用户画像系统。相对来说,用户的笔记画像比较简单,不会存在过多的状态。而实时流处理中非常重要的场景是实时归因,它是小红书最核心的业务。实时归因是一个有状态的场景,实时归因根据打点信息产生用户的行为标签,所有实时指标和训练样本都依赖行为标签。其中,实时指标放在Click House,数据分析师和策略工程师基于ClickHouse数据进行分析。训练样本仍然落到Hive中进行模型训练。
image.png

二、实时归因

1. 实时归因数据

实时归因将笔记推荐给用户后会产生曝光,随即在小红书客户端上产生打点信息。用户笔记的每一次曝光、点击、查看和回退都会被记录下来。如下图所示,四次曝光的用户行为会产生四个笔记曝光。如果用户点击第二篇笔记,则产生第二篇笔记的点击信息,点赞会产生点赞的打点信息,如果用户回退就会显示用户在第二篇笔记停留了20秒。实时归因会生成两份数据,第一份是点击模型的数据标签,在下图中,第一篇笔记和第三篇笔记没有点击,第二篇笔记和第四篇笔记有点击,这类数据对于训练点击模型至关重要。同样,点赞模型需要点击笔记数据,比如用户点击了第二篇笔记并发生点赞,反之点击了第四篇笔记但没有点赞。时长模型需要点击之后停留的时间数据。以上提到的数据需要与上下文关联,产生一组数据,作为模型分析和模型训练的原始数据。
image.png

2. Flink Job - Session Labeler

小红书在处理实时归因原始数据时应用了Flink任务。从Kafka Source中读数据再写到另外一个Kafka Sink。Key(user_id和note_id)根据用户笔记和是否发生曝光和点击分为两个Session,Session使用Process Function API处理记录,每条记录都会记录曝光的Session和点击的Session。Session有20分钟的窗口,既在收到用户行为曝光或者点击之后,开20分钟的窗口查看是否这期间会发生曝光、点击、点赞或者停留了多少时间。Session中有状态信息,比如发生点击并点赞。系统维护用户在状态中维持的时间,检查点击是否有效。Flink窗口结束时,需要把session 中的内容输出到下游,进行分析和模型训练,同时清ValueState。
image.png

3. 实际生产需要解决的问题

在实际生产中落地Flink任务需要解决较多的问题。首先是如何对Flink进行集群管理?上了生产环境之后需要做Checkpoint,将任务持久化。以及非常重要的一点,Backfill。持久化一旦出错,需要回到过去的某个时间,重新清除错误数据并恢复数据。
Flink集群管理:小红书选择将Flink部署在 K8S集群上。在小红书看来,K8S或许是将来的趋势。
image.png

Checkpoint & State持久化:Flink 的State 分为两种,FsStateBackend和RocksDBStateBa
ckend。FsStateBackend支持较小的状态,但不支持增量的状态。在实时归因的场景中有20分钟的窗口,20分钟之内发生的所有的状态会放在内存中,定期做持久化。如果要避免这20分钟的数据丢失,RocksDBStateBackend是较好的选择,因为RocksDBStateBackend支持增量Checkpoint。
image.png

RocksDB调优:具体使用RocksDBStateBackend时依然会遇到调优问题。小红书在开始测试的时候,Checkpoint频率设的较短,一分钟做一次Checkpoint。而RocksDB每次做Checkpoint时都需要把数据从内存flash到磁盘上面,Checkpoint做的很频繁时会产生非常多的小std文件,RocksDB需要花大量时间和资源去做Compaction,把小文件和并成大文件。State本身已经比较大,假如flash不断做Compaction,磁盘I/O会成为瓶颈,最后导致产生反压上游。另一个问题是使用RocksDBStateBackend会有生成较多的MemTable。如果内存没有配置好,会导致out of memory,需要重新计算内存,调配MemTable,Parallelism和K8S point的内存。调优之后任务跑的较为稳定,这时需要把本地磁盘换成高性能的SSD,保证内存足够大。此外,每次做Checkpoint会产生性能损失。小红书选择将Checkpoint频率改成十分钟,同样可以满足生产需求,而且回填10分中的数据只需要一到两分钟。还需要注意调大RocksDB Compaction Threshold,避免频繁做小文件的Compaction。

image.png

Backfill:回填是生产中常见的场景。实际生产中如果开发者写错代码导致数据错误,则需要删除错误数据,重新跑正确代码回填正确的数据。另外,如果原本只有点赞功能,会产生有一个新的回填场景,分析用户点赞是否为有效点赞或者对其做简单的逻辑恢复。Backfill非常依赖Flink对Hive的支持,小红书一直以来的数据都存放在Hive上,所以非常期待Flink 1.9版本性能的提高,尤其对Hive的支持的提升和对批的支持的加强。
image.png

三、Red Flink实时流计算平台

1.小红书实时流计算平台及周边生态

小红书推荐系统是一个流计算的平台,同时涉及周边的生态。如下图所示,最右边是数据接入的模块,支持从客户端接入数据,同时后端的服务提供LogSDK的模块帮助业务直接接入实时计算的平台。红颜色模块是流计算平台中正在开发的模块。比如,Canal通过事务的数据库直接将订单流对接到数据平台,系统自动分析数据Schema,一旦Schema发生变化,自动重启Flink任务。左下角是基于Flink 1.8做的开发,主要增加了Latency监控,便于分析Flink堵塞的Operator,同时将Latency监控直接导出到系统中。小红书基于Flink的SQL也做了开发,实现了不同的connector。
image.png

2. 小红书Flink系统

如下图,业务方使用小红书Flink实时流计算平台时,可以选择数据目的地。比如aws-hive和rex-clickhouse表明数据需要放到Hive和ClickHouse中。然后在Schema中输入JSON或PB格式数据,平台可以自动识别Schema,同时将数据Schema转成Flink SQL ETL的命令,自动更新Flink ETL Job的任务。此外,系统会对任务进行监控,监控任务的延迟时间,有无数据丢失,如果延迟过高或有数据丢失则产生报警。
image.png

3. 平台小红书推荐预测模型的演近

2018年12月,小红书的推荐预测模型只是非常简单的Spark上的GBDT模型。后期在GBDT模型上加了LR层,后来还引入了Deep和Wide。到2019年7月,小红书推荐预测模型已经演化到了GBDT + Sparse D&W的模型。小红书主要有9个预测任务,包括click、hide、like、fav、comment、share以及follow等。其中,Click是小红书最大的模型,一天大概产生5亿的样本进行模型训练,数据量达到1T/天。
image.png

目前小红书的Red ML模型基于KubeFlow,在小红书开始做ML模型时,KubeFlow在开的社区中比较受欢迎,而且TFJob可以支持TensorFlow的分布式训练。
image.png

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
7天前
|
大数据
【赵渝强老师】大数据主从架构的单点故障
大数据体系架构中,核心组件采用主从架构,存在单点故障问题。为提高系统可用性,需实现高可用(HA)架构,通常借助ZooKeeper来实现。ZooKeeper提供配置维护、分布式同步等功能,确保集群稳定运行。下图展示了基于ZooKeeper的HDFS HA架构。
|
7天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
19天前
|
监控 API 调度
开放源代码平台Flynn的架构与实现原理
【10月更文挑战第21天】应用程序的生命周期涉及从开发到运行的复杂过程,包括源代码、构建、部署和运行阶段。
|
30天前
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
73 1
|
30天前
|
机器学习/深度学习 自然语言处理 搜索推荐
大厂 10Wqps智能客服平台,如何实现架构演进?
40岁老架构师尼恩,凭借深厚的架构功力,指导众多小伙伴成功转型大模型架构师,实现职业逆袭。尼恩的《LLM大模型学习圣经》系列PDF,从基础理论到实战应用,全面覆盖大模型技术,助力读者成为大模型领域的专家。该系列包括《从0到1吃透Transformer技术底座》《从0到1吃透大模型的基础实操》《从0到1吃透大模型的顶级架构》等,内容详实,适合不同水平的读者学习。此外,尼恩还分享了多个智能客服平台的实际案例,展示了大模型在不同场景中的应用,为读者提供了宝贵的实践经验。更多技术资料和指导,请关注尼恩的《技术自由圈》公众号。
大厂 10Wqps智能客服平台,如何实现架构演进?
|
5天前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
3天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
4天前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
14 1
服务架构的演进:从单体到微服务的探索之旅
|
3天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
20 5