SQS по сравнению с RabbitMQ

Я должен создать очередь для обработки. Сама очередь относительно низкого объема. Могло бы быть приблизительно 1 000 записей к нему в час. Выполнение каждой задачи могло бы занять приблизительно минуту каждый и обрабатывается почти, как только объект добавляется к очереди.

Есть ли какая-либо причина, что я мог бы хотеть реализовать RabbitMQ вместо чего-то стандартного как Amazon SQS? Каковы некоторые причины, почему для приложения была бы нужна его собственная система массового обслуживания вместо чего-то как SQS?

61
задан 24 February 2015 в 05:39

1 ответ

Я на самом деле использовал обоих в коммерческой среде с разумным.

короткий ответ - то, если нет определенные угловые случаи, лучше пойти с AWS SQS. (Можно пропустить к нижней части для простой сводки)

Кодирование (Связь): RabbitMQ и AWS SQS и имеют, создают библиотеки и много примеров.

тайм-аут Видимости (SQS): Одной вещью, что предложения SQS предлагают RabbitMQ, является более широкое понятие тайм-аута видимости. В RabbitMQ, если потребитель умирает перед ним acks, сообщения отложены в очередь. Но SQS имеет более широкое понятие тайм-аута видимости, который не связывается с определенной вызывающей стороной. Таким образом, можно запустить единицу работы, установите видимость с большим тайм-аутом (до 12 часов), разъединение, имейте другой конец рабочего и ack она. В моем дизайне мы усиливаем это экстенсивно и устраненную дополнительную услугу / устройство хранения данных для управления потенциально большой 'в прогрессе' полезные нагрузки.

обработка Устаревшего закона (RabbitMQ - 'зайцем') SQS обеспечивает основное сдавание устаревшего закона, что они называют "Политикой Передиска", которая выводит сообщения в Очередь Устаревшего закона (просто другая очередь). Это является основным и только имеет понятие количества сообщения. RabbitMQ имеет Обмены Устаревшего закона, который предоставляет сообщения, продвигаемые международный DLE, когда они истекают. Но это - вид спорных как идея, "Если Вы не будете следить за своими сервисами, и сообщения истекают, то затем это приземлится в DLE". Это - небольшая победа для RabbitMQ, поскольку я нахожу что счетчик аргумента интуитивный. Почему Вы контролировали бы свою очередь и не свои службы? (В любом случае это наоборот)

администрация (SQS): нет никакого администрирования к SQS. Вы просто платите за вызовы API. Все обычные головные боли как патчи безопасности ОС/приложения, масштаб (добавляют больше узлов), диск обрабатываются командами AWS. Это - также совместимый FedRamp (для правительственного использования). Это - действительно 'установка, и забудьте' систему. То, где, поскольку RabbitMQ требует обычных патчей ОС/сервиса, AMI, кластеризации, усиления безопасности, и т.д. В то время как это чрезвычайно редко, AMI могут спуститься или иногда требовать, чтобы быть перемещенными настолько кластеризирующиеся, необходимо из поля. SQS уничтожает все те головные боли.

СТОИТ (SQS): единственный вызов API SQS может включать 'пакет, до 10 messages/256k размеров' и 'долгий опрос' могут решительно сократить расходы вниз. Кроме того, существуют стратегии как сжатие сообщений для пихания десятков (некоторое требование сотни, или больше) сообщений может быть отправлен в единственной полезной нагрузке для сокращения стоимости далее. И это - прежде чем мы будем полагать, что люди времени тратят контрольные/исправления/фиксации проблемы. SQS является также большим для 'проектов POC', как будто он простаивает, нет никакой стоимости.

FIFO (TIE): В 2016 AWS представил поддержку FIFO по дополнительной стоимости ~ вызовов API за $0.01/миллиона (0,05$ по сравнению с 0,04$ за миллион API alls - перед скидками). Можно принять решение использовать FIFO или нет. Для неFIFO мы редко видим дублирующиеся сообщения.

устройство хранения данных (SQS): AWS не взимает за устройство хранения данных, но у Вас действительно есть предел 14 дней. На RabbitMQ необходимо будет выделить, развернуть и управлять дисковым пространством, которые требуют пиковой емкости хранения плюс дополнительные буферы. Это - просто больше головных болей.

Метрики (SQS): SQS обеспечивает из метрик поля. И в то время как Вы могли добавить их к AWS, это - просто больше работы.

Локальный dev (связь): Большинству современных магазинов нравится иметь окружение. Существует несколько опций, которые позволяют докерам RabbitMQ и SQS теперь.

Высокая пропускная способность / очень большое сообщение (RabbitMQ - вид), Поскольку Вы продвигаете SQS> 1 000 запросов/секунда, задержка SQS повысится. Существует несколько стратегий обойти его. Но я нахожу, что эти случаи чрезвычайно редки, поскольку большая часть работы может быть разделена нескольким очередям. Но для этих типов случаев, где 100k/sec требуется, я думаю, что Kafka лучше. (Мы также используем Kafka на моей работе), редко иметь единицу работы, которая требует 1000 + запрос/секунда с низкой задержкой. *Посмотрите больше ниже для этого объяснения

Сводка: Если Вы собираетесь быть в AWS и готовый быть женатыми на AQS, то SQS не является никаким brainer. Но необходимо продолжать читать, поскольку существуют важные вещи рассмотреть.

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

новая стратегия позволила моим командам иметь лучшее представление того, как работа распределяется. Уведенный дни 'обновления экземпляра для большего количества загрузки'. В прошлом мы видели бы большой необъясненный скачок, который вызовет побочные эффекты к другим сервисам или просто предположил, что взгляды совокупных чисел примыкают к праву'. Теперь, когда трафик разделяется, мы на самом деле раскрыли много проблем, которые остались незамеченными прежде и могут ясно объяснить, сколько трафика идет где. И в то время как очень возможно реализовать метрики и инструменты, SQS обеспечивает все их из поля.

существуют все еще большие случаи, которыми RabbitMQ нужно серьезно рассмотреть

- Very large legacy code base that uses RabbitMQ with extensive tooling and knowledgeable support staff
- Messages that needs to be in the same work stream for > 14 days
- Very large messages that has very low latency requirements with it
- Cloud agnostic code base requirements. If you must run your code on other platforms (e.g. Azure/Google/bare metal), then SQS is not an option
- Large volume of data for a single pipeline that can't be broke up and other solutions (e.g. Kafka) are not viable. But at a super large volume, Kafka is a lot faster. While SQS will push large payloads to S3, you are now incurring additional cost.
5
ответ дан 31 October 2019 в 15:27

Другие вопросы по тегам:

Похожие вопросы: