powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
25 сообщений из 265, страница 8 из 11
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001435
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции

а потом я нашел такую штуку:
https://github.com/debezium/debezium

может кто покритикует такой подход?
Зависит от того насколько ты правильно пересказал, а то может случиться так, что это "Рабинович напел"... Если же отталкиваться от твоего вольного пересказа, то работать с векторами изменений - это тот еще гемор, ну к примеру, вот есть у хибера envers - начало, в принципе, точно такое же как и у тебя, но вот то что залетает в БД - оно может быть полезно только для аудита, а конечный пользователь, глядя на сообщения в духе "значение атрибута поменялось с А на Б", в этом ничерта не понимает. А здесь, судя по твоему описанию, получается что вектор изменений идет в кафку, а потом куда-то дальше, на мой взгляд основные косяки здесь такие:
- чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно
- когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001437
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если критиковать то...
У тебя мешок сервисов пишет в бд.
Почему второй мешок не может читать бд и по меткам времени выгребать изменения?
Зачем триггер?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001439
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
+1
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001440
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть метод такой:
- сервис А требует изменения в бд.
- на что его послать подальше и сказать: "иди в бд, сам и бери изменения".
Это называется умные сервисы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001447
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Почему второй мешок не может читать бд и по меткам времени выгребать изменения?

Это означает, что второй сервис накладывает ограничение на изменение структуры данных.
И первый сервис уже не может изменять свою структуру под внешними требованиями.
Жуткий bad practice.
Из микросервисного и монолитного миров берется самое плохое - и производительность ниже, из-за сетевого вызова и сериализации, и гибкости нет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001453
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
andreykaT
а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции

а потом я нашел такую штуку:
https://github.com/debezium/debezium

может кто покритикует такой подход?
Зависит от того насколько ты правильно пересказал, а то может случиться так, что это "Рабинович напел"... Если же отталкиваться от твоего вольного пересказа, то работать с векторами изменений - это тот еще гемор, ну к примеру, вот есть у хибера envers - начало, в принципе, точно такое же как и у тебя, но вот то что залетает в БД - оно может быть полезно только для аудита, а конечный пользователь, глядя на сообщения в духе "значение атрибута поменялось с А на Б", в этом ничерта не понимает. А здесь, судя по твоему описанию, получается что вектор изменений идет в кафку, а потом куда-то дальше, на мой взгляд основные косяки здесь такие:
- чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно
- когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее)

в логе только айдихи измененных (добавленных, удаленных) сущностей.
что мне ПОКА не нравится - надо делать тригер надо делать новую таблицу надо делать кодинг на бд (хотя это имхо больше может быть принято как конфигурация дб а не кодинг). и второе - что будет с перформансом когда пушнут апдейт на миллион записей.
-я так понимаю коммит будет только когда все изменения применятся (это и хорошо и не очень. хорошо потому что если что то упало то и 100% не будет ивента). ну формальная скалябельность - апстримит один подбирают много. видим мощности дб хватает - можем сделать подобие кафковых партиций в бд и апстримить через в принципе любое количество стримеров. главное чтоб база переваривала.

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

что допустимо бизнесом - ордеринг НЕ важен. если одна и та же сущность обновилась 5 раз, то мы берем только одно событие. если зависимые сущности обновились - порядок снова роли в моем случае не играет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001454
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanov
> Почему второй мешок не может читать бд и по меткам времени выгребать изменения?

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

интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001455
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Если критиковать то...
У тебя мешок сервисов пишет в бд.
Почему второй мешок не может читать бд и по меткам времени выгребать изменения?
Зачем триггер?

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

что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?

есть третий вариант - лезем в потроха сервиса (сервисов) которые пишут-шатают базу и там втыкаем "пошли чо нить в мессадж брокер после коммита в бд". а оно возьмет и не пошлет :)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001459
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
в логе только айдихи измененных (добавленных, удаленных) сущностей.
Даже это уже выставляет кишки СУБД наружу, т.е. "у клиента XXX изменился баланс" и "в таблице balance у записи с id=xxx что-то поменялось" - это разные события. Более того, что при таком подходе будет к примеру с удалениями (или изменениями FK, где фактически меняются 2 сущности) - вообще хрен разберешь, т.е. удалили запись из таблицы, записали в лог что такого id больше нет, а к чему он был привязан - хз, т.е. транзакцию закоммитил - контекст изменений потерял. В том хибере можно сделать так: накапливать и аггрегировать изменения на insert/update/delete, а на коммите эти изменения превращать уже в бизнесовые события и писать "правильный" лог, однако, для массовых изменений через SQL придется придумывать компенсации

andreykaT
что будет с перформансом когда пушнут апдейт на миллион записей
В оракле производительность в сравнении с обычным update без тригеров просядет шопипец, как-то можно улучшить за счет compound triggers , но в целом оно будет гораздо медленнее нежели update, а потом компенсация через insert ... select, но я так понимаю что обновлять по миллиону записей за раз - это не основной кейс.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001492
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.

О, у нас появилось потребность в определениии публичного контракта:)

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

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

И это явно не просто хайп, потому что люди умеют считать деньги.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001501
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>например, потому что меток времени нет или они обновляются не с обновлением всех полей
= вы выбирайте. Или паттерн "бд это интеграция и ядро системы" или бд это легаси где нельзя ничего менять.
В первом случае постоянный апдейт бд и есть разработчик бд.
Назовите тогда пробемы?
update field add timestamp (добавить поле времени)
делается на рабочей базе и ничего не блокирует.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001503
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?
=
- второй вариант отработан уже лет 20.
Есть OLAP/OLTP паттерн как ты любишь говорить
Есть не "сортировать по дате" а “запросить по индексу“
Есть физические индексы когда "новые записи всегда сверху")))
Есть партицирование таблиц
.....
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001532
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanov
>интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой.

О, у нас появилось потребность в определениии публичного контракта:)

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

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

И это явно не просто хайп, потому что люди умеют считать деньги.

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

а так одна база на один сервис и все вроде как ясно хотя бы в этом моменте.

ну и тут хорошо бы определиться что ты вкладываешь в понятие "микросервис" а то тут могут и палкой побить если не так скажешь некоторые особо чувствительные личности :)
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001533
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
>что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате?
=
- второй вариант отработан уже лет 20.
Есть OLAP/OLTP паттерн как ты любишь говорить
Есть не "сортировать по дате" а “запросить по индексу“
Есть физические индексы когда "новые записи всегда сверху")))
Есть партицирование таблиц
.....

я тебя понял. я подумаю. в этом есть смысл. согласен.
из минусов - надо шатать легаси таблицу.
из плюсов - не надо новую таблицу и триггер.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001543
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>поэтому хорошо иметь прослойку между базой и чем то еще.
= прослойка это Message Driven Architecture (MDA)
О чем тут мембер crutchmaster топит.
Тогда бд в самой прослойке в виде сервера будет.
Скорость 5-10тыр сообщений в сек
Тебе решать.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001546
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
>поэтому хорошо иметь прослойку между базой и чем то еще.
= прослойка это Message Driven Architecture (MDA)
О чем тут мембер crutchmaster топит.
Тогда бд в самой прослойке в виде сервера будет.
Скорость 5-10тыр сообщений в сек
Тебе решать.

я пока не понимаю как мда привинтить к моему кейсу при всех тех условиях что есть у меня (база как точка интеграции, трогать почти ничего из того что поверх - нельзя).
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001552
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
СервисА, СервисБ, СервисN, СУБД.
Что можно трогать?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001553
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант.
Нет логики.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001582
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант.
Нет логики.

мне надо написать новый сервис который работает с данными из конкретной указанной пальцем бд. и всё. то что я наворотил триггеры - это единственное что я наворотил. что мне НЕ надо - мне не надо трогать существующие сервисы. или надо но там будет дикий рефакторинг.

второе приближение - это забрать ответственность тех сервисов что пишут в нужную мне таблицу, получать от них данные по синхронному формату, и уже самому класть эти данные в бд и говорить тем сервисам "да, я положил". тем самым я уже на уровне своей ответственности (наверное) буду знать о всех мутациях происходящих в нужных мне таблицах и как то этими знаниями распоряжаться. ну да.. пока не выяснится что кто то что то забыл и есть еще сервисы которые шатают эту бедную таблицу.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001597
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
то в случае request/reply на AMQP они просто безумные.

Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает.

Андрей Панфилов
Про производительность очередей байки травить начали именно вы

Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок?

Производительность при том условии, что нужны все те фишки (или хотя бы некоторые), которые даёт брокер, очевидно. Нахер он вообще твой хттп нужен, когда у тебя две точки и одна из них - не браузер. Закатай штаны обратно и пили лучше монолит, как диды.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001600
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
может кто покритикует такой подход?

Тут, хе хе, раббит от "критики" с трудом дышит, а ты собрался через базу и триггеры всё это гонять.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001609
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает.
По дороге там потерян разве что HTTP/1.1

crutchmaster
Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок?
Разве не вы писали?

crutchmaster
Сисколы и походы по сети не такая уж и дешевая вешчь, как может показаться, прощу заметить. А этих соединений может быть не просто много, а дохерища, так что все эти рабиты придумали тоже не от сильно хорошей жизни на хттп.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001612
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ну дак погоди брать ответственность за запись в бд.
Начни с того что пишешь читающий сервис. Так?
Вот и опиши проблему дальше.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001615
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
По дороге там потерян разве что HTTP/1.1

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

Андрей Панфилов
Разве не вы писали?

А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями? Об этом мой вопрос был так-то. Но нахера его слушать, когда ты самый умный.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40001619
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Ну так я и через раббит могу на единственный сервис отправлять запросы пачкой, как в хттп 1.1. Ничего удивительного.
О как интересно... в request/reply? пачкой?

crutchmaster
А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями?
Ну и причем тут броадкасты-то? Вот нужно из одного места послать запрос в другое, нужно всенепременно использовать AMQP потому что в нем можно броадкасты?
...
Рейтинг: 0 / 0
25 сообщений из 265, страница 8 из 11
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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