免规则采集器列表算法(华为云数据库GuassDB:推荐系统偏差引发的思考(组图))
优采云 发布时间: 2022-02-14 05:11免规则采集器列表算法(华为云数据库GuassDB:推荐系统偏差引发的思考(组图))
作者:华为云数据库 GuassDB (for Redis) 团队
一、关于推荐偏差的思考
七夕节过后,笔者的一位朋友遇到了一件尴尬的事情:女友点击他的购物App,自动弹出一连串推荐:玫瑰免运费、感动哭、浪漫夜灯……回首往事七夕那天,礼物没有出现,所以问题来了:从真正的把戏中,你送的是谁?
为了帮助朋友重建信任,笔者进行了一些技术研究:这一定是偏离了“推荐系统”。
推荐系统是一种信息过滤系统,可以快速分析海量用户行为数据,预测用户偏好,做出有效推荐。在产品推荐、广告投放等业务中,推荐系统肩负重任。
在本文开头的示例中,正是推荐系统问题导致了尴尬的场景。作者决定以可靠的知识支持朋友和说服人们!
二、推荐系统长什么样
一般来说,在一个成熟的推荐系统中,分布式计算、特征存储和推荐算法是三个关键环节,缺一不可。
下面介绍一个完整的推荐系统,其中GaussDB(for Redis)负责核心特征数据的存储。该系统也是众多华为云客户案例中较为成熟的最佳实践之一。
第 1 部分:获取特征数据
点赞、采集、评论、购买……这些行为都是原创数据,随时发生,数据量巨大。它通过Kafka和Redis Stream等流组件向下游传递,或者存储在数据仓库中,等待以后提取和使用。
原创数据是离散的、模糊的,算法不能直接使用。这时,需要进行*敏*感*词*的离线和在线计算来处理数据。Spark和Flink是典型的大数据计算组件,其强大的分布式计算能力对于推荐系统来说是不可或缺的。
处理后的数据,即特征和标签,是推荐算法的宝贵数据源。在某些场景下,也可以称为用户画像或物品画像。这部分数据具有重复共享和重用的价值。它不仅可以用来训练算法模型,还可以为生产环境提供服务。
确保特征数据的可靠存储是推荐系统中极其关键的部分。
第二部分:消费特征数据
有了关键的特征数据,业务就可以开始训练算法模型了。只有充分利用特征库和最新的行为数据,不断打磨推荐算法,才能提升推荐系统的整体水平,最终给用户带来更好的体验。
算法模型训练完成后,将部署到线上生产环境。它将继续利用现有的特征存储,根据用户的实时行为进行推断,快速预测出与用户最匹配的优质内容,形成推荐列表,推送给终端用户。
三、推荐系统的存储问题
显然,“特征数据”在整个系统中起着关键的链接作用。由于 KV 形式的数据抽象与特征数据非常接近,Redis 在推荐系统中往往是不可或缺的。
上述系统方案中,数据库选用的是GaussDB(for Redis),而不是开源的Redis。究其原因,开源 Redis 在大数据场景中仍然存在明显的痛点:
1. 数据无法可靠存储
推荐系统其实是希望使用KV数据库,并且可以放心的将数据长期存储。但开源 Redis 的能力更侧重于数据缓存加速而不是数据存储。而且,开源的Redis毕竟是纯内存设计。即使有 AOF 持久化,通常也只能在几秒钟内放到磁盘上,数据存储也不可靠。
2. 数据量上不去,成本上不去
涉及到推荐的业务往往规模不小,随着业务的发展,需要保存的特征数据也会越来越多。事实上,同样容量的内存比极速SSD贵10倍以上是正常的。所以当数据量达到几十GB或者几百GB的时候,开源的Redis会越来越“烧钱”,所以一般只作为“小”缓存使用。此外,开源 Redis 本身的分叉问题导致容量利用率低,对硬件资源造成极大浪费。
3. 水库灌溉效果不佳
特征数据需要定期更新,*敏*感*词*的数据注入任务往往需要数小时或数天才能完成。如果存储组件不够“瘦”,大量写入会导致数据库故障,进而导致整个推荐系统出现故障。这可能会导致开头提到的尴尬用户体验。
开源的 Redis 不是很抗写。这是因为集群中有一半的节点是备用节点,只能处理读取请求。当大批量写入到来时,主节点容易出现问题,造成连锁反应。
理论上,架构设计越复杂越好。如果可能的话,谁不想使用一个可靠的数据存储引擎,可以兼顾KV类型的特征数据,性价比高,性能有保障?
四、认识 GaussDB(用于 Redis)
与开源Redis不同,GaussDB(for Redis)基于存储和计算分离,为推荐系统等大数据场景带来关键技术价值:
1. 可靠存储
数据以命令级别放在磁盘上,三份冗余存储在底层存储池中,真正做到了零丢失。
2. 降本增效
高性能持久化技术+细粒度存储池,帮助企业降低数据库使用成本75%以上。
3. 抗写能力强
多线程设计+所有节点可写,抗写能力强,足以应对Spark库填充和实时更新的压力。华为云企业级数据库GaussDB(for Redis)提供稳定可靠的KV存储能力,是推荐系统核心数据的绝佳选择。
五、完美连接,实现想存就存的自由
事实上,在 Spark 后端访问 Redis 已经成为主流方案,使用 Flink 从 Redis 中提取维表也很常见。它们还都提供了用于访问 Redis 的连接器。GaussDB(for Redis)完全兼容Redis协议,用户可以随时快速创建实例和访问服务。
1. Spark-Redis-Connector
Spark-Redis-Connector完美实现了Spark RDD、DataFrame到GaussDB(for Redis)实例中String、Hash、List、Set等结构的映射。用户可以使用熟悉的 Spark SQL 语法轻松访问 GaussDB(用于 Redis),完成特征数据填充、更新、提取等关键任务。
如何使用它非常简单:
1)当你需要将Hash、List和Set结构读取到Spark RDD时,只需要一行就可以完成:
2)而推荐系统在填库或者更新特征数据的时候,可以很方便的写成如下:
2. Flink-Redis-Connector
Flink这个计算引擎和Spark一样流行,也有成熟的Redis连接方案。使用 Flink 提供的 Connector 或者结合 Jedis 客户端,可以轻松完成 Flink 到 Redis 的读写操作。
以使用 Flink 统计词频的简单场景为例。数据源经过 Flink 处理后,可以很方便的存入 GaussDB(用于 Redis)。
六、结束语
大数据应用对核心数据的存储要求很高。ApsaraDB for GaussDB(for Redis)具有存储和计算分离的云原生架构。在完全兼容Redis协议的基础上,在稳定性和可靠性上也实现了整体领先。. 面对海量核心数据存储,也能为企业带来可观的成本节约。面向未来,GaussDB(for Redis)具有成为下一波大数据浪潮新星的巨大潜力。