|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ. Ну, когда есть возможность. Мне очень понравилось. Работает так: 1. Система А хочет получать сообщения от Б 2. Б публикует фид событий которые у него происходят. Ну и ссылки на сущности которые поменялись этим событием. 3. А поллит фид раз в сколько-то секунд и если видит там неизвестные ранее события, то может пойти по ссылкам и скачать все нужные данные. 4. Для этого А должен хранить инфу о последнем считанном событии. Это может быть timestamp если не боимся двух одновременных событий, или ID события. Это очень удобно: а. Если что-то пошло не так, то фид и детали можно смотреть прям из браузера б. Если что-то пошло не так и система А не смогла сохранить/распарсить данные из Б, то эта же система А их потом и перезапросит после того как мы починили все. Т.е. не надо трогать команду Б чтоб те запустили заново событие. в. Не надо изучать/устанавливать доп компоненты (MQ brokers) Но конечно если нужно чтоб А мгновенно узнала о событии в Б, то прийдется все-таки чтоб Б как-то нотифицировала нуждающихся. Либо по тому же HTTP, либо по MQ. еще немного наворотов и ты получишь кафку. вопрос. зачем придумывать лисапед и решать проблемы которые уже давно за тебя решили? ксттаи я как то собесился в заландо финский, (я живу в финляндии), и там схлестнулся на эту тему с их заландским "архитектором", кстати питерским (о да какой сюрприз, пол питера живет через забор), в общем я ему примерно то что ты описал предложил как альтернативное решение чтоб не зацикливаться на брокерах и использовать их тогда когда надо а не чтоб было. он сказал что я некопенгаген и дал по мне негативный фидбек. что он мне постоянно намекал использвоать брокер а я "вероятно ничего кроме реста не знаю". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 00:55 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp kealon(Ruslan), Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера а ему прилетает порток на 25 тысяч записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 00:56 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
andreykaT Stanislav Bashkyrtsev Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ. Ну, когда есть возможность. Мне очень понравилось. Работает так: 1. Система А хочет получать сообщения от Б 2. Б публикует фид событий которые у него происходят. Ну и ссылки на сущности которые поменялись этим событием. 3. А поллит фид раз в сколько-то секунд и если видит там неизвестные ранее события, то может пойти по ссылкам и скачать все нужные данные. 4. Для этого А должен хранить инфу о последнем считанном событии. Это может быть timestamp если не боимся двух одновременных событий, или ID события. Это очень удобно: а. Если что-то пошло не так, то фид и детали можно смотреть прям из браузера б. Если что-то пошло не так и система А не смогла сохранить/распарсить данные из Б, то эта же система А их потом и перезапросит после того как мы починили все. Т.е. не надо трогать команду Б чтоб те запустили заново событие. в. Не надо изучать/устанавливать доп компоненты (MQ brokers) Но конечно если нужно чтоб А мгновенно узнала о событии в Б, то прийдется все-таки чтоб Б как-то нотифицировала нуждающихся. Либо по тому же HTTP, либо по MQ. еще немного наворотов и ты получишь кафку. вопрос. зачем придумывать лисапед и решать проблемы которые уже давно за тебя решили? В общем может быть и можно подобное с помощью Kafka сделать без потери в функциональности. Останутся скорей всего такие проблемы: - Масштабируемость - потому как она вряд ли будет кэшировать ответ подписчику? Но мне не приходится обычно писать что-то высоконагруженное с большим кол-вом подписчиков, поэтому это я переживу :) - Лишний компонент который нужно хорошо изучить - Ну и это доп компонент который прийдется деплоить, поддерживать, бэкапить и пр. - И я еще не понял что делать если сама кафка лежит и наше приложение не может запаблишить событие. А из БД не обязательно это событие можно будет восстановить. Да и давать возможность кафке читать базу и писать код для вычленения всех типов событий, хм.. Пока я не убежден на 100% что она правда не привнесет больше хлопот чем решит проблем. Но как минимум надо будет дать шанс. andreykaT PetroNotC Sharp kealon(Ruslan), Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера а ему прилетает порток на 25 тысяч записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 10:12 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev - Масштабируемость - потому как она вряд ли будет кэшировать ответ подписчику? Их никто не кеширует by design. Месседжи - одноразовые. Хотя consumer может кешировать их в своём собственном процессе - но зачем? Для кого? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 12:13 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
andreykaT PetroNotC Sharp kealon(Ruslan), Вместо коллбэка клиент ставит таймер и каждые 5сек спрашивает новости у старшего брата сервера а ему прилетает порток на 25 тысяч записей. Нужен сам факт - что в магазин завезли хлеб. Boolean А как ты потом выгребать будешь, пофиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 14:41 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
У нас - изначально какая-то неверная установка. JMS/MQ системы - основное приминение back-to-back. Их мало используют на фронтовой стороне. И когда мы рассуждаем как слать месседжи в браузер - мы неизбежно заходим в тупик. Давайте разделим эти юзкейсы. Пускай будут websockets и их протоколы. Это одно. И будут back-системы которые связывают только серверные процессы. Это - другое. Про "порток на 25 тыщ" записей я уже выше писал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 15:03 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
mayton, Ну тогда вброс станислава тут лишний. СистемаБ может получить Push из системыА без Pool. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 15:23 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Я не знаю зачем вы их до сих пор используете, если есть Kafka. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2021, 18:33 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Добрый день. Kafka и Jms для разных целей разрабатывались. Kafka это стриминговая логирующая система, ориентирована на пакетную обработку данных, что накладывает ограничения на гарантированную доставку и дедубликацию. Jms же ориентирован на гарантированную доставку отдельных сообщений. Да, можно реализовать для Kafka на стороне клиента функционал подобный jms, но тогда и производительность Kafka будет как у обычного брокера JMS. Jms позволяет писать более простой код и, например, не всякий разработчик сейчас сможет правильно написать код обработки ребалансировки консьюмеров Kafka так, чтобы сообщения не терялись и не было дублей. Ещё надо понимать, что под реализацией Jms тоже лежит БД, например, для ActiveMQ это обычно Kahadb, специально оптимизированная под обработку очередей и вряд ли БД общего назначения сможет конкурировать со специализированной БД по быстродействию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 02:34 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
JMS, что вы понимаете под термином. Имхо он устарел, умер, и сейчас не актуален. Мне больше нравится, Message-oriented middleware ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 12:10 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Roman Osipov Kafka это стриминговая логирующая система, ориентирована на пакетную обработку данных, что накладывает ограничения на гарантированную доставку и дедубликацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 12:44 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 13:03 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Вчера посмотрел вот это видео. Чувак из Badoo героически боролся с сменой мастера и балансировкой. Любопытно. [spoiler] ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 13:05 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
mayton Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части. JMS это спецификация. Тогда с чем сравниваем пакетность кафки? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 13:24 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton Roman Osipov, верно подмечено. "Пакетность" заложена даже в интерфейсной части. JMS это спецификация. Тогда с чем сравниваем пакетность кафки? Знаешь что интересно. Что в документации на Кафку в оглавлении https://kafka.apache.org/documentation/#api JMS даже нигде не упоминается. Разумеется у нее будут коннекторы которые будут адаптировать события в JMS протоколы такие как AMQP, STOMP e.t.c. Но самое главное я-бы отсюда вывел следующее. Кафка не заявляет себя как JMS система. Вот мои рассуждения. Я неправ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 13:50 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
mayton, JMS это не протокол. Это API и спецификация именно для java приложений. >Разумеется у нее будут коннекторы которые будут адаптировать события в JMS протоколы такие как AMQP, STOMP e.t.c. Невозможно из kafka сделать AMQP. Потому что AMQP это не про сообщение, а про про exchanges, queues и bindings сежду ними. А kafka это стримминг, и таких понятий там просто нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 14:08 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Согласен. JMS - это спецификация для Java. Не буду спорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 14:10 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
mayton Согласен. JMS - это спецификация для Java. Не буду спорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 14:15 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru я-бы оставил как есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 14:27 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
>Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ ИМХО этот паттерн далеко не для всех случаев подходит. Кейс 1. Например, приложение 1 это кластер, в котором несколько нод N, и по разным событиям от приложения 2 нужно обновлять M кешей. Если N и M велики, например, несколько десятков нод и сотни кешей, то пулинг создаст заметную дополнительную нагрузку. А если, не дай бог, это хозяйство расположено в AWS, то счет в конце месяца тебя неприятно удивит. Кейс 2. Необходимо уведомлять несколько приложений о событии, причем логика того, какие приложения нужно уведомлять, а какие нет (раутинг), может менятся. Если делать через пулинг, то при изменении логики раутинга необходимо перконфигурировать или передеплоивать все приложения. А это bad practice. А если через AMQP, то достаточно поменять привила байндинга exchange на очереди. Думаю, что таких кейсов достаточно много. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 14:39 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
kolchanov >Я для обмена событиями между приложениями теперь использую REST и фиды вместо MQ ИМХО этот паттерн далеко не для всех случаев подходит. Кейс 1. Например, приложение 1 это кластер, в котором несколько нод N, и по разным событиям от приложения 2 нужно обновлять M кешей. Если N и M велики, например, несколько десятков нод и сотни кешей, то пулинг создаст заметную дополнительную нагрузку. А если, не дай бог, это хозяйство расположено в AWS, то счет в конце месяца тебя неприятно удивит. А вот если задержка в минуту (ну или сколько там надо) недопустима и сервисы сразу должны узнавать про событие - тогда да, такое на одних фидах не сделать. kolchanovКейс 2. Необходимо уведомлять несколько приложений о событии, причем логика того, какие приложения нужно уведомлять, а какие нет (раутинг), может менятся.А для чего это делается? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 15:51 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
mayton Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru я-бы оставил как есть. - JMS устарело. Не стоит сравнивать. - обсуждать или MQ или Message oriented middleware. Это имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 16:13 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp mayton Как "пошире"? Можно создать отдельный топик по streaming-platform... но учитывая вялую посещаемость sql.ru я-бы оставил как есть. - JMS устарело. Не стоит сравнивать. В чем устарело? То что спецификация была от 2013 года? Так это не так старо. Бывалыча некоторые стандарты и постарше лежат и ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 16:26 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp или Message oriented middleware. Расскажи как ты себе понимаешь MOM. Без определений из вики. Вот лично как ТЫ понимаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 16:29 |
|
Зачем мы вообще используем JMS/MQ системы? (четверговый топик)
|
|||
---|---|---|---|
#18+
Kafka даёт максимальную производительность (из-за которой её и используют ) в режиме автокоммитов оффсетов или редких ручных коммитов. Автокоммит, кстати, сконфигуирован в Kafka по дефолту в true. Видел проекты, где разработчики вешают аннотацию коньсьмера кафка на метод и вроде как получают сообщения и все у них работает, но упускают из виду дефолтный автокоммит, что может привести к ситуации, когда коммит оффсетов произошёл, а данные не загрузились в целевую систему, вот и потеря сообщений, причём даже в логах не найдёте информацию о потерях. При редких ручных коммитах чтобы не было потерь у нас должны быть огромные пачки сообщений обрабатываться за раз, что чревато ошибками и необходимостью переотправки. Про дубли - например после ребалансировки консьюмеров не удастся закоммитить оффсеты в той же сессии, при попытке коммита будет exception. Поэтому надо хранить оффсеты обработанных сообщений где-то ещё, во внешнем хранилище, обычно я в zookeer храню. Это только малая часть проблем. Вывод такой - Kafka имеет очень много особенностей эксплуатации, и если у вас в команде нет эксперта по ней, то легко нарветесь на какой нибудь мало понятный баг. Под Jms я имел ввиду именно спецификацию. Здесь все гораздо проще - есть спецификация, есть транзакции в Jms, и даже новичек сможет писать гарантированно работающий код. Конечно, в каждом конкретном случае, в зависимости от требований отказоустойчивости, нагрузки обдуманно выбирается то или иное решение jms, kafka, кэш или что то ещё. Зависит от кругозора архитектора. Про rabbitmq - мы принципиально не пользуемся им, т.к. он плохо горизонтально масштабируется и высока вероятность split brain кластера под нагрузкой, после которого кластер разваливается и лечится только полной очисткой данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2021, 16:38 |
|
|
start [/forum/topic.php?fid=59&msg=40101597&tid=2120331]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
36ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
472ms |
get tp. blocked users: |
0ms |
others: | 274ms |
total: | 810ms |
0 / 0 |