速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

基于 RabbitMQ 和 Redis,美版“携程”网使用微服务提升搜索扩展性

作者:Rafal Gancarz

  • 2024-02-11
    北京
  • 本文字数:1053 字

    阅读完需:约 3 分钟

基于 RabbitMQ 和 Redis,美版“携程”网使用微服务提升搜索扩展性

lastminute.com 的团队将单个服务分解为多个服务,并引入异步集成来重新构建了搜索结果聚合流程。他们的开发人员使用 RabbitMQ 进行消息传递,使用 Redis 存储来自数据供应商的结果。改进后的架构有了更强的可扩展性和可部署性,资源占用率也有所下降。

lastminute.com 平台在平台的旅行解决方案搜索聚合流程中使用的是第三方供应商。过去,他们使用一个称为运输供应商聚合器 (TA) 的单个 Java 组件封装了整个聚合过程。具体来说,该组件在内部生成许多线程来执行对数据供应商系统的 HTTP POST 请求,并随后在可用时收集和处理结果。


初始搜索结果聚合架构(来源:lastminute.com 技术博客)


lastMinute.com 团队发现,之前这个聚合流程架构存在耦合度高、扩展性差、部署复杂、资源利用率高等问题。lastMinute.com 的产品工程师 Giuseppe Pinto 解释了在该架构中观察到的资源利用率挑战:

该系统每天必须处理大约 5000 万个请求 [...],这意味着每秒大约 600 个请求(这里还是按日常流量算出来的数字;但在某些情况下,流量甚至可能会增加一倍)。值得注意的是,每个单独的请求都会生成 N+1 个线程来实现系统的目标。每个线程负责处理来自供应商的完整响应,在某些情况下,一个 HTTP 响应就封装了一个旅行解决方案,大小达到 25 兆字节之多。总之,就线程和内存使用而言,它是高度资源密集型的。

开发人员选择了分解 TA 服务,并将其中的数据提供者集成逻辑移至独立的微服务中,同时让 TA 服务专注于编排和结果聚合工作。新架构引入了 RabbitMQ 作为消息传递服务,它负责将搜索任务分派给数据提供者搜索驱动程序,并将任务完成通知从搜索驱动程序传递回聚合服务。

TA 服务和搜索驱动程序之间的交互采用了远程过程调用(RPC)模式,基于更通用的请求 - 答复模式。该模式需要两个消息队列,第一个用于发送搜索任务请求,包含相关标识符和回复队列的名称;第二队列传送搜索任务完成通知,包含来自搜索任务消息的相关标识符。聚合服务跟踪待处理的搜索任务,并使用相关标识符来匹配分派的搜索任务和接收到的完成通知。



新的搜索结果聚合架构(来源:lastminute.com 技术博客)

在新设计中,搜索驱动程序服务在发送回 TA 服务的通知消息中不包含数据提供商返回的旅行解决方案数据。相反,它们以标准化形式将数据存储在 Redis 缓存中,一旦所有搜索完成通知到达,TA 服务就会从 Redis 获取这些数据。

原文链接:

lastminute.com Improves Search Scalability Using Microservices with RabbitMQ and Redis (https://www.infoq.com/news/2024/01/lastminute-search-rabbitmq-redis/)

2024-02-11 08:0040057

评论

发布
暂无评论
发现更多内容

【项目场景】请求数据时测试环境比生产环境多花了1秒是怎么回事?

威哥爱编程

Java 数据库 JavaEE

【喜报】矩阵起源在2024年中国创新创业大赛斩获多个奖项!

MatrixOrigin

AI 大底座 创新创业大赛

Web3 游戏周报(11.03 - 11.09)

Footprint Analytics

链游

离散元仿真技术加速工业自动化发展,助力企业数字化转型

Altair RapidMiner

制造业 仿真 DEM altair 离散元

悦数图数据库 v5.0 及悦数 RAG 正式发布:引领标准化,激发新动能

最新动态

Astherus:基于真实收益,唤醒 LRT 赛道的第二春

股市老人

项目管理平台哪个好?9款优质系统推荐

爱吃小舅的鱼

项目管理 项目管理工具 项目管理软件

【JIT/极态云】技术文档--聚合表

武汉万云网络科技有限公司

Metasploit Pro 4.22.5-2024102801 发布下载,新增功能简介

sysin

Metasploit

NFTScan | 11.04~11.10 NFT 市场热点汇总

NFT Research

NFT\ NFTScan

CachedThreadPool线程池设计/场景案例/性能调优/场景适配(架构篇)

肖哥弹架构

Java 并发编程 高并发

赛事转播权怎么拿?从版权获取到直播平台开发全流程揭秘

软件开发-梦幻运营部

如何用Redis高效实现点赞功能?用Set?还是Bitmap?

左诗右码

ETLCloud支持的数据处理类型包括哪些?

RestCloud

数据库 数据处理 ETL 数据集成

如何成为优秀的项目管理者

爱吃小舅的鱼

项目管理

redisson内存泄漏问题排查

快乐非自愿限量之名

Java JVM 内存

Greenplum 可观测最佳实践

观测云

greenplum

2024项目管理平台推荐:9个值得关注的工具

爱吃小舅的鱼

如何制定有效的项目资金管理策略?

爱吃小舅的鱼

项目管理 审计 项目资金

权限系统:一文搞懂功能权限、数据权限

EquatorCoco

大数据 架构 权限

破解低效数字化:JNPF打造数字商业新基建

不在线第一只蜗牛

低代码 数字化

借助 1688 拍立淘 API 接口,解锁以图找货的无限可能

tbapi

图片搜索商品接口 1688拍立淘接口 以图识货接口

火山引擎边缘云项目管理部荣获 PMI 年度杰出 PMO 奖

火山引擎边缘云

项目管理 边缘计算 PMO #项目管理

怎么绘制服务蓝图?10个服务蓝图模板盘点推荐!

职场工具箱

职场 画图软件 在线白板 画图 服务蓝图

VMware Tanzu CLI 1.5.0 - VMware Kubernetes 发新版的命令行工具

sysin

Kubernetes Tanzu

释放创作潜力!Flux 模型现已集成至 ComfyUI,快来体验!

MatrixOrigin

数据库 AI 大底座 AI 图像生成

MatrixOne v2.0.0 release note

MatrixOrigin

数据库 矩阵起源 MO

深入理解Java对象结构

不在线第一只蜗牛

Java C#

HCL AppScan Standard 10.7.0 发布下载,新增功能介绍

sysin

AppScan

如何提升产品经理的项目管理能力

爱吃小舅的鱼

项目管理 产品经理

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

梦笔生花

机器人 ROS2 UDRF

基于 RabbitMQ 和 Redis,美版“携程”网使用微服务提升搜索扩展性_微服务_InfoQ精选文章