lastminute.com 搜索结果聚合架构的演进
背景
lastminute.com 是一个旅游解决方案平台,依赖于第三方供应商进行搜索结果的聚合。过去,整个聚合过程由一个名为 Transportation Supplier Aggregator (TA) 的单一 Java 组件处理。该组件通过多线程执行 HTTP POST 请求,向数据供应商系统发送请求并收集和处理返回的结果。
原有架构的问题
原有架构存在以下主要问题:
- 高耦合性:所有功能集中在单一组件中,导致系统难以维护和扩展。
- 可扩展性差:随着请求量的增加,系统难以高效处理高并发请求。
- 部署复杂:单一组件的部署和更新过程复杂,影响系统的灵活性。
- 资源利用率高:每个请求需要生成多个线程,且某些供应商返回的数据量高达 25 MB,导致内存和线程资源消耗巨大。
重新架构的目标
为了解决上述问题,lastminute.com 的团队决定对系统进行重新架构,主要目标包括:
- 解耦:将单一服务拆分为多个独立的微服务。
- 异步集成:引入异步消息传递机制,提高系统的响应性和可扩展性。
- 优化资源利用:减少系统的资源消耗,特别是内存和线程的使用。
新架构设计
新架构的核心改进包括:
- 微服务化:将数据供应商的集成逻辑从 TA 服务中分离出来,TA 服务仅负责编排和结果聚合。
- 消息队列:使用 RabbitMQ 作为消息服务,负责将搜索任务分发给数据供应商的搜索驱动,并接收任务完成的通知。
- 缓存存储:使用 Redis 存储供应商返回的数据,减少消息传递中的数据量。
技术实现细节
消息传递模式:采用了基于远程过程调用 (RPC) 模式的请求-响应模式。该模式使用两个消息队列:
- 第一个队列用于发送搜索任务请求,包含相关标识符和回复队列的名称。
- 第二个队列用于发送任务完成的通知,包含搜索任务消息中的相关标识符。
- 数据存储:搜索驱动服务将供应商返回的数据以规范化形式存储在 Redis 中,TA 服务在所有搜索完成通知到达后从 Redis 中获取数据。
改进效果
新架构带来了以下显著改进:
- 可扩展性:系统能够更好地处理高并发请求,提升了整体的性能和响应能力。
- 部署灵活性:微服务化使得系统的部署和更新更加灵活和高效。
- 资源利用率:通过异步消息传递和缓存机制,系统减少了线程和内存资源的消耗。
结论
lastminute.com 通过重新架构搜索结果聚合过程,成功解决了原有系统的诸多问题,提升了系统的性能、可扩展性和资源利用率。这一案例展示了在现代分布式系统中,微服务化和异步集成的重要性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。