高并发推荐系统架构设计-1 基本介绍

简介: 【5月更文挑战第5天】推荐系统是信息过滤工具,通过处理物料数据和行为日志,运用预处理、特征工程、算法模型学习用户兴趣,实现个性化推荐。在线架构包括AB分流、多路召回、模型排序和业务规则重排序。旧版线上架构由C++编写的API和engine服务组成,HTTP请求经SLB、Nginx、FastCGI到达服务程序,召回和排序服务处理推荐。存在并发瓶颈问题。

推荐系统的基本架构

推荐系统本质上是一个信息过滤装置,用来在数以万计的海量内容中,筛选出最符合用户兴趣的那部分内容。

基于推荐系统,用户可以发现自己感兴趣的内容,从而提高体验。平台可以自动发现高价值的内容,从而提高效率,并且带来收益。

一个通用的推荐系统架构,就是以物料数据和行为日志为输入,基于预处理以及特征工程之后,得到相应的特征数据,再应用一些算法和模型,来学习特征数据中的隐含知识,最后根据这些隐含知识,来实现精准的个性化推荐。这其中包含了离线计算部分以及线上部分。
2024-05-06-20-40-57-image.png

推荐系统的Online架构才是真正处理用户请求的服务。当用户的请求到来时,首先经过AB分流模块,在这里对用户的某些特征,应用哈希算法来进行分流,再对分流后的用户应用不同的动态配置,这主要是为了支持不同策略间的对比实验。然后是多路召回阶段,根据用户的某些特征,在多个召回服务以及redis中,并发地获取数据。召回地数据经过滤去重后,就得到了本次推荐的粗略结果。再对这个结果基于模型排序,就得到了基于用户兴趣的个性化推荐结果。最后,基于特定的业务规则,再进行一次重排序。

旧版本线上架构的并发瓶颈问题

2024-05-06-20-51-43-image.png

旧版本的线上架构如上图所示,主要分为API服务和engine服务,均使用C++编写。API服务主要实现两个接口,一个是推荐feed接口,一个是获取详情接口。recall服务是召回服务,predict服务是模型排序服务。

当http请求到来的时候,首先经过SLB到达一台ECS,然后经过本机上部署的Nginx,转化成FastCGI协议,到达服务程序。Feed流推荐接口,依赖后续的几个服务,但是详情接口只是从redis里取数据。

注册中心选型

注册中心选型类似于其他中间件选型,要考虑的因素非常多。比如说中间件成熟度、社区活跃度、性能等因素。相比之下,注册中心更加关注 CAP 中选 CP 还是选 AP 的问题。

C:Consistency,数据一致性

A:Availability,服务可用性

P:Partition-tolerance,分区容错性

CAP 理论告诉我们,一个分布式系统不可能同时满足数据一致性、服务可用性和分区容错性这三个基本需求,最多只能同时满足其中的两个。——来自《深入浅出分布式原理》

简单来说,选择 CP 就是选了一致性和分区容错性,而选择 AP 就相当于选了可用性和分区容错性。

看上去 P 分区容错性是肯定要选的,那么剩下的就是选 C(一致性) 还是选 A(可用性) 了。那么你要先理解在注册中心选型里面,一致性和可用性究竟哪个更加重要?标准答案是可用性,也就意味着 CP 和 AP 你应该选 AP。

前面我们讨论了客户端容错,那么显然在选择 AP 的情况下,客户端就可能拿到错误的可用节点列表。如果客户端将请求发到错误的可用节点上,就会出现错误,此时客户端自然可以执行容错,换一个可用节点重试。

所以我们要抓住关键词客户端容错进行回答。

在注册中心选型上,重要的是 CAP 原理中应该选择 AP,比如说 Eureka,又或者 Nacos 启用 AP 模式。

万一你公司并没有使用 AP 模型的注册中心,比如说用了 CP 模型的 ZooKeeper,那么你就可以进一步解释,关键词是体量小。

我司之所以用 ZooKeeper,主要是因为我司体量小,集群规模也不大,ZooKeeper 虽然不是 AP 的,但是在这种体量下也够用了。不过我也尝试在公司内部推动看能否换一个中间件,比如说用 Nacos 的 AP 模式。

目录
相关文章
|
16天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
1月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
1月前
|
缓存 负载均衡 网络协议
高并发架构的CDN知识介绍
本文详细介绍了网络请求过程,特别是大型网站架构中DNS和CDN的作用。通过一张常用架构图,文章解释了从客户端请求到服务器响应的全过程,包括DNS解析、负载均衡、CDN加速等关键环节,帮助读者深入了解高并发架构的设计原理和优化方法。
91 1
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
4月前
|
存储 缓存 负载均衡
高并发系统架构的设计挑战与应对策略
【8月更文挑战第18天】高并发系统架构设计是一项复杂而重要的任务。面对性能瓶颈、稳定性与可靠性、并发控制和可扩展性等挑战,开发人员需要采取一系列有效的策略和技术手段来应对。通过负载均衡、缓存技术、数据库优化、异步处理、并发控制、弹性设计及监控与调优等手段,可以设计出高性能、高可用和高可扩展性的高并发系统架构,为用户提供优质的服务体验。
|
4月前
|
消息中间件 搜索推荐 UED
Elasticsearch 作为推荐系统后端的技术架构设计
【8月更文第28天】在现代互联网应用中,推荐系统已经成为提高用户体验和增加用户粘性的重要手段之一。Elasticsearch 作为一个高性能的搜索和分析引擎,不仅能够提供快速的全文检索能力,还可以通过其强大的数据处理和聚合功能来支持推荐系统的实现。本文将探讨如何利用 Elasticsearch 构建一个高效且可扩展的推荐系统后端架构,并提供一些具体的代码示例。
322 0
|
5月前
|
开发者 Sentinel 微服务
高并发架构设计三大利器:缓存、限流和降级问题之降级策略中的有限状态机的三种状态切换的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之降级策略中的有限状态机的三种状态切换的问题如何解决
|
5月前
|
监控 应用服务中间件 nginx
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx的并发连接数计数的问题如何解决
|
5月前
|
应用服务中间件 nginx 缓存
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Nginx作为前置网关进行限流问题如何解决
|
5月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决