powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
25 сообщений из 228, страница 3 из 10
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101484
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ. Ну, когда есть возможность. Мне очень понравилось.

Работает так:
1. Система А хочет получать сообщения от Б
2. Б публикует фид событий которые у него происходят. Ну и ссылки на сущности которые поменялись этим событием.
3. А поллит фид раз в сколько-то секунд и если видит там неизвестные ранее события, то может пойти по ссылкам и скачать все нужные данные.
4. Для этого А должен хранить инфу о последнем считанном событии. Это может быть timestamp если не боимся двух одновременных событий, или ID события.

Это очень удобно:
а. Если что-то пошло не так, то фид и детали можно смотреть прям из браузера
б. Если что-то пошло не так и система А не смогла сохранить/распарсить данные из Б, то эта же система А их потом и перезапросит после того как мы починили все. Т.е. не надо трогать команду Б чтоб те запустили заново событие.
в. Не надо изучать/устанавливать доп компоненты (MQ brokers)

Но конечно если нужно чтоб А мгновенно узнала о событии в Б, то прийдется все-таки чтоб Б как-то нотифицировала нуждающихся. Либо по тому же HTTP, либо по MQ.

еще немного наворотов и ты получишь кафку. вопрос. зачем придумывать лисапед и решать проблемы которые уже давно за тебя решили?

ксттаи я как то собесился в заландо финский, (я живу в финляндии), и там схлестнулся на эту тему с их заландским "архитектором", кстати питерским (о да какой сюрприз, пол питера живет через забор), в общем я ему примерно то что ты описал предложил как альтернативное решение чтоб не зацикливаться на брокерах и использовать их тогда когда надо а не чтоб было. он сказал что я некопенгаген и дал по мне негативный фидбек. что он мне постоянно намекал использвоать брокер а я "вероятно ничего кроме реста не знаю".
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101485
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
kealon(Ruslan),
Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера

а ему прилетает порток на 25 тысяч записей.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101500
andreykaT
Stanislav Bashkyrtsev
Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ. Ну, когда есть возможность. Мне очень понравилось.

Работает так:
1. Система А хочет получать сообщения от Б
2. Б публикует фид событий которые у него происходят. Ну и ссылки на сущности которые поменялись этим событием.
3. А поллит фид раз в сколько-то секунд и если видит там неизвестные ранее события, то может пойти по ссылкам и скачать все нужные данные.
4. Для этого А должен хранить инфу о последнем считанном событии. Это может быть timestamp если не боимся двух одновременных событий, или ID события.

Это очень удобно:
а. Если что-то пошло не так, то фид и детали можно смотреть прям из браузера
б. Если что-то пошло не так и система А не смогла сохранить/распарсить данные из Б, то эта же система А их потом и перезапросит после того как мы починили все. Т.е. не надо трогать команду Б чтоб те запустили заново событие.
в. Не надо изучать/устанавливать доп компоненты (MQ brokers)

Но конечно если нужно чтоб А мгновенно узнала о событии в Б, то прийдется все-таки чтоб Б как-то нотифицировала нуждающихся. Либо по тому же HTTP, либо по MQ.

еще немного наворотов и ты получишь кафку. вопрос. зачем придумывать лисапед и решать проблемы которые уже давно за тебя решили?
Сам я с Kafka не работал, но в моем понимании это MQ. Хотя судя по всему она позволяет подписчикам откатывать свой оффсет как в случае фидов. Ну и весь топик можно хранить бесконечно, т.е. это аналог таблицы событий в БД. Веб UI к ней тоже можно подключить.

В общем может быть и можно подобное с помощью Kafka сделать без потери в функциональности. Останутся скорей всего такие проблемы:
- Масштабируемость - потому как она вряд ли будет кэшировать ответ подписчику? Но мне не приходится обычно писать что-то высоконагруженное с большим кол-вом подписчиков, поэтому это я переживу :)
- Лишний компонент который нужно хорошо изучить
- Ну и это доп компонент который прийдется деплоить, поддерживать, бэкапить и пр.
- И я еще не понял что делать если сама кафка лежит и наше приложение не может запаблишить событие. А из БД не обязательно это событие можно будет восстановить. Да и давать возможность кафке читать базу и писать код для вычленения всех типов событий, хм..

Пока я не убежден на 100% что она правда не привнесет больше хлопот чем решит проблем. Но как минимум надо будет дать шанс.

andreykaT
PetroNotC Sharp
kealon(Ruslan),
Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера

а ему прилетает порток на 25 тысяч записей.
Не, тут все легко решается постраничным выводом. Это не проблема.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101506
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev

- Масштабируемость - потому как она вряд ли будет кэшировать ответ подписчику?

Их никто не кеширует by design. Месседжи - одноразовые. Хотя consumer может кешировать их в своём
собственном процессе - но зачем? Для кого?
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101531
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
PetroNotC Sharp
kealon(Ruslan),
Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера

а ему прилетает порток на 25 тысяч записей.
странный ты.
Нужен сам факт - что в магазин завезли хлеб.
Boolean
А как ты потом выгребать будешь, пофиг.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101532
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас - изначально какая-то неверная установка. JMS/MQ системы - основное приминение back-to-back.
Их мало используют на фронтовой стороне. И когда мы рассуждаем как слать месседжи в браузер
- мы неизбежно заходим в тупик.

Давайте разделим эти юзкейсы. Пускай будут websockets и их протоколы. Это одно.

И будут back-системы которые связывают только серверные процессы. Это - другое.

Про "порток на 25 тыщ" записей я уже выше писал.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101535
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ну тогда вброс станислава тут лишний.
СистемаБ может получить Push из системыА без Pool.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101539
guest2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю зачем вы их до сих пор используете, если есть Kafka.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101570
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Kafka и Jms для разных целей разрабатывались. Kafka это стриминговая логирующая система, ориентирована на пакетную обработку данных, что накладывает ограничения на гарантированную доставку и дедубликацию. Jms же ориентирован на гарантированную доставку отдельных сообщений. Да, можно реализовать для Kafka на стороне клиента функционал подобный jms, но тогда и производительность Kafka будет как у обычного брокера JMS. Jms позволяет писать более простой код и, например, не всякий разработчик сейчас сможет правильно написать код обработки ребалансировки консьюмеров Kafka так, чтобы сообщения не терялись и не было дублей. Ещё надо понимать, что под реализацией Jms тоже лежит БД, например, для ActiveMQ это обычно Kahadb, специально оптимизированная под обработку очередей и вряд ли БД общего назначения сможет конкурировать со специализированной БД по быстродействию.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101590
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JMS, что вы понимаете под термином.
Имхо он устарел, умер, и сейчас не актуален.
Мне больше нравится, Message-oriented middleware
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101596
Roman Osipov
Kafka это стриминговая логирующая система, ориентирована на пакетную обработку данных, что накладывает ограничения на гарантированную доставку и дедубликацию.
А какие ограничения и почему они накладываются? И в целом интересно узнать почему такие проблемы возникают и как решаются в JMS.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101599
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера посмотрел вот это видео. Чувак из Badoo героически боролся с сменой мастера и балансировкой. Любопытно.

[spoiler]
YouTube Video
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101602
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части.
по сравнению с чем?
JMS это спецификация. Тогда с чем сравниваем пакетность кафки?
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101609
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части.
по сравнению с чем?
JMS это спецификация. Тогда с чем сравниваем пакетность кафки?

Знаешь что интересно. Что в документации на Кафку в оглавлении
https://kafka.apache.org/documentation/#api
JMS даже нигде не упоминается.

Разумеется у нее будут коннекторы которые будут адаптировать события
в JMS протоколы такие как AMQP, STOMP e.t.c.

Но самое главное я-бы отсюда вывел следующее. Кафка не заявляет себя как
JMS система. Вот мои рассуждения.

Я неправ?
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101614
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

JMS это не протокол.
Это API и спецификация именно для java приложений.

>Разумеется у нее будут коннекторы которые будут адаптировать события
в JMS протоколы такие как AMQP, STOMP e.t.c.

Невозможно из kafka сделать AMQP.
Потому что AMQP это не про сообщение, а про про exchanges, queues и bindings сежду ними.
А kafka это стримминг, и таких понятий там просто нет.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. JMS - это спецификация для Java. Не буду спорить.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101617
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Согласен. JMS - это спецификация для Java. Не буду спорить.
поэтому тему лучше изменить на "пошире"
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101618
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru
я-бы оставил как есть.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101619
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ

ИМХО этот паттерн далеко не для всех случаев подходит.

Кейс 1.
Например, приложение 1 это кластер, в котором несколько нод N, и по разным событиям от приложения 2 нужно обновлять M кешей.
Если N и M велики, например, несколько десятков нод и сотни кешей, то пулинг создаст заметную дополнительную нагрузку.
А если, не дай бог, это хозяйство расположено в AWS, то счет в конце месяца тебя неприятно удивит.

Кейс 2.
Необходимо уведомлять несколько приложений о событии, причем логика того, какие приложения нужно уведомлять, а какие нет (раутинг), может менятся.
Если делать через пулинг, то при изменении логики раутинга необходимо перконфигурировать или передеплоивать все приложения.
А это bad practice.
А если через AMQP, то достаточно поменять привила байндинга exchange на очереди.

Думаю, что таких кейсов достаточно много.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101623
kolchanov
>Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ

ИМХО этот паттерн далеко не для всех случаев подходит.

Кейс 1.
Например, приложение 1 это кластер, в котором несколько нод N, и по разным событиям от приложения 2 нужно обновлять M кешей.
Если N и M велики, например, несколько десятков нод и сотни кешей, то пулинг создаст заметную дополнительную нагрузку.
А если, не дай бог, это хозяйство расположено в AWS, то счет в конце месяца тебя неприятно удивит.
Добавляем кэширование на сервере в nginx'e эдак в одну минуту и вся нагрузка с сервера резко уйдет. Т.е. надо чтоб все долбящиеся клиенты кроме 1ого получали ответ из кеша.
А вот если задержка в минуту (ну или сколько там надо) недопустима и сервисы сразу должны узнавать про событие - тогда да, такое на одних фидах не сделать.
kolchanovКейс 2.
Необходимо уведомлять несколько приложений о событии, причем логика того, какие приложения нужно уведомлять, а какие нет (раутинг), может менятся.А для чего это делается?
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101627
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru
я-бы оставил как есть.
пошире это
- JMS устарело. Не стоит сравнивать.
- обсуждать или MQ или Message oriented middleware.
Это имхо.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru
я-бы оставил как есть.
пошире это
- JMS устарело. Не стоит сравнивать.

В чем устарело? То что спецификация была от 2013 года? Так это не так старо. Бывалыча некоторые стандарты
и постарше лежат и ничего.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101629
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

или Message oriented middleware.

Расскажи как ты себе понимаешь MOM. Без определений из вики. Вот лично как ТЫ понимаешь.
...
Рейтинг: 0 / 0
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
    #40101630
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kafka даёт максимальную производительность (из-за которой её и используют ) в режиме автокоммитов оффсетов или редких ручных коммитов. Автокоммит, кстати, сконфигуирован в Kafka по дефолту в true. Видел проекты, где разработчики вешают аннотацию коньсьмера кафка на метод и вроде как получают сообщения и все у них работает, но упускают из виду дефолтный автокоммит, что может привести к ситуации, когда коммит оффсетов произошёл, а данные не загрузились в целевую систему, вот и потеря сообщений, причём даже в логах не найдёте информацию о потерях. При редких ручных коммитах чтобы не было потерь у нас должны быть огромные пачки сообщений обрабатываться за раз, что чревато ошибками и необходимостью переотправки. Про дубли - например после ребалансировки консьюмеров не удастся закоммитить оффсеты в той же сессии, при попытке коммита будет exception. Поэтому надо хранить оффсеты обработанных сообщений где-то ещё, во внешнем хранилище, обычно я в zookeer храню. Это только малая часть проблем. Вывод такой - Kafka имеет очень много особенностей эксплуатации, и если у вас в команде нет эксперта по ней, то легко нарветесь на какой нибудь мало понятный баг. Под Jms я имел ввиду именно спецификацию. Здесь все гораздо проще - есть спецификация, есть транзакции в Jms, и даже новичек сможет писать гарантированно работающий код. Конечно, в каждом конкретном случае, в зависимости от требований отказоустойчивости, нагрузки обдуманно выбирается то или иное решение jms, kafka, кэш или что то ещё. Зависит от кругозора архитектора. Про rabbitmq - мы принципиально не пользуемся им, т.к. он плохо горизонтально масштабируется и высока вероятность split brain кластера под нагрузкой, после которого кластер разваливается и лечится только полной очисткой данных.
...
Рейтинг: 0 / 0
25 сообщений из 228, страница 3 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]