实时推荐算法的架构

news2024/11/24 16:49:43

1. 实时推荐算法的架构设计

  偷得浮生半日闲,跟大家一起聊一聊大家最喜欢的实时推荐算法架构,具体如图1.1,架构的详解则见下一章节《2. 实时推荐算法架构设计详解》。
在这里插入图片描述

图 1.1 实时推荐算法的架构设计

2. 实时推荐算法架构设计详解

2.1 数据源

  推荐算法的数据源主要来源于两大部分:

  • 用户行为的埋点数据(商品的曝光,点击,喜欢,收藏,转发,加入购物车等),为了数据的高效快速处理,数据存在合理的丢包(少了一条点击并不会有多大影响),但是也要追求尽量别丢,丢多了也会引起产品侧和业务侧的质疑。
  • 用交易的落库数据(商品的咨询,购买等),通常要求遵循数据库事务,即数据一条都不能丢。

2.2 数据消费和集成

  埋点数据和落库数据是技术手段上将两大类数据进行了拆分,但是在最后的数据应用侧,并不会单纯的说只用埋点数据或者说只用交易数据,因此需要根据后续投入算法计算的特征工程进行数据源消费后的数据集成;

  • 埋点数据消费:依赖于埋点系统的Infrastructure建设,一般的埋点系统会将实时数据存入消息队列如Kafka,则在下游消费时只需要将Kafka的数据进行消费即可;
  • 落库交易数据消费:一般的交易型数据落库后存在关系型数据库居多,通常是MySQL,则实时获取数据会用到通用的CDC(Change Data Capture)技术,需要找一个适配你交易型数据库的CDC技术即可,如FlinkCDC消费MySQL。
  • 数据集成:这一步依赖于特征工程的复杂度,如果特征工程较为复杂,则建议加一层Kafka做数据的集成,如果特征工程较为简单的计算,则可以直接数据源消费完后存入特征工程的存储。

2.3 特征工程数据存储

  数据消费和集成的本质,就是为了实现特征工程的计算,常见的特征向量有用户特征表,商品特征表,实时特征表等等,特征工程存储可以分为3大类:

  1. 常规数据量,实时计算处理成特征表存入MySQL,再缓存到Redis,Redis的特征表作为模型训练的input,此处可以到时候做一下压测,如果用户量和商品集打破了这个平衡,则考虑第二类处理方式;
  2. 如果压测下来Redis满足不了,则分布式NoSQL数据库或者图数据库会是不错的选择,
  • Distribute NOSQL DB (Amazon DynamoDB/Google Cloud Bigtable/Apache Cassandra):开源建议Apache Cassandra,公有云则Amazon DynamoDB还不错;

  • Graph DB(NebulaGraph):图数据库运维成本较高,选型需慎重。

但是这些DB一定要适配你的实时流计算引擎,不然数据实时计算后的存储就是跟自己过不去。

  1. 针对实时变更高频的特征特殊场景(如果有),可以直接消费完写入Redis,不建议写入MySQL再刷缓存,中间的耗能太高;

2.4 算法模型

  算法模型就是部署在算法服务器一直Running的等待特征工程输入并得出计算结果的一个或多个程序包,此处通常是用python写的一个或多个算法包,在推荐算法里面,解决的核心问题则是ReRank商品对用户的曝光排序,即将用户最喜欢的但用户自己又不知道的商品推荐给到用户,通常的算法技术有:

  • 机器学习
  • 深度学习
  • 在线学习
  • AIGC
  • ……

2.5 算法结果集存储

   算法集的结果最核心的字段就是:用户ID商品IDRank(用户对商品的喜欢排名);因此通常是存储在关系型数据库如MySQL即可,当然如果用户量和商品数特别庞大,也可以考虑存入特征工程中提到的分布式NoSQL数据库。

表2.5.1 算法结果集核心数据列
用户ID商品IDRank
1a1zAA1
1a1zBB2
6t7uCC1

2.6 算法结果集应用

   算法的最终结果集合应用,自然是将算法结果通过API透传给到客户端,客户端前端根据算法给到的用户ID商品IDRank(用户对商品的喜欢排名)给到每个用户对不同商品的瀑布流曝光,从而实现千人千面的推荐算法效果,当然为了加快查询速度,通常如果算法结果集在MySQL的话,会再MySQL和API之间加一层Redis缓存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 数据类型详解及SQL语言分类-DDL篇

在数据库开发中,选择合适的数据类型和理解SQL语言的分类是非常重要的。今天详细介绍MySQL中的数据类型,包括数值类型、字符串类型和日期类型,并解释SQL语言的四大分类:DDL、DML、DQL和DCL。 1.MySQL 数据类型 SQL语言是不区分大…

C++ 126类和对象_ 运算符重载_仿函数调用

126类和对象_ 运算符重载_仿函数调用 学习内容 仿函数调用 结果 代码 #include<iostream> using namespace std;//cout 在这里&#xff0c;没有它会报错 #include<string>//126类和对象_ 运算符重载_仿函数调用 //学习内容 //仿函数调用class MyPrint { …

【在线+sdwebui】在线免费运行stable-diffusion-webui (无需配置环境)

在线运行平台: https://platform.virtaicloud.com/gemini_web/auth/register 一、进入项目页面启动环境 项目&#xff1a;https://open.virtaicloud.com/web/project/detail/460841914028511232 1.1 点击运行 1.2 克隆环境到注册后的平台 1.3 自动适配项目最低配置的显卡 &…

Java面试题--JVM大厂篇之高并发Java应用的秘密武器:深入剖析GC优化实战案例

引言: 晚上好,Java开发者们!在高并发的现代应用中,垃圾回收器(GC)是Java性能优化的重要环节。尤其在CMS(Concurrent Mark-Sweep)GC曾经担任主角的日子里,适当的调优和优化措施至关重要。本篇文章将通过三个实际案例,探讨如何在不同场景中优化CMS GC,为你揭示Java性能…

前端如何使用Nginx代理dist网页,代理websocket,代理后端

本文将指导您如何配置Nginx以代理前后端分离的项目&#xff0c;并特别说明了对WebSocket的代理设置。通过本教程&#xff0c;您将能够实现一次性配置&#xff0c;进而使项目能够在任意局域网服务器上部署&#xff0c;并可通过IP地址或域名访问服务。 笔者建议 先速览本文了解大…

再见Figma!!新的设计,代码协作神器!【送源码】

软件介绍 Penpot 是一款专门用来帮助设计师和开发者更好地合作的软件。它可以让设计师轻松地做出漂亮的设计稿&#xff0c;还能让这些设计稿变成真正的网站或者应用的一部分。这样&#xff0c;设计师和开发者之间就不会因为沟通不畅而产生麻烦了。 Penpot 专为设计师与开发者之…

Android 下载安装配置

文章目录 Android Studio 下载安装配置1. 下载JDK2. JDK环境配置&#xff1a;3. 测试JDK是否安装成功&#xff1a;4. 下载Android Studio:5. 配置Android Studio:6. android studio提速方法1&#xff08;不行&#xff09;方法2&#xff1a;(很行&#xff09; Android Studio 下…

OpenDDS集中发现服务DCPSInfoRepo联邦机制

OpenDDS在提供DCPSInfoRepo集中发现服务的基础上&#xff0c;又提供了集中发现服务DCPSInfoRepo的联邦功能&#xff0c;实际上就是集群功能。 联邦Federation间的通信主题&#xff0c;用于Federation联邦节点间DDS对象的资源库一致性迁移&#xff0c;包括 1&#xff09;OwnerUp…

力扣热题100_图论_994_腐烂的橘子

文章目录 题目链接解题思路解题代码 题目链接 994. 腐烂的橘子 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周…

数据可视化实用干货分享

在当今的数字化时代&#xff0c;数据已成为企业决策的重要基石。然而&#xff0c;面对海量的数据&#xff0c;如何高效地理解、分析和应用这些数据&#xff0c;成为企业面临的一大挑战。数据可视化作为一种将数据转化为图形或图表的技术&#xff0c;为企业提供了强有力的支持。…

第八季完美童模全球人气总冠军【杜姗珊】至高加冕 见证星芒风采!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕&#xff0c;在盛大的颁奖典礼上&#xff0c; 全球观众网友通过现场参与和网络直播的方式&#xff0c;共同见证了新一代“模”王诞生&#xff01;在众多优秀的小超模中&#xff0c;来自上海的女孩杜姗珊从本次…

SRGAN:使用生成对抗网络对图像进行超分辨率重构

SRGAN&#xff1a;使用生成对抗网络对图像进行超分辨率重构 前言相关介绍SRGAN 的工作原理核心思想主要组件训练目标 优点缺点总结 实验环境项目地址LinuxWindows 项目结构具体用法准备数据集进行训练进行测试测试基准数据集测试单张图像测试单个视频 参考文献 前言 由于本人水…

深度剖析:Jenkins构建任务无法中断的原因及解决方案

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

20240814使用串口控制MC-105Q的机芯确认变焦

20240814使用串口控制MC-105Q的机芯确认变焦 2024/8/14 20:44 缘起&#xff1a;使用的是LVDS OUT的MC-105Q的机芯&#xff0c;最近需要查看光学/电子变焦。 打开电子变焦&#xff1a;81 01 04 06 02 ff 放大&#xff1a;81 01 04 07 02 FF 缩小&#xff1a;81 01 04 07 03 FF 串…

想要在数据治理领域脱颖而出?了解CDGA认证的重要性

CDGA认证是专注于数据治理领域的专业资格证明。 CDGA&#xff08;即认证数据治理助理&#xff09;是数据管理专家认证的一部分&#xff0c;旨在验证和展示个人在数据治理方面的专长和技巧。 下面是关于CDGA认证的详细说明&#xff1a; 1. CDGA认证的组织背景&#xff1a;DAM…

Vue.js-分析

目录 Vue.js基本概念和特性Vue.js生态系统Vue.js版本和更新Vue.js学习Vue.js进阶问题Vue.js中虚拟DOM的工作原理虚拟DOM的创建差异算法应用更新 Vue.js的组件化编程模型优势Vue 3相比Vue 2改进之处 Vue.js Vue.js&#xff08;通常简称为 Vue&#xff09;是一个开源的前端JavaS…

Python使用configparser管理配置文件

前言 在 Python 项目开发中&#xff0c;配置文件通常用于存储配置信息&#xff0c;例如数据库连接参数、日志设置、应用程序行为等。这些信息可以与代码分离&#xff0c;使得应用程序更易于维护和管理。Python 的标准库中提供了一个非常有用的模块——configparser&#xff0c…

鸿蒙AI功能开发【卡证识别控件】场景视觉化服务

卡证识别控件 介绍 本示例展示了使用视觉类AI能力中的卡证识别能力。 本示例模拟了在应用里&#xff0c;跳转卡证识别控件&#xff0c;获取到验证结果并展示出来。 需要使用hiai引擎框架卡证识别验证接口kit.VisionKit.d.ts。 效果预览 使用说明&#xff1a; 在手机的主屏…

sp eric靶机渗透测试

一、靶机下载地址 https://www.vulnhub.com/entry/sp-eric,274/ 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.145.0/24 -sn | grep -B 2 "00:0C:29:FD:57:BE" 2、端口扫描 # 使用命令 nmap 192.168.145.211 -p- -sV 3、指纹识别 # 使用命令 whatweb 192…

Cesium天空盒子(Skybox)制作(js代码)和显示

介绍 在Cesium中&#xff0c;星空背景是通过天空盒子方式&#xff08;6张图片&#xff09;来显示的&#xff0c;原生的图片分辨率太低&#xff0c;本项目用于生成天空盒子的6张图片。最终生成的6个图片大小约为500kb(每个)&#xff0c;格式为jpg&#xff0c;总共的恒星数目约为…