1

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

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

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

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

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

2)如果我们考虑将这些数据存储在弹性搜索等搜索引擎中,这甚至无济于事,因为数据不是最新的。

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

4

2 回答 2

1

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

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

因此,我看不到同时访问 API、聚合结果并显示它的问题。此外,我认为应用某种级别的缓存(无论是在聚合器端还是在提供者端)都没有问题,尤其是对于慢速 API。

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

您的问题主要集中在技术而不是业务上。

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

于 2018-03-12T07:16:03.860 回答
0

事实上,这个问题有一些解决方案。这取决于数据和变量。我将解释一些可能的结果,但当然不是全部。
在你的情况下,第二个选项不太可能,因为你有很多变量,比如日期和位置,返回与否等等。但在其他类似的问题中,它可能很有用。

1 - 并发调用

第一种可能性是对所有给定的 API 进行并发调用,然后显示结果。
如果较长的请求持续 5 秒,则所有请求将同时发送,5 秒后您将收到响应。
想象一下:你加载页面并且没有结果,有一个加载器或类似的东西。在加载程序加载期间,向其服务器发出的 AJAX 请求正在从所有网站获取结果。
加载所有结果后,它们将显示在页面上。

2 - 编译数据

另一种可能性是使用与搜索引擎相同的技术,加载数据并编译它们。
每 5 分钟(例如)向每个网站发送一个请求并存储到数据库中。因此,当您请求页面时,数据已经在数据库中。

对于像 MakeMyTrip 这样的网站来说,这个选项很难实现,因为位置很多,日期很多,而且不可能加载所有数据。

于 2018-03-03T14:48:34.817 回答