Amazon Simple Queue Service (Amazon SQS) – это веб-сервис, предоставляющий доступ к очередям сообщений, в которых сообщения хранятся в ожидании обработки. С помощью Amazon SQS можно быстро создавать приложения с использованием очереди сообщений и запускать их на любом компьютере.

Amazon SQS предоставляет надежный и безопасный размещенный сервис очередей сообщений с широкими возможностями масштабирования для хранения сообщений при их передаче с одного компьютера на другой. С помощью Amazon SQS можно перемещать данные между различными компонентами распределенного приложения без потери сообщений и необходимости в постоянной доступности каждого компонента. При обмене конфиденциальными данными между приложениями можно использовать шифрование на стороне сервера Amazon SQS (SSE), интегрированное с сервисом AWS Key Management Service (KMS).

Сервис Amazon SQS позволяет создать распределенное приложение и разделить его компоненты, при этом осуществляется непосредственное взаимодействие с Amazon Elastic Compute Cloud (Amazon EC2) и другими инфраструктурными веб-сервисами AWS.

Amazon SQS предлагает два типа очередей для использования в приложениях с различными требованиями.

Стандартные очереди
По умолчанию в Amazon SQS используются стандартные очереди. Стандартная очередь обеспечивает практически неограниченное количество транзакций в секунду. Стандартные очереди гарантируют, что сообщение будет доставлено по крайней мере один раз. При этом иногда может быть доставлено несколько копий сообщения вне очереди. Это происходит из-за использования широко распределенной архитектуры для обеспечения высокой пропускной способности сервиса. Стандартные очереди обеспечивают «наилучшее из возможного» упорядочение. Это значит, что в большинстве случаев сообщения доставляются в том же порядке, в котором они были отправлены.

Очереди FIFO – новая возможность
Очереди FIFO дополняют возможности стандартных очередей. Самой важной возможностью очереди этого типа является доставка по алгоритму FIFO («первым получено – первым отправлено») и строго однократная обработка. Порядок, в котором сообщения были отправлены и получены, строго соблюдается. Сообщение доставляется однократно и остается доступным до тех пор, пока получатель не обработает и не удалит его. Дублирующие записи в очереди не появляются. Очереди FIFO также поддерживают группировку сообщений, что позволяет организовать в пределах одной очереди несколько упорядоченных потоков. В очередях FIFO имеется ограничение в 300 транзакций в секунду (TPS) на одно действие API, при этом все остальные возможности стандартных очередей сохранены.

 

Начните работать с AWS бесплатно

Создать бесплатный аккаунт
или войти в Консоль

Уровень бесплатного пользования AWS включает 1 млн запросов к Amazon Simple Queue Service (SQS).

Сведения об уровне бесплатного пользования AWS »

Сотрудники компании Capital One рассказали о том, как они используют сервис Amazon SQS для переноса основных банковских приложений в облако.

Доступ к Amazon SQS можно легко получить с помощью Консоли управления AWS, предоставляющей пользователям интерактивный веб-интерфейс для настройки и управления Amazon SQS.

Amazon SQS использует интуитивно понятный интерфейс, отличающийся простотой в использовании и высокой гибкостью. Поддерживаются следующие запросы.

Основные операции с сообщениями

  • SendMessage: отправить сообщения в конкретную очередь.
  • ReceiveMessage: получить одно или несколько сообщений из конкретной очереди.
  • DeleteMessage: удалить ранее полученное сообщение из конкретной очереди.
  • ChangeMessageVisibility: изменить тайм-аут видимости ранее полученного сообщения.

Пакетные операции с сообщениями

  • SendMessageBatch: отправить несколько сообщений в конкретную очередь.
  • DeleteMessageBatch: удалить несколько ранее полученных сообщений из конкретной очереди.
  • ChangeMessageVisibilityBatch: изменить тайм-аут видимости нескольких ранее полученных сообщений.

Стандартное управление очередью

  • CreateQueue: создать очереди для использования с вашим аккаунтом AWS.
  • ListQueues: вывести перечень существующих очередей.
  • DeleteQueue: удалить одну из очередей.
  • PurgeQueue: удалить все сообщения в очереди.

Расширенное управление очередью

  • SetQueueAttributes: управление настройками очереди, такими как тайм-аут видимости (время, в течение которого сообщения блокируются после прочтения с тем, чтобы их нельзя было прочесть снова), значение задержки или параметры очереди необрабатываемых сообщений.
  • GetQueueAttributes: получение информации об очереди, такой как тайм-аут видимости, количество сообщений в очереди или максимальный размер сообщения.
  • GetQueueUrl: получить URL-адрес очереди.
  • AddPermission: разрешить совместное использование конкретной очереди с другим аккаунтом AWS.
  • RemovePermission: запретить совместное использование конкретной очереди другому аккаунту AWS.
  • ListDeadLetterSourceQueues: список очередей, подключенных к очереди необрабатываемых сообщений

Подробнее см. в справочнике по API Amazon SQS.

Жизненным цикл сообщений, хранящихся в Amazon SQS, прост в управлении, но при этом гарантирует обработку всех сообщений.

  1. Система, которой необходимо отправить сообщение, выбирает очередь Amazon SQS и отправляет в нее новое сообщение с помощью запроса SendMessage.
  2. У другой системы, отвечающей за обработку сообщений, появляется сообщение, нуждающееся в обработке, поэтому она вызывает запрос ReceiveMessage и возвращает данное сообщение.
  3. После того как запрос ReceiveMessage вернул сообщение, оно не отвечает на другие запросы ReceiveMessage до тех пор, пока не истечет тайм-аут видимости. Этот механизм предотвращает обработку одного сообщения сразу несколькими получателями.
  4. Если система, отвечающая за обработку, успешно завершает работу с сообщением, она вызывает запрос DeleteMessage, который удаляет сообщение из очереди, чтобы никакой другой компьютер не мог обработать его. Если системе не удастся обработать сообщение, оно будет прочитано в ходе другого запроса ReceiveMessage, когда истечет тайм-аут видимости.
  5. Если вы связали очередь необрабатываемых сообщений с исходной очередью, сообщения будут перемещены в очередь необрабатываемых сообщений, когда будет достигнуто заданное максимальное количество попыток отправки.
  • Разработчики могут создавать любое количество очередей Amazon SQS с неограниченным количеством сообщений.
    • Очередь можно создать в любом регионе.
    • Сообщение может содержать до 256 КБ текста в любом формате. Каждые 64 КБ объема оплачиваются как один запрос. Например, один вызов API объемом 256 КБ оплачивается как четыре запроса.
    • Сообщения можно отправлять, получать или удалять пакетами размером до 10 сообщений или до 256 КБ. Стоимость пакета равна стоимости одного сообщения, благодаря чему клиенты, использующие пакетную обработку, смогут извлечь из SQS дополнительную выгоду.
    • Для отправки сообщений объемом более 256 КБ можно применять расширенную клиентскую библиотеку Amazon SQS для Java, которая использует сервис Amazon S3 для хранения текстов сообщений.  Ссылка на текст сообщения посылается с использованием SQS.
    • Длинные опросы снижают объемы избыточных запросов, что позволяет снизить издержки и получать новые сообщения как можно скорее. Если очередь пуста, длинные опросы способны до 20 секунд ждать получения следующего сообщения. Стоимость длинных опросов равна стоимости обычных запросов.
    • Сообщения можно оставлять в очереди на срок до 14 дней.
    • Поддерживается одновременная отправка и чтение сообщений.
  • После получения сообщение блокируется на время обработки. Этот механизм предотвращает обработку одного сообщения сразу несколькими компьютерами. Если обработка сообщения завершится неудачно, блокировка истечет, и сообщение снова станет доступным. Если приложению необходимо больше времени для обработки сообщения, тайм-аут блокировки можно динамически изменять с помощью операции ChangeMessageVisibility.
  • Разработчики могут безопасно открыть общий доступ к очередям Amazon SQS как для анонимных, так и для конкретных аккаунтов AWS. Общий доступ к очередям можно ограничить по IP-адресам и времени суток.
  • НОВАЯ ВОЗМОЖНОСТЬ! Благодаря шифрованию на стороне сервера (SSE) обеспечивается защита содержимого сообщений в очередях Amazon SQS с помощью ключей, управляемых сервисом AWS Key Management Service (AWS KMS). Как только Amazon SQS получает сообщения, SSE шифрует их. Сообщения хранятся в зашифрованном виде. Amazon SQS расшифровывает сообщения только тогда, когда они отправляются авторизованному получателю.
  • Дополнительно используя сервис Amazon Simple Notification Service (SNS), разработчики могут распределять идентичные сообщения в несколько стандартных очередей SQS. При таком распределении сообщение, опубликованное в теме SNS, доставляется параллельно в несколько стандартных очередей SQS.  Используя распределение, разработчики могут создавать приложения, использующие преимущества параллельной асинхронной обработки.  Например, разработчики могут публиковать сообщение в теме каждый раз, когда загружается новое изображение.Независимые процессы, каждый из которых читает отдельную очередь, могут выполнять распознавание изображений, создавать их миниатюры и сохранять метаданные об изображениях. Сервис SNS в настоящее время не поддерживает упорядочивание по алгоритму FIFO, поэтому распределение сообщений в очереди FIFO не поддерживается.
  • Разработчики могут обрабатывать зависшие сообщения (сообщения, которые не были успешно обработаны потребителем) с помощью очередей необрабатываемых сообщений. Если максимальное количество попыток получения сообщения превышено, сообщение перемещается в очередь необрабатываемых сообщений (DLQ), связанную с исходной очередью. Разработчики могут настроить отдельные процессы для очереди DLQ, чтобы проанализировать и понять причину «зависания» сообщений. Очереди DLQ должны быть того же типа, что и исходные очереди (стандартные или FIFO).

Очереди сообщений Amazon SQS можно использовать совместно с другими сервисами AWS, такими как Redshift, DynamoDB, RDS, EC2, ECS, Lambda и S3, что позволяет повысить масштабируемость и надежность распределенных приложений. Ниже приведено несколько распространенных схем использования.

  • Рабочие очереди: разъединить компоненты распределенного приложения, которые могут не выполнять одинаковый объем работы одновременно.
  • Буферные и пакетные операции: расширить масштабируемость и надежность архитектуры, а также выровнять временные всплески объемов без потери сообщений или увеличения задержек.
  • Выгрузка запросов: убрать медленные операции из маршрутов интерактивных запросов за счет добавления запроса в очередь.
  • Распределение: используйте SQS с сервисом Simple Notification Service (SNS), чтобы параллельно доставлять идентичные копии сообщения в несколько очередей.
  • Приоритет: для установления приоритета процессов используйте отдельные очереди.
  • Масштабируемость: так как для работы с очередями сообщений используются несвязанные процессы, скорость отправки или приема сообщений легко увеличить – нужно просто добавить еще один процесс.
  • Гибкость: если отказывает часть вашей системы, не требуется останавливать всю систему. Очереди сообщений разделяют компоненты вашей системы, и если процесс, читающий сообщения из очереди, дал сбой, то сообщения по-прежнему могут добавляться в очередь и будут обработаны, как только работа системы будет восстановлена.

Использование данного сервиса регламентируется пользовательским соглашением об использовании Amazon Web Services.