lastminute.com 使用 RabbitMQ 和 Redis 的微服务提升搜索可扩展性

lastminute.com 搜索结果聚合架构的演进

背景

lastminute.com 是一个旅游解决方案平台,依赖于第三方供应商进行搜索结果的聚合。过去,整个聚合过程由一个名为 Transportation Supplier Aggregator (TA) 的单一 Java 组件处理。该组件通过多线程执行 HTTP POST 请求,向数据供应商系统发送请求并收集和处理返回的结果。

原有架构的问题

原有架构存在以下主要问题:

  1. 高耦合性:所有功能集中在单一组件中,导致系统难以维护和扩展。
  2. 可扩展性差:随着请求量的增加,系统难以高效处理高并发请求。
  3. 部署复杂:单一组件的部署和更新过程复杂,影响系统的灵活性。
  4. 资源利用率高:每个请求需要生成多个线程,且某些供应商返回的数据量高达 25 MB,导致内存和线程资源消耗巨大。

重新架构的目标

为了解决上述问题,lastminute.com 的团队决定对系统进行重新架构,主要目标包括:

  1. 解耦:将单一服务拆分为多个独立的微服务。
  2. 异步集成:引入异步消息传递机制,提高系统的响应性和可扩展性。
  3. 优化资源利用:减少系统的资源消耗,特别是内存和线程的使用。

新架构设计

新架构的核心改进包括:

  1. 微服务化:将数据供应商的集成逻辑从 TA 服务中分离出来,TA 服务仅负责编排和结果聚合。
  2. 消息队列:使用 RabbitMQ 作为消息服务,负责将搜索任务分发给数据供应商的搜索驱动,并接收任务完成的通知。
  3. 缓存存储:使用 Redis 存储供应商返回的数据,减少消息传递中的数据量。

技术实现细节

  1. 消息传递模式:采用了基于远程过程调用 (RPC) 模式的请求-响应模式。该模式使用两个消息队列:

    • 第一个队列用于发送搜索任务请求,包含相关标识符和回复队列的名称。
    • 第二个队列用于发送任务完成的通知,包含搜索任务消息中的相关标识符。
  2. 数据存储:搜索驱动服务将供应商返回的数据以规范化形式存储在 Redis 中,TA 服务在所有搜索完成通知到达后从 Redis 中获取数据。

改进效果

新架构带来了以下显著改进:

  1. 可扩展性:系统能够更好地处理高并发请求,提升了整体的性能和响应能力。
  2. 部署灵活性:微服务化使得系统的部署和更新更加灵活和高效。
  3. 资源利用率:通过异步消息传递和缓存机制,系统减少了线程和内存资源的消耗。

结论

lastminute.com 通过重新架构搜索结果聚合过程,成功解决了原有系统的诸多问题,提升了系统的性能、可扩展性和资源利用率。这一案例展示了在现代分布式系统中,微服务化和异步集成的重要性。

阅读 26
0 条评论