2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

评论

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

3分钟快速搞懂Java的桥接方法,Java多态实现原理解析

Java 程序员 后端

双维度第一!百度智能云领衔中国“AI+工业互联网”市场领导者阵营

百度大脑

人工智能 百度

6种新方法帮你提高Java学习能力,mysql教程入门到精通pdf

Java 程序员 后端

谈一谈区块链项目使用的数据库LevelDB

Regan Yue

区块链 leveldb 11月日更

网络安全:一次艰难的WAF绕过

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

阿里P6面试官:Redis如何实现分布式锁?锁过期了怎么办?

Java高级开发

redis Java、

2021版最新!字节跳动3面+腾讯6面一次过,java高级特性面试题

Java 程序员 后端

50道Java面试常问的基础知识,虽是基础但是避坑之路可得小心谨慎

Java 程序员 后端

2021年Java面试题抢先看,够全!中篇(1),Java视频课资源

Java 程序员 后端

2021年目前最新上千道Java面试题,刷完你不进大厂谁进大厂

Java 程序员 后端

2021版阿里Java亿级并发设计手册:基础+数据库,linux服务器开发需要的技术

Java 程序员 后端

2021秋招必刷题:Redis+Mybatis,java使用教程答案

Java 程序员 后端

2021年最新基于Spring Cloud的微服务架构分析,mysql面试笔试题

Java 程序员 后端

OpenYurt 与 FabEdge 集成验证——云边数据面通信初试

阿里巴巴云原生

阿里云 云原生 边缘计算 openyurt FabEdge

2021毕业的Java应届生,面试需要掌握哪些技能,才能收割offer

Java 程序员 后端

2021年第一波福利已送达!献上“独家全新,netty框架工作原理

Java 程序员 后端

2021年高频Java面试题集锦(含答案),华为java面试视频直播

Java 程序员 后端

2021技能大赛云计算赛项先电2,java基础入门课后答案清华大学出版社

Java 程序员 后端

Flink企业级优化全面总结(3万字长文,15张图)

大数据老哥

5年Java经验字节社招:半月3次面试,成功拿到Offer,大厂Mysql高频面试题

Java 程序员 后端

2021最新支付宝4面+美团4面+拼多多四面面试总结,狂刷200道数据结构与算法

Java 程序员 后端

2021最新整理美团面经分享:999页Java面试宝典+技术知识点总结(1)

Java 程序员 后端

网易云音乐音视频算法的 Serverless 探索之路

阿里巴巴云原生

阿里云 Serverless 云原生 实践案例 合作伙伴

30岁,转行学编程靠谱吗?,java银行面试的问题

Java 程序员 后端

30天熬夜苦学这本Java后端架构设计精讲,大厂三面架构问题so easy

Java 程序员 后端

如何将字符串截取成一个集合

卢卡多多

内容合集 11月日更

2021年Java面试题抢先看,够全!中篇,rebbitmq教程

Java 程序员 后端

2021年最新版阿里、腾讯、美团300道Java初级,你掌握了多少?

Java 程序员 后端

2021春招总结,面了阿里,腾讯,做Java程序员真的没有春天吗

Java 程序员 后端

2021最新整理美团面经分享:999页Java面试宝典+技术知识点总结

Java 程序员 后端

2021阿里大牛最新发布:Java高频面试题和核心技术(已涨薪6K

Java 程序员 后端

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