论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
云原生
›
Spring Cloud 复刻抖音推荐架构!!
Spring Cloud 复刻抖音推荐架构!!
天空闲话
论坛元老
|
3 天前
|
显示全部楼层
|
阅读模式
楼主
主题
1831
|
帖子
1831
|
积分
5493
一、引子
抖音的推荐体系是其成功的关键之一,而背后是一套复杂的微服务架构支撑着高并发和庞大的用户数据处理。每当用户刷到新的视频时,背后都有一个复杂的推荐算法在实时运行。而在这样的场景下,构建一个高效、可扩展的微服务架构是至关重要的。
本文将通过 Spring Cloud 构建一个简化版的抖音推荐体系,探讨微服务架构的设计与实践。
二、业务梳理
在正式的开发前,我们需要先对这个简化版的推荐体系所需要的功能做下梳理:
用户行为数据
推荐体系的焦点在于个性化推荐,而个性化推荐的条件是对用户行为的全面相识。用户的每一次操纵(如观看、点赞、转发、评论等)都会影响推荐结果。因此,体系需要具备以下功能:
记载用户行为数据:
记载用户在平台上与视频的交互行为(比如用户观看了哪些视频、点赞了哪些视频等)。
管理用户画像:
基于用户的汗青行为,生成用户的兴趣画像,用于推荐计算。
视频资源管理
抖音作为一个短视频平台,需要管理大量的视频资源。每个视频都有不同的标签(如范例、话题、风格等),这些标签是推荐算法的重要依据。因此,体系需要:
存储视频基本信息:
包括视频的ID、标题、标签、上传时间等。
提供视频分类:
根据视频的标签信息,将视频分类以便后续推荐。
个性化推荐
推荐体系的焦点功能就是根据用户的兴趣和视频内容的标签,生成个性化推荐列表。为了实现这一功能,体系需要:
获取用户画像和视频标签:
结合用户的兴趣画像与视频的标签,匹配用户可能感兴趣的视频。
生成推荐列表:
根据算法计算,生成个性化推荐的视频列表并返回给用户。
用户行为数据的实时处理
用户在平台上的行为是实时发生的,因此推荐体系需要能够实时处理这些行为数据,并根据最新的行为更新用户画像。为此,体系需要:
实时处理用户行为:
当用户举行某个操纵时(如点赞或观看某个视频),体系能够实时接收这些事件,并更新用户画像。
异步处理:
为了不影响用户的使用体验,行为数据的处理应只管异步化,通过消息队列等本领解耦实时数据处理与推荐服务。
通过上述的业务需求梳理,我们最终可以总结出一个简化版的推荐体系需要具备的焦点功能:
用户行为管理:
记载用户的观看、点赞等行为。
视频资源管理:
存储视频的基本信息和标签。
个性化推荐:
结合用户画像和视频标签,生成推荐列表。
实时数据处理:
处理用户行为数据,实时更新用户画像。
三、架构设计
完成了需求梳理后,我们总结了四大焦点功能,进而可以抽象出四个服务来分别完成上述功能,因此,我们可以简朴地绘制下业务架构图,如下:
图片
这里我做了一些简化:比如省略了API网关,客户端直接请求到推荐服务上获取响应。因为我们决定使用SpringCloud来搭建这个项目,所以我们的服务都注册到Eureka上,服务之间的调用则接纳Feign实现。
别的,分别使用Redis和Kafka来缓存用户画像和传递用户行为数据。
四、详细实现
通过需求梳理、技术选型、架构设计,我们已经完成了项目开发前的准备工作,现在就可以正式举行开发了。起首需要我们根据业务架构图完成项目的基础搭建。
项目搭建
使用IDEA通过maven-archetype-quickstart举行快速创建,如下:
图片
接下来通过同样的方式分别创建四大业务模块和Eureka服务模块,项目结构如下:
图片
此时,在父模块的pom.xml文件中就可以看到子模块都已经被管理起来,我们再引入SpringBoot和 SpringCloud的依靠(Ps:版本可根据喜好自行选择,我这里演示也无所谓了,就不消SpringBoot3了),如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itasass</groupId>
<artifactId>recommendation-system</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>eureka-server</module>
<module>user-service</module>
<module>video-service</module>
<module>recommendation-service</module>
<module>data-processing-service</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.boot.version>2.6.4</spring.boot.version>
<spring.cloud.version>2021.0.1</spring.cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot Dependencies-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Dependencies-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
复制代码
此时,我们就完成了项目的基础搭建,接下来开始编写各个服务的代码。
创建 Eureka 服务
各个服务都有本身的依靠需要导入,Eureka服务所需依靠如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.itasass</groupId>
<artifactId>recommendation-system</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>eureka-server</artifactId>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- Spring Boot Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Eureka Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
复制代码
导入相关依靠后,可以创建 eureka-server 模块中的主类 EurekaServerApplication,如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication
{
public static void main( String[] args ) {
SpringApplication.run(Eure
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
天空闲话
论坛元老
这个人很懒什么都没写!
楼主热帖
css过渡样式
Mysql终端Terminal操作
编程能力提升系列:1. 二维矩阵的最大 ...
【数据库】数据库课程设计一一疫苗接种 ...
C语言执行过程
Java EnumMap values()方法具有什么功 ...
罗景:连接效率优化实践
Kubernetes(K8S) Controller - Statefu ...
Cesium 案例(一) Z-Indexing Geometr ...
如何精简 Prometheus 的指标和存储占用 ...
标签云
渠道
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
鸿蒙
快速回复
返回顶部
返回列表