Очереди против Таблиц в [закрытых] системах обмена сообщениями

16
задан Brian Tompsett - 汤莱恩 14 September 2016 в 13:46
поделиться

5 ответов

Фраза удары, каждый раз полностью зависит от того, чем Ваши требования были для начала. Конечно, не попытка биться каждый раз для всех.

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

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

то, Где очередь сообщений сияет, - когда

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

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

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

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

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

34
ответ дан 30 November 2019 в 15:21
поделиться

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

самые большие преимущества являются a.) это легче, (b., это - лучший журнал аудита, потому что у Вас есть другие таблицы для присоединения к, c.), если Вы знаете инструменты базы данных действительно хорошо, их легче использовать, чем инструменты Message Queue, d.) обычно немного легче настроить test/dev среду в контексте, который уже существует для Вашего приложения (если то же знакомство применяется).

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

IMPE, это так же надежно, disconnectable, и можно преобразовать, если этому нужно более масштабируемый.

9
ответ дан 30 November 2019 в 15:21
поделиться
  1. Данные постоянно хранятся на таблице. Я видел так многих Java (jms) приложения, которые освобождают или исчезают сообщения на их пути к неперехваченным исключениям или другим ошибкам.

    , Который реализация JMS? Sun продает надежную очередь, которая не может потерять сообщения. Возможно, Вы просто купили дрянной JMS-совместимый продукт. MQ IBM чрезвычайно надежен, и существуют библиотеки JMS для доступа к нему.

  2. Очереди склонны заполняться. Устройство хранения данных дб фактически бесконечно, вместо этого.

    Ummm... Если Ваша очередь заполняется, она кажется, что что-то повреждается. Если Ваши приложения отказывают, это не хорошая вещь, и очереди имеют мало общего с этим. Если Вы купили действительно плохую реализацию JMS, я вижу, где Вы могли бы быть недовольны ею. Это - конкурентоспособный рынок. Найдите лучший диспетчер очереди. JCAPS Sun имеет действительно хороший диспетчер очереди, раньше очередь сообщений SeeBeyond.

  3. Таблицы легкодоступны, в то время как необходимо использовать esotic инструменты для чтения из очереди.

    , Который не соответствует моему опыту. К таблицам получают доступ через это специфический "другой язык" (SQL), и требует, чтобы я знал об отображениях структуры от таблиц до объектов и отображениях типа данных от VARCHAR2 для Строкового представления. Далее, я должен использовать некоторый слой доступа (JDBC или ORM, который использует JDBC). Это кажется очень, очень сложным. К очереди получают доступ через MessageConsumers, и MessageProducers, использующий простой, отправляет и получает.

8
ответ дан 30 November 2019 в 15:21
поделиться

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

  • Проигрывающие сообщения к неперехваченным исключениям? Это - едва отказ очереди сообщений. Приложения, которые Вы используете, плохо спроектированы. Они удаляют сообщения из очереди, прежде чем обработка завершится. Они не используют транзакции или журналирование.
  • Очереди сообщений заполняются, в то время как устройство хранения данных DB "фактически бесконечно"? Вы говорите, как будто управление дисковым пространством было чем-то, чего не потребовали базы данных. Серверы очереди сообщений требуют администрирования, точно так же, как серверы баз данных делают.
  • Тайные инструменты для чтения из очереди? Возможно, если Вы находите асинхронные методы тайными. Возможно, если Вы находите сериализацию и десериализацию тайными. (По крайней мере, те - вещи, которые я нашел тайным, когда я изучал обмен сообщениями. Как много по-видимому тайных технологий, они являются на самом деле довольно приземленными, как только Вы понимаете их, и понимание их является важной частью образования закаленного разработчика.)

Аспекты обмена сообщениями, которые делают его выше баз данных:

  • Асинхронная обработка. Очереди сообщений уведомляют ожидающие процессы, когда новые сообщения прибывают. Для выполнения этой функциональности в базе данных ожидающие процессы должны опросить базу данных.
  • Разделение проблем. канал передачи разъединяется от деталей реализации содержимого сообщения. Только отправитель и получатель должны знать что-либо о формате потока данных в рамках данного сообщения.
  • Отказоустойчивость. . Обмен сообщениями может функционировать, когда соединения между серверами неустойчивы. Очереди сообщений могут хранить сообщения локально и только передать им удаленным серверам, когда соединение живо.
  • Системная интеграция. В мире Windows, по крайней мере, обмен сообщениями встроен в операционную систему. Это использует модель обеспечения безопасности ОС, этим управляют через инструменты ОС, и т.д.

, Если Вам не нужны эти вещи, Вам, вероятно, не нужен обмен сообщениями.

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

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

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

6
ответ дан 30 November 2019 в 15:21
поделиться

Очереди обеспечивают надежный обмен сообщениями. Промежуточная буферизация, разъединенная природа организации очередей делает его намного более масштабируемым, чем базы данных, не говоря уже о более устойчивом.

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

2
ответ дан 30 November 2019 в 15:21
поделиться
Другие вопросы по тегам:

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