写点什么

基于 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:0049333

评论

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

干掉Session?这个跨域认证解决方案真的优雅!

沉默王二

Spring Boot

2021年中国收藏玩具行业市场洞察分析

易观分析

盲盒 潮玩

数据系统提供商极道科技加入龙蜥社区

OpenAnolis小助手

Linux 开源 数据系统

java培训应该怎么学习才能找合适的工作

@零度

JAVA开发 培训学习

云原生多云应用利器 -- Karmada 控制器

Daocloud 道客

Kubernetes 云原生 多云管理 Karmada

联通实时计算平台演进与实践

Apache Flink

大数据 flink 开源 编程 实时计算

大数据培训_文科生的你到底适不适合学习编程

@零度

大数据开发 培训学习

NFT盲盒商城游戏系统开发技术

薇電13242772558

NFT

“碳中和”背后的创新科技!

青云技术社区

云计算 碳中和

CorelDRAW2022最新版图形套件更新功能

茶色酒

CorelDRAW 2022

面试突击26:如何正确停止线程?

王磊

面试

徐徐春风迎3月,月度更文活动准点发车啦!

InfoQ写作社区官方

3月程序媛福利 3月月更 热门活动

数据可视化大屏 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

一文带你看懂HarmonyOS应用上架

HarmonyOS开发者

HarmonyOS 应用开发

Android技术分享| 【Android 自定义View】多人视频通话控件

anyRTC开发者

android 音视频 移动开发 视频通话 自定义view

Elastic 与 AWS 和解、英伟达 660亿 收购 ARM 失败|2月开源月报

腾源会

开源 腾源会

web前端培训_哪些学习方法对零基础比较有用

@零度

前端开发 培训学习

vivo全球商城全球化演进之路—多语言解决方案

vivo互联网技术

架构 后端 服务器

C++学习网站

C语言与CPP编程

c++

22.04 LTS爆料现场 - UKUI 3.1带你开启“寻光”之旅

优麒麟

Linux 开源 优麒麟 UKUI

融云 IM 在 Electron 平台上的设计实践

融云 RongCloud

Python 中 base64 编码与解码

AlwaysBeta

Python 程序员 编程语言 base64

集合阿里云、达摩院、平头哥相关技术的HaaS,官宣出书啦!

博文视点Broadview

Java中停止线程的3种方式

CRMEB

星环 KunDB 2.2 发布,为高并发事务与查询混合的业务系统提供一个新选择

星环科技

数据库

用好这28个工具,开发效率爆涨|云效工程师指北

阿里云云效

云计算 阿里云 云原生 研发工具 研发

Android包体积优化上篇- 资源混淆优化

百度Geek说

百度 前端 后端 优化 包体积

基于STM32+ESP8266+华为云设计的智能家居控制系统

DS小龙哥

物联网 智能硬件 stm32 3月日更

云原生时代,政企混合云场景IT监控和诊断的难点和应对之道

华为云开发者联盟

微服务架构 混合云 华为云Stack IT监控 SDN网络

跨团队协作:提高团队生产力的 7 种策略

小炮

团队管理 知识管理 团队协作 办公效率

用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

梦想橡皮擦

Python 3月月更

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