关于程序员:华为云PB级数据库GaussDBfor-Redis揭秘第13期如何搞定推荐系统存储难题

26次阅读

共计 2773 个字符,预计需要花费 7 分钟才能阅读完成。

一、举荐偏差引发的思考

七夕过后,笔者的一个敌人遇到了尴尬事:当女友点开他的购物 APP,居然自动弹出一系列举荐:玫瑰包邮、打动哭了、浪漫小夜灯……回忆七夕那天,礼物并没有呈现,于是问题呈现了:从实招来,你送谁了?

为了帮忙友人重建信赖,笔者进行了一番技术调研:这肯定是“举荐零碎”出了偏差。

举荐零碎是一种信息过滤零碎,它可能疾速剖析海量用户行为数据,预测出用户爱好,从而进行无效举荐。在商品举荐、广告投放等业务中,举荐零碎责任重大。依据亚马逊 2019 年度报告,其 40% 的营收来自外部稳固的举荐零碎。

在本文开篇的例子中,正是因为举荐零碎问题,才导致了难堪的局面。笔者决定力挺友人,用牢靠的常识让人服气!

二、举荐零碎长什么样

通常来说,在一套成熟的举荐零碎中,分布式计算、特色存储、举荐算法是要害的三大环节,缺一不可。

上面介绍一类残缺的举荐零碎,在零碎中 GaussDB(for Redis) 负责外围的特色数据存储。该零碎也是华为云诸多客户案例中较为成熟的最佳实际之一。

第一局部:获取特色数据

–   原始数据采集  –

点赞、珍藏、评论、购买……这些行为都属于原始数据,他们随时都在产生,因而数据量宏大。经由 Kafka、Redis Stream 等流组件向上游传递,或存入数仓,期待前期提取应用

–   分布式计算  –

原始数据离散、含意含糊,无奈间接给算法应用。此时就要进行大规模的离线、在线计算,对数据加工。Spark、Flink 都是典型的大数据计算组件,其弱小的分布式计算能力是举荐零碎不可或缺的。

–   特色数据存储  –

通过加工的数据也就是特色、标签,是举荐算法所需的贵重数据源。在特定场景下,也能够称之为用户画像、物品画像。这部分数据有着重复共享、复用的价值,不仅能用于训练算法模型,还能为生产环境提供服务。

确保特色数据的牢靠存储,是举荐零碎中极为要害的一环。

第二局部:生产特色数据

–   线下模型训练   –

有了要害的特色数据,业务就能够开始训练算法模型。只有充分利用特色库,以及最新行为数据,一直打磨举荐算法,这样能力晋升举荐零碎整体程度,最终带给用户更好的体验。

–   线上推理预测   –

算法模型训练完结后,将被部署到线上生产环境。它将持续利用已有的特色存储,依据用户的实时行为进行推理,疾速预测出与用户最匹配的优质内容,造成举荐列表,并推送给终端用户。

三、举荐零碎的存储难题

很显然,“特色数据”在整个零碎中起到了要害的连接作用。因为 KV 模式的数据抽象与特色数据极为靠近,因而举荐零碎里往往少不了 Redis 的身影。

在上述零碎的计划中,数据库选型为 GaussDB(for Redis),而不是开源 Redis。起因是开源 Redis 在大数据场景下还是存在不言而喻的痛点:

1. 数据无奈牢靠存储

举荐零碎其实心愿既能应用 KV 数据库,又能释怀将数据短暂保留。但开源 Redis 的能力更侧重于数据的缓存减速,而不是数据存储。而且开源 Redis 毕竟是纯内存设计,即便有 AOF 长久化,但通常也只能秒级落盘,数据的保留并不牢靠。

2. 数据量上不去,老本下不来

波及举荐的业务往往用户体量也不会小,随着业务倒退,也会有更多的特色数据须要保留。实际上,雷同容量的内存与极速 SSD 相比,价格贵 10 倍以上都很失常。于是,当数据量达到几十 GB、几百 GB,开源 Redis 会变得越来越“烧钱”,因而个别只当做“小”缓存应用。除此之外,开源 Redis 本身 fork 问题导致容量利用率低,硬件资源有很大的节约。

3. 灌库体现不佳

特色数据须要定期更新,往往以小时或天为周期进行大规模数据灌入工作。如果存储组件不够“皮实”,大量写入造成数据库故障,将导致整个举荐零碎产生异样。这就可能造成开篇提到的难堪用户体验。

开源 Redis 抗写能力并不强,这是因为集群中有一半节点是备节点,它们只能解决读申请。当大批量写入到来时,主节点容易出问题,引发连锁反应。

实践上,架构设计并不是越简单越好,如果能够,谁不想应用一种既能兼顾特色数据 KV 类型、老本敌对、性能又有保障的牢靠数据存储引擎?

四、相见恨晚,遇见 GaussDB(for Redis)

与开源 Redis 不同,GaussDB (for Redis) 基于存算拆散架构,为举荐零碎这一类大数据场景带来要害的技术价值:

1. 牢靠存储

数据命令级落盘,在底层存储池中三正本冗余存储,真正做到了 0 失落。

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(for Redis),实现特色数据灌库、更新、提取等要害工作。

应用办法非常简单:

1)当须要读取 Hash、List、Set 构造到 Spark RDD 时,别离只用一行即可搞定:

2)而当举荐零碎进行灌库或特色数据更新时,能够按如下形式轻松实现写入:

2. Flink-Redis-Connector

Flink 这款计算引擎风行水平不亚于 Spark,它同样有成熟的 Redis 连贯计划。应用 Flink 提供的 Connector 或联合 Jedis 客户端,都可轻松实现 Flink 到 Redis 的读写操作。

以应用 Flink 统计单词频次的简略场景为例,数据源通过 Flink 加工后,便可轻松存入 GaussDB(for Redis) 中。

六、结语

大数据利用对外围数据的存储有着很高的要求, 云数据库 GaussDB(for Redis) 领有存算拆散的云原生架构,在齐全兼容 Redis 协定的根底上,同时做到了稳定性、可靠性的全面当先。面对海量外围数据存储,它还能为企业带来相当可观的老本节约。面向未来,GaussDB(for Redis) 极有后劲成为下一个大数据浪潮的新星。

七、附录

本文作者:

华为云数据库 GaussDB(for Redis) 团队

杭州 / 西安 / 深圳简历投递:

yuwenlong4@huawei.com

本文由华为云公布

正文完
 0