// codeart.ru / Обзоры / Впечателения от Amazon Simple Queue Service (SQS) Форум

Впечателения от Amazon Simple Queue Service (SQS) rss подписка

Автор: Evgeniy Sergeev

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

Если сказать коротко, то обмен сообщениями через общую очередь сообщений мне бы пригодились для проектов SnappySnoop и Defaceit. Думаю, что мало кто помнит о моем проекте SnappySnoop, поэтому позволю себе немного рассказать о том что это за проект такой.

SnappySnoop — это сервис мнений и комментариев. Основная идея состоит в том, что каждый может оставить свой комментарий на любом сайте, даже если сам сайт не имеет механизмов для размещения комментариев. Реализация состоит в том, чтобы подгрузить на сайт JavaScript, который загрузит комментарии и отобразит их на сайте. Фактически все комментарии храняться на сайте SnappySnoop, а отбор нужных комментариев обеспечивается на основе полного урла страницы, на которой запущен скрипт. Не трудно понять, что серверная часть данной задачи представляет из себя самую обычную очередь.

Идея Defaceit немного другая, она заключается в том, что на Defaceit размещаются JavaScript приложения, которые могут быть модифицированы путем подгрузки небольших дополняющих скриптов (дефейсов). Чтобы лучше понять, что из себя представляет дефейс рекомендую еще раз перечитать пост про конкурс на лучший дефейс.

В виду того, что дефейсы — это обычные JavaScript программы, то они работают на стороне клиента и для того чтобы они могли обрабатывать данные, размещенные на сервере, им нужен миханизм доступа к этим самым данным. Нетрудно догадаться, что одним из вариантов серверного хранилища может быть очередь.

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

Что здесь хочется отметить. Практически для всех популярных языков (включая Erlang) существуют библиотеки, которые позволяют работать с Amazon SQS.

Для работы необходимо иметь Public и Private Secure Keys, а так же знать ункальный URL для доступа к очереди. Фактически чтение и запись в очередь может быть выполена из любой точки сети Интерент. Но внешний трафик стоит денег, в отличии от сайтов, размещенных в облаке. Последним досутп к очереди будет бесплатным (при условии что они находятся в одном датацентре с очередью сообщений).

Сами данные могут размещаться как с помощью Get, так и с помощью Post запросов. Ответ будет оформлен в виде XML документа, в котором будет содержаться информация о результатах выполнения заданной операции.

В принципе можно работать с содержимым очереди с помощью JavaScript. Но здесь есть одна проблема — ограничения безопасности самого браузера. Если очередь размещена в рамках того же домена, что и сайт на котором запущен JavaScript, то нет никаких проблем с использованием XMLHttpRequest. Мы просто отправляем Ajax запросы и получаем необходимые ответы.

Все портится когда мы выходим за рамки одного и того же домена. Здесь пока остается только один вариант взаимодейтсвия — JSONP. Т.е. ответ сервера должен быть оформлен в JSON формате, да еще быть обернутым с помощью callback функции. А как раз такого варианта Amazon SQS не предлагает. Поэтому использование очереди для кроссдоменного взаимодействия невозможен.

Еще одна особенность — это необходимость иметь свой публичный и секретный ключ, который есть только у пользователей Amazon. Т.е. писать в очередь могут только пользователи сервисов от Amazon. Правда, тут есть возможность настроить анонимный доступ, но я им не пользовался пока и на сколько там все гладко сказать не могу.

С библиотеками тоже не все так просто, есть официальные библиотеки, которые работают без нареканий, но количество языков весьма ограничено — Java, PHP, Ruby. А есть библиотеки неофициальные, которые поддерживаются сообществом неравнадушных людей. Естественно, что никто не гарантирует работоспособность последних.

Для Erlang я нашел библиотеку, которая уже давно не поддерживается и для того, чтобы начать с ней работу пришлось немного допилить код. Но в любом случае подправить код лучше, чем писать его с нуля.

В целом сервис хороший. Имеет удобные средства управления: позволяет управлять правами доступа к очереди, просматривать сообщения, удалять и добавлять очереди и т.д. Потенциально имеет устойчивость к высоким нагрузкам (проверить, естественно, не могу). Так же есть неплохая документация.

Но есть один большой недостаток, который для меня имеет решающее значение. Как я уже говорил — нельзя обращаться к очереди из браузера средствами JavaScript. Здесь, возможно, решением будет создание небольшого прокси-скрипта, который будет размещаться на моем сервере и с одной стороны получать JSONP запросы, а с другой обращаться к очереди, конвертируя результат в нужный формат. Но мне кажется, что уж проще сделать свой собственный простенький сервис сообщений, чем городить такой огород.

  1. Немного про очереди сообщений на defaceit.ru

Leave a Reply

« »