【问题标题】:API requests with Net::HTTP very slow in production使用 Net::HTTP 的 API 请求在生产中非常慢
【发布时间】:2016-01-19 06:32:45
【问题描述】:

我正在使用 RestClient 库通过应用程序发出 Google API 请求以获取地址。

示例请求代码-

require 'rest-client'
require 'json'

gmaps_api_href = "https://maps.googleapis.com/maps/api/geocode/json?latlng=18.56227673,73.76804232&language=ar"
response = RestClient.get gmaps_api_href
result = JSON.parse(response)['results']

这个请求在我的本地机器上运行良好,它在 1-2 秒内完成。但在生产实例上,完成一个请求需要 20 秒。

由于一些安全措施,我们不能直接访问生产实例。所以我无法找到这种延迟的精确点。 经过反复试验,我们发现

  1. 如果我们使用 CURL 发出请求,服务器上需要 1 秒
  2. 如果我们使用 Net::HTTP 发出请求,则需要 20 秒才能完成与我们观察到的 RestClient 相同。
  3. 如果我们在小型 .net 应用中使用 WebRequest 发出请求,该请求会在 1 秒内完成。

我很难区分上述观察结果。

请告诉我为什么会这样?以及我必须做哪些更改才能使其在我的 Rails 应用程序中运行?

【问题讨论】:

  • 相关问题提示我可能是您服务器上的 DNS 问题:stackoverflow.com/questions/29945204/…stackoverflow.com/questions/9939726/…
  • 谢谢乔丹!! WebRequest 在服务器上运行良好的另一件事是什么?有什么区别吗?
  • Ruby 的 Net::HTTP 和 .NET 的 WebRequest 之间肯定存在差异,正如 Net::HTTP 和 cURL 之间存在差异一样。但是,我不能说这些差异是什么。
  • 我做了相应的更改,但没有输出:-(。它仍然需要 20 秒..

标签: ruby-on-rails ruby ruby-on-rails-4 rubygems


【解决方案1】:

您使用的是 Google API 密钥吗?您的示例未显示 API 密钥的使用。如果没有,我猜你会受到谷歌的限速。在你的服务器上,你可能已经部署了这个应用程序的一个版本,它在不久前向谷歌发出了很多没有 API 密钥的请求,谷歌注意到它的限速软件可能会减慢你的请求速度那个服务器。虽然您的本地计算机过去没有向 google api 发出大量请求,但也没有受到 google 服务器的速率限制。

Google 的速率限制可能正在(现在!)对 User-Agent 给予一些关注,并且 Curl 发送的不同用户代理以某种方式规避了由 RestClient 与其用户发送的请求触发的 Google 速率限制-Agent(和 RestClient 可能在后台使用 net-http,并具有与其相同的 User-Agent)。

虽然有人希望如果您受到速率限制,您会收到“429 Too Many Requests”错误响应,而不仅仅是响应缓慢,但 RestClient 可能会向您隐藏这一点(我没有使用过 RestClient),而且我还看到了来自 Google 限速防御的一些不可预测的行为,尤其是当不在一个服务上使用 API 密钥时,该服务需要一个 API 密钥来处理除少数示例请求之外的所有请求。我看到的事情与你在那种情况下报告的情况相似。

我的猜测是您受到速率限制,因为您没有使用 API 密钥。从 Google 获取并使用 API 密钥。当您使用 API 密钥时,Google 仍然有速率限制,但它们被明确宣传(免费?每天 2500 个,每秒不超过 10 个。如果您付费,则应该提供更清晰和可预测的错误消息)超过。这就是 Google 需要 api 密钥的部分原因,因此他们可以以明确的方式可靠地限制您的速率。

https://developers.google.com/maps/documentation/geocoding/usage-limits https://developers.google.com/maps/documentation/geocoding/intro#BYB

【讨论】:

  • 我们已经订阅了额外的使用限制。在这里,使用限制不是问题。请求比我们的测试环境延迟了很多。
  • 您在大学/企业“企业”网络上吗?您的本地网络防火墙和保护措施会限制您的速率吗?
猜你喜欢
  • 2020-01-17
  • 1970-01-01
  • 2014-11-05
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2015-12-30
相关资源
最近更新 更多