Laravel 和 SQS - 一个请求中的多个连接
Laravel and SQS - Several connections in one request
我有一个 Laravel 应用程序 (iOS API) 可以将数据推送到 SQS 以在后台进行处理。根据请求,我们需要向 SQS 派遣 1 到 4 个作业。例如:
向SQS派发作业,由Worker处理:
- 用于连接到套接字服务 (Pusher)
- 用于连接到 Apple 的 APNS 服务(推送通知)
- 用于将数据发送到 Loggly 以进行基本的集中请求记录
- 用于将分析数据存储在 SQL 数据库中(暂时)
问题是,我们可能有像 "chat" 这样的功能,就服务器处理而言,这是一个非常轻的请求,但是它需要连接到 SQS 三次才能发送:
- 1) 套接字推送到所有设备
- 2) 分析处理
- 3) 集中请求/错误记录
总的来说,这些连接最终使其余请求花费的时间增加了一倍或三倍。 IE。 POST 到 /chat
可能需要大约 40-50ms,但是对于 SQS,它需要更像 100 - 120ms
]
我应该以不同的方式处理这个问题吗?有没有办法将这些批处理到 SQS,这样我们只需要连接一次而不是 3 次?
正如 Michael 在评论中建议的那样,一种方法是使用 sendMessageBatch 请求向 一个队列 发送最多 10 条消息。当您使用多个队列时,也许即使您没有使用,也有另一种方法。
如果您可以将所有不同的消息视为同一个元素,即向任意接收者发出操作通知,您会发现自己处于扇出模式中。这是一种常用的模式,其中多个接收者需要对单个消息、单个操作进行操作。
尽管 AWS SQS 本身不支持它,但结合 AWS Simple Notification Service,您实际上可以实现相同的目的。 Jeff Barr 不久前(2012 年)写了一篇关于使用 SNS 和 SQS 的扇出设置的文章 short blog post。它归结为向 SNS 发送通知,这将触发消息发布到多个 SQS 队列。
如果有人好奇,我发布了一个MIT包来批量发送:)
https://packagist.org/packages/atymic/laravel-bulk-sqs-queue
它在后台使用异步和 sendMessageBatch
。
我有一个 Laravel 应用程序 (iOS API) 可以将数据推送到 SQS 以在后台进行处理。根据请求,我们需要向 SQS 派遣 1 到 4 个作业。例如:
向SQS派发作业,由Worker处理:
- 用于连接到套接字服务 (Pusher)
- 用于连接到 Apple 的 APNS 服务(推送通知)
- 用于将数据发送到 Loggly 以进行基本的集中请求记录
- 用于将分析数据存储在 SQL 数据库中(暂时)
问题是,我们可能有像 "chat" 这样的功能,就服务器处理而言,这是一个非常轻的请求,但是它需要连接到 SQS 三次才能发送:
- 1) 套接字推送到所有设备
- 2) 分析处理
- 3) 集中请求/错误记录
总的来说,这些连接最终使其余请求花费的时间增加了一倍或三倍。 IE。 POST 到 /chat
可能需要大约 40-50ms,但是对于 SQS,它需要更像 100 - 120ms
我应该以不同的方式处理这个问题吗?有没有办法将这些批处理到 SQS,这样我们只需要连接一次而不是 3 次?
正如 Michael 在评论中建议的那样,一种方法是使用 sendMessageBatch 请求向 一个队列 发送最多 10 条消息。当您使用多个队列时,也许即使您没有使用,也有另一种方法。
如果您可以将所有不同的消息视为同一个元素,即向任意接收者发出操作通知,您会发现自己处于扇出模式中。这是一种常用的模式,其中多个接收者需要对单个消息、单个操作进行操作。
尽管 AWS SQS 本身不支持它,但结合 AWS Simple Notification Service,您实际上可以实现相同的目的。 Jeff Barr 不久前(2012 年)写了一篇关于使用 SNS 和 SQS 的扇出设置的文章 short blog post。它归结为向 SNS 发送通知,这将触发消息发布到多个 SQS 队列。
如果有人好奇,我发布了一个MIT包来批量发送:) https://packagist.org/packages/atymic/laravel-bulk-sqs-queue
它在后台使用异步和 sendMessageBatch
。