Является ли Amazon SQS правильным выбором?Проблема с производительностью Rails [закрыто]

StackOverflow https://stackoverflow.com/questions/901501

Вопрос

Я близок к выпуску приложения для рельсов с общими сетевыми функциями (обмен сообщениями, стена и т. д.).Я хочу использовать какую-то фоновую обработку (скорее всего, Bj) для разгрузки задач из цикла запрос/ответ.

Это может произойти, когда пользователи приглашают друзей присоединиться по электронной почте и получают уведомления по электронной почте.

Я не уверен, следует ли мне просто помещать эти приглашения и уведомления в свою базу данных, используя модель, а затем просто обрабатывать их с помощью рабочего процесса каждые x минут, или мне следует использовать Amazon SQS, хранить сообщения и приглашения там и позволять мой работник получает его из Amazon SQS для обработки (отправки приглашений/уведомлений).

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

Что вы думаете?

Это было полезно?

Решение

В вашем заголовке указано, что у вас проблемы с производительностью Rails, но знаете ли вы это наверняка?Судя по остальной части вашего вопроса, похоже, что вы пытаетесь предвидеть возможную будущую проблему с производительностью.Единственный способ разумно справиться с проблемами производительности — запустить приложение в эксплуатацию и профилировать его.Это даст вам эмпирические данные о том, каковы реальные проблемы с производительностью.

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

Суть в том, что вы уже решили использовать фоновую обработку, и это правильное решение, учитывая, что любой вид обработки, кроме мгновенной, не входит в цикл запроса/ответа Rails, поскольку он блокирует эту обработку Rails. процесс.Если понадобится, вы всегда сможете масштабироваться с помощью Amazon позже.

Другие советы

Ваше приложение уже размещено на Amazon EC2?Я, вероятно, не стал бы переносить существующее приложение на AWS только для того, чтобы использовать SQS, но если вы уже используете инфраструктуру Amazon, SQS — отличный выбор.Вы, конечно, можете настроить свою собственную систему обмена сообщениями (например, RabbitMQ), но, выбрав SQS, вам придется беспокоиться на одну вещь меньше.

Существует множество вариантов добавления фоновой обработки в приложения Rails, например: задержанная_задание или фон_задание, но мой личный фаворит Рабочий.Это дает вам хороший уровень абстракции, который позволяет вам подключать различные фоновые исполнители без необходимости изменять фактическую реализацию ваших заданий.

Я поддерживаю Рабочая вилка, добавляющая клиент SQS.Есть некоторые недостатки (читайте комментарии или мой пост в блоге подробнее), но в целом при моем последнем запуске у нас это сработало хорошо.

Я также использовал SQS для отдельного проекта Ruby (не Rails) и в целом нашел его надежным и достаточно быстрым.Как отметил выше Джеймс, вы можете читать до 10 сообщений одновременно, так что вам обязательно захочется это сделать (мой клиент Workling SQS делает это и буферизует сообщения локально).

Я согласен с Джоном Топли в том, что не стоит слишком усложнять приложение, если в этом нет необходимости.При этом бывают случаи, когда полезно принять такое решение заранее. Ожидаете ли вы с самого начала высокую нагрузку?Вы распространяете это на существующую базу пользователей или это общедоступный сайт, который может или не может работать?

Если вы знаете, что вам с самого начала придется обрабатывать большой объем трафика, это может быть хорошим шагом.Если вы не хотите тратить деньги на использование SQS, обратите внимание на некоторые бесплатные решения для создания очередей, такие как RabbitMQ.

В настоящее время я отправляю пару миллионов сообщений в месяц через SQS, и это работает довольно хорошо.Убедитесь, что вы планируете время от времени останавливать или замедлять его, поэтому вам придется поработать над некоторыми возможностями повторных попыток и экспоненциальной задержкой.Одна из приятных особенностей заключается в том, что вы можете получать 10 сообщений одновременно, что ускоряет работу в очереди. Вы можете использовать один запрос для получения 10 сообщений и обработки их 1 к 1.

Amazon SQS — хороший сервис, за исключением тех случаев, когда важны следующие вещи:

  • Производительность
  • Юридический
  • Подтверждения и транзакции
  • Идиомы обмена сообщениями Свойства сообщения
  • Безопасность, подлинность и очередь
  • Разрешения

Если какая-либо из этих вещей важна, вам нужно взглянуть на реальный корпоративный сервис MQ, такой как StormMQ, RabbitMQ или даже onlinemq.com.

Эта серия блогов показалась мне интересной, поскольку в ней сравниваются Amazon SQS и StormMQ, не скрывая при этом никаких замечаний:http://blog.stormmq.com/2011/01/06/apples-and-oranges- Performance/

Если у вас возникли проблемы с переходом на EC2, вы можете воспользоваться другими сервисами, например onlinemq.com.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top