|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, Ну дак погоди брать ответственность за запись в бд. Начни с того что пишешь читающий сервис. Так? Вот и опиши проблему дальше. проблему или все же задачу? задача выхватывать обновления из бд по ряду сущностей и перекладывать их в индекс(ы) эластика. детали в общем то не важны. но через бд видится проще в том смысле что не надо шатать текущие сервисы и интегрировать их с кафкой (или отдельными ее топиками). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2020, 12:00 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >проблему или все же задачу? = я тебе поражаюсь. В школе было Дано:.... Требуется..... И мы тебя тоже самое просим. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 04:53 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, > задача выхватывать обновления из бд по ряду сущностей = Так как БЛ ты скрыл, то решение в лоб это не триггер, а JOB в бд. Сканирует с нужной частотой базу по полю myupdate CREATE OR REPLACE TRIGGER trg_products BEFORE INSERT OR UPDATE ON products FOR EACH ROW BEGIN :new.myupdate := sysdate; END; ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 05:01 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, По этому триггеру бд не встанет под нагрузкой ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 05:03 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Кроме того, в хибере уже есть счетчик версии сущности int field Можешь добавить в анализ и его. Но основное это новое свое поле метки времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 05:06 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, Кроме того, в хибере уже есть счетчик версии сущности int field Можешь добавить в анализ и его. Но основное это новое свое поле метки времени. в хибере много че есть. и интерцепторы и ивенты например. одна проблема. то место где хибер оно как бы нешатаемо и перебирать пару сотен методов или там сущностей чтоб одни махом (все сломать нахер) вариант не очень. нет хибера. забудь про него. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 10:32 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, > задача выхватывать обновления из бд по ряду сущностей = Так как БЛ ты скрыл, то решение в лоб это не триггер, а JOB в бд. Сканирует с нужной частотой базу по полю myupdate CREATE OR REPLACE TRIGGER trg_products BEFORE INSERT OR UPDATE ON products FOR EACH ROW BEGIN :new.myupdate := sysdate; END; ты предлагаешь триггером выставлять тихонечко значения в полях на запись вместо того чтоб создать новую запись? выигрыш я тут вижу в том что у нас не будет второй таблицы. ну или только если перформанс этого подхода будет на мульон порядков выше. из минусов.. представь задачу мне апстрим сервиса одного мало. как мне запустить 5 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных? плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 10:33 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >представь задачу мне апстрим сервиса одного мало. как мне запустить 5 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных? = мы по кругу пошли? Проблема в каждом сервисе написать (псевдокод) select field from t where myupdate > sysdate - 1 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 15:52 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов. Новое ТЗ в полтора слова на иврите? Переведи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2020, 15:53 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
crutchmasterЭто не очевидно? Ты отправляешь вызов по сети и ждешь, пока придёт ответ. Пакеты тебе могут притди не один за другим, возможно потребуется повторная передача, по этому же интерфейсу идут пакеты для других приложений и т.д и т.п. Синхронно (a->b->c) работает только процессор и то не всегда. Спасибо, Ссылкой на спеку не поделитесь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 08:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
kolchanovМожет это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д. И это явно не просто хайп, потому что люди умеют считать деньги. Дай свыше им здоровья ! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 09:18 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, >плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов. Новое ТЗ в полтора слова на иврите? Переведи. смотри. сейчас план такой - консамер полит базу, выгребает икс записей, превращает их в мессаджи и пуляет в кафку после успешного пулла (пулл, пулять. ого. надо запомнить), стирает выгребленное из бд. стейта нет. между поллингом упал - всем пофиг. теперь сервис который гребет по таймстампу. откуда и как ему знать между каким и каким таймстампом ему надо выгребать данные? я про этот оффсет. сверху пример - отметка в базе - ноль записей. тут мне где то оффсет хранить надо или как то сами записи помечать как отгруженные. второй вариант не очень ибо требует апдейт+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 11:21 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Ты сначала ответь утвердительно что понял мой вариант. select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД. Константа в зависимости от железа иинагрузки Например 1000мсек. - это понятно? Теперь расскажи откуда консумер знает когда выгребать? Итого два вопроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 12:00 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, Ты сначала ответь утвердительно что понял мой вариант. select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД. Константа в зависимости от железа иинагрузки Например 1000мсек. - это понятно? Теперь расскажи откуда консумер знает когда выгребать? Итого два вопроса. отличный вариант. а если рассинхрон? ты либо чо нить пропустишь либо задублируешь. а если в какой то момент продюсер упал? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 12:23 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, 1. В моем варианте нет продюсера. Есть сервисА, Б, С, N. 2. Подробнее про рассинхрон сервисаА расскажи. С примерами. Потом уже про "упал" и космические катаклизмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 13:47 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, Если мой триггер заменить на твой, то как раз будет рассихрон и дублирование вероятность. Ваш кеп. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 14:00 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
в моем тригере будет дабл если два раза обновится одна и та же запись. ну заапдейть триггер чтоб был инсерт если больше такого ентити айди нет. либо схлопывай в сет записи и шли мессаджи уникальными айди. но даже тут если вдруг у тебя будет дабл это не так страшно если вдруг айди вообще не уйдет. например, потому что рассинхрон был где то. тут это в принципе исключено. запись делается при коммите, запись всегда будет прочтена. единственный кейс если запись пропадет - это только где то в недрах кафки. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2020, 20:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, >в моем тригере = блин, я его спрашиваю про свой вариант. А он сплошным текстом всё в кучу без абзацев. Попробуй сформулировать мысль с нумерацией: 1... 2... 3... Где дублирование в моем варианте? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 07:50 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Ты сначала ответь утвердительно что понял мой вариант. select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД. Что то херня, что то херня если посмотреть как устроены matview логи в оракле, то там в snaptime$$ изначально ставится время, которое довольно далеко в будущем от текущего момента (4000 год чтоли), а никак не текущее время (тут с определением текущего времени не все гладко в плане того, что время вставки в лог - так себе якорь, и время фиксации изменений тоже так себе), а потом записи из лога либо удаляются (если один консюмер), либо snaptime$$ выставляется в дату запуска джоба (если несколько консюмеров), поэтому запрос типа "дай мне что добавилось с последнего запуска" работает более-менее вменяемо. Если же смотреть на задачу в более общем виде, то идея типа "мы приложение менять не хотим, да и что-то забыть можем, поэтому давайте создадим лог на таблицы, который будем разбирать" - она откровенно так себе, потому что ну очень сильно попахивает ETL/ELT, что в абсолютном большинстве случаев получится какая-то неподдерживаемая хрень, почему так будет: - если посмотреть на вакансии по ETL/ELT, то там можно невооруженным взглядом заметить, что у них у всех довольно общий паттерн: нужно знать какую-то более-менее распространенную систему, SQL и какие-то скриптовые ЯП начиная от петона и заканчивая шелом, т.е. в целом практика такая, что ETL/ELT обычно строят из говна и палок. - в бизнес-приложении мы работаем с бизнес-сущностями, а не с таблицами, ровно также если говорить о messaging, то там тоже бизнес события ходят, а в решении "на тригерах" мы сначала бизнес-сущности превращаем в таблицы, а потом из таблицы пытаемся получить бизнес-событие, и при этом утверждаем, что так типа надежно, не нужно ломать текущее приложение и пр., на самом же деле получится так, что чтобы из лога сформировать бизнес-событие, придется в ETL/ELT-поделку воткнуть бизнес-логику, а потом еще придется за этой поделкой следить постоянно - а там вместо вменяемой доменной модели будет какой-то говнокод Исходя из вышесказанного куда лучше немного разломать приложение на хибере чем прикручивать откровенные костыли. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 09:07 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
возможно. как ломать будем? пушить сразу в очередь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 09:10 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Я ни разу не слышал что в субд метка времени на запись имеет проблемы. Либо я не понял вас. Нужен пруф. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:07 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT возможно. как ломать будем? пушить сразу в очередь? Пушить в очередь это создать другую архитектуру со своей еще одной бд очереди. Message driven architecture Перевожу коротко его пост. - второй его абзац это ответ на ваш триггер с созданием лога изменений. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:19 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Андрей Панфилов, Я ни разу не слышал что в субд метка времени на запись имеет проблемы. Либо я не понял вас. Нужен пруф. Если я правильно понял Андрея, то он видет проблему в том, что "времени записи" две штуки: 1. когда прошел INSERT 2. когда прошел COMMIT В триггере Вы скорее всего будете оперировать первым, а реально выгребать со стороны читателя более правильно по второй. Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг (но плохо для производительности и блокировки), либо бы использовал очередь. Очередь хороша еще и тем, что кроме INSERT?/UPDATE, есть еще и DELETE. А при DELETE метку времени банально некуда ставить. IMHO Андрей Панфилов Исходя из вышесказанного куда лучше немного разломать приложение на хибере чем прикручивать откровенные костыли. В большинстве случаев разломать может потребоваться почти все приложение. Т.к. бизнес-сущность может встречаться в 100500 местах. Обычно бизнес сущности более-менее мапятся на таблицу(ы). Т.ч. особой костыльности лично я не вижу. К тому же, задача репликации обычно более системная, чем прикладная. И переусложнять прикладной софт системными задачами, которые легко решить на уровне БД (триггер), тоже особого смысла нет. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:22 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Два времени в одно поле? Одна бизнес транзакции нового объекта. Вставка. Может через час если изменения то триггер обновит поле. Когда job робот будет проходить, тогда он и захватит новый или уже модифицированный. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, >Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг = я же про репликацию и отправку куда то вообще не говорил. Выше 4 умных сервиса САМИ берут изменения. Если отправлять в кафку или очередь то я аредлагал JOB. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:30 |
|
|
start [/forum/topic.php?fid=59&msg=40003026&tid=2120626]: |
0ms |
get settings: |
10ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
33ms |
get topic data: |
2ms |
get forum data: |
1ms |
get page messages: |
429ms |
get tp. blocked users: |
0ms |
others: | 294ms |
total: | 776ms |
0 / 0 |