Amazon web services API网关是否引入了显著的延迟?

Amazon web services API网关是否引入了显著的延迟?,amazon-web-services,amazon-ec2,lambda,aws-lambda,aws-api-gateway,Amazon Web Services,Amazon Ec2,Lambda,Aws Lambda,Aws Api Gateway,我正在试图找出我通话中的延迟是从哪里来的,请让我知道这些信息是否可以以更清晰的格式呈现 一些背景:我有两个系统——系统A和系统B。我手动(通过Postman)命中系统A上的一个端点,该端点调用系统B上的一个端点。 系统A托管在EC2实例上 当系统B托管在API网关后面的Lambda函数上时 通话延迟为125毫秒 当系统B托管在 EC2实例,呼叫延迟为8毫秒 当系统B运行时 托管在API网关后面的EC2实例上 电话是100毫秒 因此,我的假设是,API网关与Lambda函数配合使用时,延迟会增

我正在试图找出我通话中的延迟是从哪里来的,请让我知道这些信息是否可以以更清晰的格式呈现

一些背景:我有两个系统——系统A和系统B。我手动(通过Postman)命中系统A上的一个端点,该端点调用系统B上的一个端点。 系统A托管在EC2实例上

  • 当系统B托管在API网关后面的Lambda函数上时 通话延迟为125毫秒
  • 当系统B托管在 EC2实例,呼叫延迟为8毫秒
  • 当系统B运行时 托管在API网关后面的EC2实例上 电话是100毫秒
因此,我的假设是,API网关与Lambda函数配合使用时,延迟会增加。有人能确认是否是这种情况吗?如果是的话,API网关做了什么使延迟增加了这么多?有什么办法吗?谢谢大家!

在直接情况下(#2)您是否使用SSL?8ms对于SSL是非常快的,尽管如果它在AZ中,我认为这是可能的。如果您没有在那里使用SSL,那么使用APIGW将在客户端和CloudFront之间引入一个安全的TLS连接,这当然会造成延迟损失。但是对于安全连接来说,这通常是值得的,因为延迟仅在初始建立时出现

一旦一路建立了连接,或者当API具有中等、持续的容量时,我预计APIGW的平均延迟会显著下降。不过,在建立新连接时,您仍然会看到~100毫秒的延迟

不幸的是,您正在描述的用例(EC2->APIGW->EC2)现在不是很好。由于APIGW位于CloudFront之后,因此它针对世界各地的客户机进行了优化,但当客户机在EC2上时,您将看到额外的延迟

编辑:
当添加Lambda时,您只看到一个小的惩罚的原因是APIGW已经有很多与Lambda的已建立连接,因为它是一个具有少量IP的单一端点。APIGW中的实际开销(与连接无关)应类似于Lambda开销。

从Amazon支持部门获悉:

使用API网关,需要从客户端转到API网关, 也就是说,离开专有网络,出去上网,然后再回来 到您的VPC转到其他EC2实例,然后返回API 网关,这意味着再次离开VPC,然后返回到您的 首先是EC2实例

因此,预计会有额外的延迟。降低成本的唯一方法 延迟是为了添加API缓存,而API缓存只有在 如果您请求的内容是静态的,而不是 不断更新。当 项已从缓存中删除,需要从系统中提取, 但这将降低大多数电话

所以我想延迟是正常的,这是不幸的,但希望不是我们必须不断向前处理的事情

这可能不完全是原始问题所要求的,但我将添加一条关于CloudFront的评论

根据我的经验,CloudFront和API网关平均每个HTTPS请求都会增加至少100毫秒,甚至更多

这是因为为了保护API调用的安全,API网关在其所有组件中强制SSL。这意味着,如果您在后端使用SSL,您的第一个API调用将必须协商3次SSL握手:

  • 客户端到云端
  • CloudFront到API网关
  • 到后端的API网关
  • 这些握手超过100毫秒的情况并不少见,这意味着对非活动API的单个请求可能会看到超过300毫秒的额外开销。CloudFront和API网关都试图重用连接,因此在大量请求中,您可能会看到每个调用的开销仅接近初始SSL握手的成本。不幸的是,如果您正在从web浏览器进行测试,并针对尚未投入生产的API进行单个调用,您可能不会看到这一点

    在同一讨论中,最终澄清了“大量请求”应该是什么,以实际看到连接重用:

    此外,当我指的是大的时候,我应该在规模上稍微精确一点。来自单个源的1000个请求可能看不到显著的重用,但是每秒来自多个源的1000个请求的API肯定会看到我提到的结果

    不幸的是,虽然不能给出确切的数字,但在接近每秒100个请求之前,您不会看到任何显著的连接重用

    请记住,这是2016年中后期的一条主线,应该已经有了一些改进。但根据我自己的经验,这种开销仍然存在,并且到2018年为止,在一个简单的API上执行2000 RPM的负载测试仍然会给我带来超过200毫秒的额外延迟


    资料来源:

    有趣的观察。我有一个关于可能原因的理论,但需要一些信息来测试它。为了确认,API网关实例与系统A位于同一区域,系统A是EC2实例——正确吗?哪个地区?对“System A”计算机上的API网关端点地址主机名执行
    nslookup
    ,并在注释中提及您在响应中得到的IP地址。这些地址在许多API网关终结点之间共享,因此在此处显示它们不会暴露任何敏感信息,只要您不提及您的终结点主机名。VPC终结点应节省一些延迟: