java - Rest API 调用可在极短的时间内从多个 API 提供商获取数据 : Example websites like makemytrip

标签 java multithreading performance rest

像 makemytrip 这样的网站会从不同的航空公司 API 提供商(如 jetairways、indigo 等)获取航类预订详细信息。

当我们访问主页时,我们会看到各个航空公司的航类预订详细信息。

因为无法缓存此信息。 假设有 10k - 20k 的航空公司 API 提供商在主页/搜索页面上显示数据,他们将如何对所有这些 api 提供商进行休息调用。

1) 每当我们访问主页/搜索页面时,他们是否会并发调用所有这些 api 提供商来获取数据?

但是考虑到池中的线程数量,这将需要时间来获取数据并将它们映射到响应对象中,这将导致页面加载时间延迟。

2)如果我们考虑将这些数据存储在Elastic Search等搜索引擎中,这甚至没有帮助,因为数据不是最新的。

即使我们想到有一个“调度程序作业”,它会对 api 提供者进行休息调用,每 5 分钟获取最新数据并将其存储在 Elastic 搜索中。这将导致在 5 分钟的跨度时间内显示陈旧的数据。

最佳答案

您可能会在第一次查询时得到某个价格,后来当您尝试购买机票时,价格通常会上涨。所以我想说聚合站点中使用了所有内容的混合。

API 由提供商进行商业销售,并且带有 SLA。因此,您可以在云(例如 AWS)上拥有强大的可扩展基础设施,并且您的 API 从快速、高度可用的数据源获取数据 - 并且您每次都能满足毫秒级 SLA。无论负载如何,AWS Lambda 函数始终尽可能快地运行。

因此,我没有发现同时访问 API、聚合结果并显示结果的问题。另外,我认为应用某种级别的缓存(无论是在聚合器端还是在提供程序端)不会有问题,特别是对于慢速 API。

客户端缓存可以通过推送通知而不是拉取来更新。因此,每当服务器数据有更新时,客户端都会复制相同的数据。这避免了运行调度程序的需要(检查 AWS SNS)。

您的问题主要关注技术而不是商业。

在线旅行社 (OTA),例如 Expedia,通过全局分销系统(例如 Sabre、Amadeus)获取大部分航类内容。大多数航空公司目前已同意在 GDS 中提供其全部内容。然后,OTA 通过航空公司、GDS 以及潜在的(尽管越来越少见)旅行者的付款来赚钱。空中内容通常通过代理模式销售,因此OTA不承担库存风险。

关于java - Rest API 调用可在极短的时间内从多个 API 提供商获取数据 : Example websites like makemytrip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49085197/

相关文章:

java - maven构建错误

c++ - 一位读者。一位作家。关于互斥量和原子内置函数的一些一般性问题

c++ - 在这种情况下,为什么 STL priority_queue 并不比 multiset 快多少?

python - Python _thread 模块中的 Lock 是什么?

C#锁单行(if语句)

javascript - 提高 UI 响应能力的技巧有哪些?

c# - 检查字符串是否仅包含 C# 中的数字的最快方法

java - 如何将一个静态 HashMap 复制到另一个静态 HashMap

Java:如何捕获在 Method.invoke 中创建的异常?

java - 关闭 Hook 与终结器方法