亮网络解锁器,解锁网络数据的无限可能 了解详情
写点什么

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

评论

发布
暂无评论

Java Web(六)Servlet

浅辄

javaWeb Servlet 11月月更

综合实验 配置三层 热备 生成树 ospf 和 rip 以及他们之间的重分发等将内网 全通

初学者

网络 11月月更

湖仓一体电商项目(八):业务实现之编写写入ODS层业务代码

Lansonli

湖仓一体电商项目 11月月更

算法题学习---链表中倒数最后k个结点

桑榆

算法题 11月月更

混沌工程实践

星际行者

透过Net5.5G的棱镜,运营商可以见未来,见机遇

脑极体

探知数字化研发2 - 企业架构篇

薛飞

研发管理 数字化 企业构架

Zebec Chain有望成为公链赛道新兴生力军,地平线计划持续进击

EOSdreamer111

灰度发布设计

星际行者

京东面试题:ElasticSearch深度分页解决方案

小小怪下士

Java 程序员 ES

对苹果产品一个非常好的评价

星际行者

设计模式之美-面向对象对比面向过程有哪些优势?面向过程过时了吗?

GalaxyCreater

设计模式

极客时间运维进阶训练营第三周作业

9527

Testbench 的编写与应用

智趣匠

Verilog 11月月更 testbench

AIOps

星际行者

Java Web(七)Request&Response

浅辄

javaWeb Request Response 11月月更

MySQL事务底层原理和MVCC机制

海风极客

MySQL 数据库 MVCC 11月月更

玩转子网划分和超网汇聚

海风极客

网络 子网划分 11月月更 超网汇聚

【C语言】enum 枚举类型

謓泽

11月月更

动态路由协议二

初学者

动态路由 11月月更

为什么大家都喜欢使用宝塔面板?

源字节1号

微信小程序 软件开发

深入理解客户端篇之OkHttp

邱学喆

websocket 任务调度 连接池 OkHttp3

Pod 运行时调试

星际行者

混沌工程

星际行者

SpringMVC+Mybatis整合的增删改查

石臻臻的杂货铺

spring mybatis 11月月更

Zebec Chain有望成为公链赛道新兴生力军,地平线计划持续进击

鳄鱼视界

湖仓一体电商项目(七):业务需求和分层设计及流程图

Lansonli

湖仓一体电商项目 11月月更

Zebec Chain有望成为公链赛道新兴生力军,地平线计划持续进击

股市老人

SQL语句对基本表的修改表结构和数据完整性

乔乔

11月月更

湖仓一体电商项目(六):大屏可视化工具腾讯云图

Lansonli

湖仓一体电商项目 11月月更

CSS学习笔记(六)

lxmoe

CSS 前端 学习笔记 11月月更

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