|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции а потом я нашел такую штуку: https://github.com/debezium/debezium может кто покритикует такой подход? - чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно - когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 18:04 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Если критиковать то... У тебя мешок сервисов пишет в бд. Почему второй мешок не может читать бд и по меткам времени выгребать изменения? Зачем триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 18:07 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 18:08 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
То есть метод такой: - сервис А требует изменения в бд. - на что его послать подальше и сказать: "иди в бд, сам и бери изменения". Это называется умные сервисы. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 18:11 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
> Почему второй мешок не может читать бд и по меткам времени выгребать изменения? Это означает, что второй сервис накладывает ограничение на изменение структуры данных. И первый сервис уже не может изменять свою структуру под внешними требованиями. Жуткий bad practice. Из микросервисного и монолитного миров берется самое плохое - и производительность ниже, из-за сетевого вызова и сериализации, и гибкости нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 18:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов andreykaT а как вам такая схема интеграции. есть мешок сервисов. пишут в бд. другим сервисам надо ловить изменения-обновления-удаления-создания, пилим триггер. триггер все изменения кидает в таблицу. на таблицу натравливаем поллингом апстрим сервис который апдейты выгребает и стримит в кафку. с другой стороны мешок консамеров что что-то там делают. мы использовали два шаблона интеграции а потом я нашел такую штуку: https://github.com/debezium/debezium может кто покритикует такой подход? - чтобы уметь разбирать чужой вектор изменений нужно у себя данные хранить в такой же структуре, зачем так делать - непонятно, потому как никакой бизнес составляющей здесь нет, одна только репликация, а зачем эта репликация сдалась, если другая сторона хочет хранить данные так как ей удобно, тоже непонятно - когда мы вытаскиваем кишки нашей БД наружу, да и еще навешиваем некий контракт на эти кишки, то становится совсем неочевидно каким образом производить изменения в схеме БД (в том же самом envers нужно постоянно следить за составом колонок и датафиксы делать не только на данные, но и на лог, а если в этой штуке лог в виде EAV, то будет еще печальнее) в логе только айдихи измененных (добавленных, удаленных) сущностей. что мне ПОКА не нравится - надо делать тригер надо делать новую таблицу надо делать кодинг на бд (хотя это имхо больше может быть принято как конфигурация дб а не кодинг). и второе - что будет с перформансом когда пушнут апдейт на миллион записей. -я так понимаю коммит будет только когда все изменения применятся (это и хорошо и не очень. хорошо потому что если что то упало то и 100% не будет ивента). ну формальная скалябельность - апстримит один подбирают много. видим мощности дб хватает - можем сделать подобие кафковых партиций в бд и апстримить через в принципе любое количество стримеров. главное чтоб база переваривала. что мне нравится - простое и дешевое, а главное ультимативное (выглядит по крайней мере таковым) решение чтоб заинтегрировать пачку новых сервисов которые обслуживают только апдейты и что-то делают с этими знаниями. - не надо перебирать все сторонние сервисы кто шатает эти несчастные таблицы чтоб не забыть где нибудь присунуть пуш ивента в ту же кафку или оно упало не упало отправилось не отправилось потерялось, человеческий фактор и т.п. - это фактически исключено. а то апдейт прошел а другие сервисы про это не знают. что допустимо бизнесом - ордеринг НЕ важен. если одна и та же сущность обновилась 5 раз, то мы берем только одно событие. если зависимые сущности обновились - порядок снова роли в моем случае не играет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 19:24 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
kolchanov > Почему второй мешок не может читать бд и по меткам времени выгребать изменения? Это означает, что второй сервис накладывает ограничение на изменение структуры данных. И первый сервис уже не может изменять свою структуру под внешними требованиями. Жуткий bad practice. Из микросервисного и монолитного миров берется самое плохое - и производительность ниже, из-за сетевого вызова и сериализации, и гибкости нет. интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 19:25 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, Если критиковать то... У тебя мешок сервисов пишет в бд. Почему второй мешок не может читать бд и по меткам времени выгребать изменения? Зачем триггер? например, потому что меток времени нет или они обновляются не с обновлением всех полей (так уже сделано и с этим ничего не поделать) миллиард записей перебирать не будешь и не сможешь. далее, даже если есть. что дальше? держать тупо последние смещения и точно так же поллить уже таблицу с сортировкой по времени но не на пару сотен-тысяч-десятков тысяч записей, а в сотню миллионов? что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате? есть третий вариант - лезем в потроха сервиса (сервисов) которые пишут-шатают базу и там втыкаем "пошли чо нить в мессадж брокер после коммита в бд". а оно возьмет и не пошлет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 19:30 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT в логе только айдихи измененных (добавленных, удаленных) сущностей. andreykaT что будет с перформансом когда пушнут апдейт на миллион записей ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2020, 20:10 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
>интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой. О, у нас появилось потребность в определениии публичного контракта:) Ты прав, интеграция через базу это очень распространенный архитектрурный паттерн. Но, если ты можешь себе позволить интеграцию через базу, то, скорее всего, микросервисы тебе не нужны. Может это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д. И это явно не просто хайп, потому что люди умеют считать деньги. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 00:31 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >например, потому что меток времени нет или они обновляются не с обновлением всех полей = вы выбирайте. Или паттерн "бд это интеграция и ядро системы" или бд это легаси где нельзя ничего менять. В первом случае постоянный апдейт бд и есть разработчик бд. Назовите тогда пробемы? update field add timestamp (добавить поле времени) делается на рабочей базе и ничего не блокирует. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 04:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате? = - второй вариант отработан уже лет 20. Есть OLAP/OLTP паттерн как ты любишь говорить Есть не "сортировать по дате" а “запросить по индексу“ Есть физические индексы когда "новые записи всегда сверху"))) Есть партицирование таблиц ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 04:43 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
kolchanov >интеграция через базу - это один из паттернов (подходов). гибкость - понятие растяжимое. в кафку ты точно так же кидаешь (можешь кидать) джейсоны которые могут поменяться и изменение схемы будет снова геморрой. О, у нас появилось потребность в определениии публичного контракта:) Ты прав, интеграция через базу это очень распространенный архитектрурный паттерн. Но, если ты можешь себе позволить интеграцию через базу, то, скорее всего, микросервисы тебе не нужны. Может это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д. И это явно не просто хайп, потому что люди умеют считать деньги. не вижу противоречий. что мешает пользовать разделенные сервисы поверх всех целых четырех основных шаблонов? если монолит то говорить об интеграции странно ибо одно противоречит другому. когда несколько сервисов ходят в одну базу это согласен не лучший кейс. но и не критичный. тут основнаяпролема что у тебя может быть несколько "мутаторов", и в какой то момент просто концы потеряешь. поэтому хорошо иметь прослойку между базой и чем то еще. а так одна база на один сервис и все вроде как ясно хотя бы в этом моменте. ну и тут хорошо бы определиться что ты вкладываешь в понятие "микросервис" а то тут могут и палкой побить если не так скажешь некоторые особо чувствительные личности :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:17 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, >что проще? поллить лог, выгребать записи, дропать все данные в ней после коммита кафки. или поллить таблицу в 200 миллионов записей и сортировать по дате? = - второй вариант отработан уже лет 20. Есть OLAP/OLTP паттерн как ты любишь говорить Есть не "сортировать по дате" а “запросить по индексу“ Есть физические индексы когда "новые записи всегда сверху"))) Есть партицирование таблиц ..... я тебя понял. я подумаю. в этом есть смысл. согласен. из минусов - надо шатать легаси таблицу. из плюсов - не надо новую таблицу и триггер. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:19 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >поэтому хорошо иметь прослойку между базой и чем то еще. = прослойка это Message Driven Architecture (MDA) О чем тут мембер crutchmaster топит. Тогда бд в самой прослойке в виде сервера будет. Скорость 5-10тыр сообщений в сек Тебе решать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 09:49 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, >поэтому хорошо иметь прослойку между базой и чем то еще. = прослойка это Message Driven Architecture (MDA) О чем тут мембер crutchmaster топит. Тогда бд в самой прослойке в виде сервера будет. Скорость 5-10тыр сообщений в сек Тебе решать. я пока не понимаю как мда привинтить к моему кейсу при всех тех условиях что есть у меня (база как точка интеграции, трогать почти ничего из того что поверх - нельзя). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 10:00 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, СервисА, СервисБ, СервисN, СУБД. Что можно трогать? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 10:26 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант. Нет логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 10:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, Трогать нельзя, но ты наворотил кафку, триггеры, новую таблу под рутом админом и еще терабайты диска под твой вариант. Нет логики. мне надо написать новый сервис который работает с данными из конкретной указанной пальцем бд. и всё. то что я наворотил триггеры - это единственное что я наворотил. что мне НЕ надо - мне не надо трогать существующие сервисы. или надо но там будет дикий рефакторинг. второе приближение - это забрать ответственность тех сервисов что пишут в нужную мне таблицу, получать от них данные по синхронному формату, и уже самому класть эти данные в бд и говорить тем сервисам "да, я положил". тем самым я уже на уровне своей ответственности (наверное) буду знать о всех мутациях происходящих в нужных мне таблицах и как то этими знаниями распоряжаться. ну да.. пока не выяснится что кто то что то забыл и есть еще сервисы которые шатают эту бедную таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 11:41 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов то в случае request/reply на AMQP они просто безумные. Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает. Андрей Панфилов Про производительность очередей байки травить начали именно вы Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок? Производительность при том условии, что нужны все те фишки (или хотя бы некоторые), которые даёт брокер, очевидно. Нахер он вообще твой хттп нужен, когда у тебя две точки и одна из них - не браузер. Закатай штаны обратно и пили лучше монолит, как диды. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:02 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT может кто покритикует такой подход? Тут, хе хе, раббит от "критики" с трудом дышит, а ты собрался через базу и триггеры всё это гонять. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:05 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmaster Ты там nginx где-то потерял по дороге, так что можешь на два умножать свой хттп и в принципе меня всё устраивает. crutchmaster Сам придумал, сам опроверг, сам победил. Молодец. Продолжай спорить сам с собой. Делай в следующий раз это оффлайн, ок? crutchmaster Сисколы и походы по сети не такая уж и дешевая вешчь, как может показаться, прощу заметить. А этих соединений может быть не просто много, а дохерища, так что все эти рабиты придумали тоже не от сильно хорошей жизни на хттп. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:18 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Ну дак погоди брать ответственность за запись в бд. Начни с того что пишешь читающий сервис. Так? Вот и опиши проблему дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:25 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов По дороге там потерян разве что HTTP/1.1 Ну так я и через раббит могу на единственный сервис отправлять запросы пачкой, как в хттп 1.1. Ничего удивительного. Андрей Панфилов Разве не вы писали? А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями? Об этом мой вопрос был так-то. Но нахера его слушать, когда ты самый умный. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:30 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmaster Ну так я и через раббит могу на единственный сервис отправлять запросы пачкой, как в хттп 1.1. Ничего удивительного. crutchmaster А еще писал, что-то там про точки обмена, очереди которые нужны для того, чтобы могли независимо разгребать n сервисов, но ты почему-то не заметил, а заметил то, что тебе удобно. Как там со всем этим будет работать хттп? Почти так же, но с костылями? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2020, 12:35 |
|
|
start [/forum/topic.php?fid=59&startmsg=40001435&tid=2120626]: |
0ms |
get settings: |
3ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
32ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
433ms |
get tp. blocked users: |
0ms |
others: | 3ms |
total: | 483ms |
0 / 0 |