【问题标题】:How to reduce connection latency with AWS SQS?如何使用 AWS SQS 减少连接延迟?
【发布时间】:2015-07-22 01:31:48
【问题描述】:

使用 AWS SDK 连接到 AWS SQS 时,似乎有明显的延迟。

在启动服务时消费消息并不那么重要,因为在第一次连接上延迟 3-7 秒后,消息开始以良好的速度流动 -

但是,发布消息时这是一个大问题。例如,由于与 AWS 的连接正在等待发布消息,因此用户 Web 请求需要额外几秒钟才能完成。这违背了发送消息以将等待时间推迟到后台作业的目的。

DNS 解决了这个问题吗?联网?还是 AWS SQS 设置?我的网络应用程序不在 AWS 网络中,不确定这是否有问题。

简单发布消息代码:

$aws = \Aws\Common\Aws::factory(/* array with connection settings */);
$client = $aws->get('Sqs');
$queue = $client->getQueueUrl(['QueueName' => $queue]);

// This takes 3 - 5 seconds every time its called.
$res = $this->client->sendMessage([
    'QueueUrl' => $queue['QueueUrl'],
    'MessageBody' => json_encode($request)
 ]);

【问题讨论】:

  • 总会有一些延迟,你不能做太多。因为它,我使用豆茎
  • 我想我会切换到 Beanstalkd ......我们需要一个简单的队列,我们​​可以从多个工人那里消费。谢谢。

标签: php apache amazon-web-services amazon-sqs


【解决方案1】:

通过引入 VPC Endpoints for SQS 服务,您可以减少延迟问题以及与连接相关的任何问题,因为 AWS 内部使用 AWS PrivateLink 或简单地说 AWS 内部网络骨干网在您的 VPC 和实例之间建立连接和数据传输SQS 比使用传统互联网。它也很容易设置,而且不会造成破坏性更改,因为它只是将 SQS 端点的 DNS 名称(如 sqs.eu-central-1.amazonaws.com)解析为私有 IP。如果由于配置更改或任何其他原因导致私有链接出现问题,则 AWS 会自动解析为通常的公共 IP(使用互联网)

您可以在这里找到更多详细信息:AWS SQS service endpoint

【讨论】:

    【解决方案2】:

    帮助我减少 SQS 延迟的一个技巧是直接使用队列 URL,而不是从 API 构建它。同样使用 http 而不是 https 会显着降低延迟。对我来说,这几乎是 20 毫秒的影响。

    当然,您可能会在安全性和可移植性之间进行权衡,但如果考虑性能,这可能会有所帮助。

    【讨论】:

      【解决方案3】:

      在我们的使用过程中,SQS 的延迟非常低。但是,我们的逻辑在 EC2 实例上运行。

      很可能,您的服务器和 SQS 之间存在显着延迟。在物理上更靠近您的服务器的区域中使用 SQS,或者将您的应用程序的逻辑移到 EC2 或 Lambda 上。

      我建议您在进行迁移之前编写一个简单的测试应用程序,以排除业务逻辑中的问题。

      【讨论】:

      • 你是对的。尽管我的服务器速度很快,但它们不在 EC2 内,但存在某种延迟。迁移到 EC2 暂时不是一个选择,但这是正确的答案。我打算将队列移动到我的网络(Beanstalkd)。对 RabbitMQ 的体验非常糟糕,所以会尝试 Beanstalkd。我们的队列采用适配器模式,因此切换轻而易举。
      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2018-02-17
      • 2019-05-25
      • 1970-01-01
      • 2011-01-16
      • 2018-04-10
      • 2020-08-14
      相关资源
      最近更新 更多