Подтвердить что ты не робот

Выбор между очередями служб .NET Service Bus и Azure Queue Service

Просто быстрый вопрос относительно приложения Azure. Если у меня есть несколько ролей Web и Worker, которые должны быть связаны, в документации говорится, что вы используете службу очереди Azure.

Однако, я только что прочитал, что новая .NET Service Bus теперь также предлагает очереди. Они выглядят более мощными, поскольку они предлагают гораздо более подробный API. Хотя .NSB выглядит более интересно, у него есть несколько проблем, из-за которых я опасаюсь использовать его в распределенном приложении. (например, "Истечение очереди"... если я не могу гарантировать, что очередь будет возобновлена ​​вовремя, я могу потерять все это!).

Кто-нибудь имел опыт использования любой из этих двух технологий и мог дать какие-либо советы о том, когда выбрать один из них.

Я подозреваю, что пока служебная шина выглядит более мощной, так как мой вариант использования действительно позволяет только роли Web/Worker взаимодействовать друг с другом, что служба очереди Azure - это то, что мне нужно. Но я просто действительно ищу подтверждение об этом, прежде чем прогуливаться в угол: -)

Спасибо заранее.

ОБНОВЛЕНИЕ

Прочитали о двух системах в перерыве. Это defo выглядит так, как сервисная шина .NET более конкретно предназначена для интеграции систем, а не для обеспечения надежной системы обмена сообщениями общего назначения. Очереди Azure распределены и настолько надежны и масштабируемы таким образом, что очереди NNB не являются и поэтому более подходят для кода, размещенного внутри самого Azure.

Спасибо за ответы.

4b9b3361

Ответ 1

Я бы порекомендовал вам придерживаться Azure Queues для общения между ролями веб-и рабочих. Использование очередей - это официальный и санкционированный способ общения между процессами Azure, и я искренне сомневаюсь, что вы запрограммируете себя в угол. Сервис-шина (AppFabric) имеет более высокие накладные расходы и, хотя она действительно хороша для общения с внешними приложениями, может оказаться не оптимальной для быстрых и простых сообщений в вашем приложении Azure.

Ответ 2

Очереди хранения и служебная шина

Вот разбивка некоторых различных соображений, которые я имел в этом вопросе.

Доступность

С тех пор, как в ноябре прошлого года в результате отказа от хранилища Azure обещала, что они никогда не будут снова внедрять код во все регионы, он встроил его в систему, чтобы сделать его невозможным. https://azure.microsoft.com/en-us/blog/final-root-cause-analysis-and-improvement-areas-nov-18-azure-storage-service-interruption/

Вот что говорит msdn о доступности:

Если вы уже используете Azure Storage Blobs или Tables, и вы начинаете использовать очереди, вы гарантируете доступность 99,9%. Если вы используете Blobs или Tables с очередями служебной шины, у вас будет более низкая доступность.

Azure Queues предназначены для поддержки развязки компонентов приложения для повышения масштабируемости и допуска для отказов.

Разработка

Лично мне комфортно с API-интерфейсами хранения и уже есть необходимость в его хранилище blob в других областях большинства приложений. В очередях хранения используется тот же самый sdk, что и ячейки памяти. Очереди Azure обеспечивают единую и согласованную модель программирования в очередях, таблицах и блоках BLOB

Стоимость

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

Похоже, что есть некоторые инструменты для контроля затрат для служебной шины, которые вы могли бы использовать, если бы вам пришлось начинать вести бюджет для запуска вашего приложения. Я попытался сломать потенциальные расходы на очереди хранения ниже:). Он выходит менее чем на сто баксов в месяц на более чем 40 000 очередей в час для GRS. Сгруппировавшись с остальными нашими расходами на хранение, я не вижу выгоды для сосредоточения внимания на сокращении расходов здесь. (Пропускная способность одинакова для обоих и отменяет себя при сравнении)

Цены на хранение

Вы получаете неограниченные свободные очереди и операции - вы платите за место

  • предположим, что размер сообщения 30 КБ в среднем
  • Предположим, что 1000K в MB не 1024
  • Предположим, вы не ударите градуированную цену выше 1 ТБ

30K/1 сообщение * 1 TB/1000000000K * $.095/1 GB * 1000GB/1 TB = $0.00000285/сообщение для первого TB использования

1 сообщение /~ 30K * 1000000000K/1 TB = 33333333 сообщений в ТБ

33333333 сообщений * $0.00000285/message = ~ $95 долларов за первый ТБ

распространяемый в течение месяца, мы можем делать около 40 000 сообщений в час с этим 1-м ТБ

Цены на сервисную шину

  • 10 баксов в месяц базовая цена
  • оплата за операцию (любой вызов api - op) - добавить очередь/получить очередь/контролировать очередь/и т.д.
  • вы получаете 12,5 миллионов бесплатных опций/месяц
  • заплатить за миллион операций после этого

Трудно оценить использование здесь, но 100 миллионов операций стоят 80 баксов в месяц

Пакетный прием

Хранение может содержать до 32 сообщений, указывая количество сообщений при получении сообщений, в то время как служебная шина позволяет клиенту очереди отправлять несколько сообщений в одну операцию отправки.

Таким образом, хранение является пакетным, а служебная шина - пакетной.

Мониторинг

Azure Queues позволяют вам получить подробный журнал всех транзакций, выполняемых в очереди, а также агрегированные показатели. Такая поддержка не выходит из строя с Service Bus - но, вероятно, можно найти готовое решение где-то.

Экспедиция

В служебной шине есть функция автоматической переадресации, в которой отсутствуют очереди хранения.

автоматическая пересылка позволяет тысячам очередей автоматически пересылать свои сообщения в одну очередь, из которой приложение-получатель потребляет сообщение. Вы можете использовать этот механизм для обеспечения безопасности, потока управления и изоляции хранилища между каждым издателем сообщений.

Дубликаты

Функция обнаружения дублирования, поддерживаемая очередями Service Bus, автоматически удаляет повторяющиеся сообщения, отправленные в очередь или тему, в зависимости от значения свойства MessageID.

Сообщения очереди хранения могут дублироваться без предупреждения.

Metadata​​h2 >

Service Bus дает вам 2 части заголовка сообщения + тело. Это очень полезная функция для инфраструктуры, развернутой во всем мире. Позвольте вам украсить ваши сообщения такими вещами, как имя региона и идентификатор экземпляра. Сообщения очереди - это простые строки. С другой стороны, очереди хранения Azure обеспечивают поддержку произвольных атрибутов, которые могут быть применены к описанию очереди, в виде пар имя/значение. Таким образом, вы можете украсить сообщение в Service Bus и украсить очередь очередями хранения

Гарантия доставки

Сервис-автобус предлагает At-Most-Once и At-Least-Once, в то время как очереди предлагают только доставку по крайней мере один раз. Это может ограничить нашу возможность использовать очереди, если одновременные подписчики будут проблемой.

Производительность

Лазерные очереди хранения обеспечивают задержку в 10 мс (в центре обработки данных), в то время как временная шина службы 20-25 мс. Сервис-шина предлагает длительный опрос, который будет даже лучше, чем 10 мс, если у вас есть потребность в нем.

Безопасность

В очередях хранения используется первичная/вторичная общая клавиша, а служебная шина обеспечивает RBAC через Active Directory с помощью роли отправителя/получателя/администратора.

ссылки

Ответ 4

Как я понимаю, на служебной шине (как было) есть очереди на некоторое время, но они не гарантируют, что вы получите сообщение - bon chance!

Ответ 5

Лазерные очереди очередей совпадают, потому что ваш случай использования остается основным с простым интерфейсом Get/Put/Peek на основе REST.

Недавно обновленная документация была обновлена ​​(05/21/2015), и она точно описывает использование одного или другого, а также общие функции (поддержка транзакций, размер очереди и сообщения, время для жизни,... ):

https://azure.microsoft.com/en-us/documentation/articles/service-bus-azure-and-service-bus-queues-compared-contrasted/