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

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

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

>проблему или все же задачу?
= я тебе поражаюсь. В школе было
Дано:....
Требуется.....
И мы тебя тоже самое просим.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002758
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;
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002759
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
По этому триггеру бд не встанет под нагрузкой
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002760
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Кроме того, в хибере уже есть счетчик версии сущности int field
Можешь добавить в анализ и его. Но основное это новое свое поле метки времени.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002793
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Кроме того, в хибере уже есть счетчик версии сущности int field
Можешь добавить в анализ и его. Но основное это новое свое поле метки времени.

в хибере много че есть. и интерцепторы и ивенты например. одна проблема. то место где хибер оно как бы нешатаемо и перебирать пару сотен методов или там сущностей чтоб одни махом (все сломать нахер) вариант не очень. нет хибера. забудь про него.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002794
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных? плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002873
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
>представь задачу мне апстрим сервиса одного мало. как мне запустить 5 сервисов которые будут поллить базу и чтоб они выхватывали только свою часть данных?
= мы по кругу пошли?
Проблема в каждом сервисе написать (псевдокод)
select field from t where myupdate > sysdate - 1
?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40002874
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
Новое ТЗ в полтора слова на иврите?
Переведи.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003000
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmasterЭто не очевидно? Ты отправляешь вызов по сети и ждешь, пока придёт ответ. Пакеты тебе могут притди не один
за другим, возможно потребуется повторная передача, по этому же интерфейсу идут пакеты для других приложений и т.д и т.п.
Синхронно (a->b->c) работает только процессор и то не всегда. Спасибо, Ссылкой на спеку не поделитесь ?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003004
mirudom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolchanovМожет это оффтопик, но прежде чем обсуждать паттерны и тебования, попробуй сформулировать, почему и когда
бизнес готов платить огромные деньги за микросервисы, не смотря на огромные проблемы с целостностью данных, cross domain отчетностью, большим временем отклика и т.д.

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

>плюс еще мне ж надо будет где-то оффсет хранить для одного или икс полл-сервисов.
Новое ТЗ в полтора слова на иврите?
Переведи.

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

теперь сервис который гребет по таймстампу. откуда и как ему знать между каким и каким таймстампом ему надо выгребать данные? я про этот оффсет. сверху пример - отметка в базе - ноль записей. тут мне где то оффсет хранить надо или как то сами записи помечать как отгруженные. второй вариант не очень ибо требует апдейт+1
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003026
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.
Константа в зависимости от железа иинагрузки
Например 1000мсек.
- это понятно?
Теперь расскажи откуда консумер знает когда выгребать?
Итого два вопроса.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003035
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
andreykaT,
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.
Константа в зависимости от железа иинагрузки
Например 1000мсек.
- это понятно?
Теперь расскажи откуда консумер знает когда выгребать?
Итого два вопроса.

отличный вариант. а если рассинхрон? ты либо чо нить пропустишь либо задублируешь. а если в какой то момент продюсер упал?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003049
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
1. В моем варианте нет продюсера. Есть сервисА, Б, С, N.
2. Подробнее про рассинхрон сервисаА расскажи. С примерами.
Потом уже про "упал" и космические катаклизмы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003056
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Если мой триггер заменить на твой, то как раз будет рассихрон и дублирование вероятность.
Ваш кеп.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003130
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в моем тригере будет дабл если два раза обновится одна и та же запись. ну заапдейть триггер чтоб был инсерт если больше такого ентити айди нет. либо схлопывай в сет записи и шли мессаджи уникальными айди. но даже тут если вдруг у тебя будет дабл это не так страшно если вдруг айди вообще не уйдет. например, потому что рассинхрон был где то. тут это в принципе исключено. запись делается при коммите, запись всегда будет прочтена. единственный кейс если запись пропадет - это только где то в недрах кафки.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003195
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,

>в моем тригере
= блин, я его спрашиваю про свой вариант. А он сплошным текстом всё в кучу без абзацев.
Попробуй сформулировать мысль с нумерацией:
1...
2...
3...
Где дублирование в моем варианте?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003205
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Ты сначала ответь утвердительно что понял мой вариант.
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД.


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

Если же смотреть на задачу в более общем виде, то идея типа "мы приложение менять не хотим, да и что-то забыть можем, поэтому давайте создадим лог на таблицы, который будем разбирать" - она откровенно так себе, потому что ну очень сильно попахивает ETL/ELT, что в абсолютном большинстве случаев получится какая-то неподдерживаемая хрень, почему так будет:
- если посмотреть на вакансии по ETL/ELT, то там можно невооруженным взглядом заметить, что у них у всех довольно общий паттерн: нужно знать какую-то более-менее распространенную систему, SQL и какие-то скриптовые ЯП начиная от петона и заканчивая шелом, т.е. в целом практика такая, что ETL/ELT обычно строят из говна и палок.
- в бизнес-приложении мы работаем с бизнес-сущностями, а не с таблицами, ровно также если говорить о messaging, то там тоже бизнес события ходят, а в решении "на тригерах" мы сначала бизнес-сущности превращаем в таблицы, а потом из таблицы пытаемся получить бизнес-событие, и при этом утверждаем, что так типа надежно, не нужно ломать текущее приложение и пр., на самом же деле получится так, что чтобы из лога сформировать бизнес-событие, придется в ETL/ELT-поделку воткнуть бизнес-логику, а потом еще придется за этой поделкой следить постоянно - а там вместо вменяемой доменной модели будет какой-то говнокод

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

Пушить в очередь это создать другую архитектуру со своей еще одной бд очереди. Message driven architecture
Перевожу коротко его пост.
- второй его абзац это ответ на ваш триггер с созданием лога изменений.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003225
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Я ни разу не слышал что в субд метка времени на запись имеет проблемы.
Либо я не понял вас. Нужен пруф.

Если я правильно понял Андрея, то он видет проблему в том, что "времени записи" две штуки:
1. когда прошел INSERT
2. когда прошел COMMIT

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

Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг (но плохо для производительности и блокировки), либо бы использовал очередь. Очередь хороша еще и тем, что кроме INSERT?/UPDATE, есть еще и DELETE. А при DELETE метку времени банально некуда ставить.

IMHO

Андрей Панфилов
Исходя из вышесказанного куда лучше немного разломать приложение на хибере чем прикручивать откровенные костыли.


В большинстве случаев разломать может потребоваться почти все приложение. Т.к. бизнес-сущность может встречаться в 100500 местах.

Обычно бизнес сущности более-менее мапятся на таблицу(ы). Т.ч. особой костыльности лично я не вижу. К тому же, задача репликации обычно более системная, чем прикладная. И переусложнять прикладной софт системными задачами, которые легко решить на уровне БД (триггер), тоже особого смысла нет.

IMHO
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003229
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Два времени в одно поле?
Одна бизнес транзакции нового объекта. Вставка.
Может через час если изменения то триггер обновит поле.
Когда job робот будет проходить, тогда он и захватит новый или уже модифицированный.
Так?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003231
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

>Вариант с простановкой времени вот лично мне совершенно не нравится. Я бы или просто измененные записи помечал, а при репликации убирал флаг
= я же про репликацию и отправку куда то вообще не говорил.
Выше 4 умных сервиса САМИ берут изменения.
Если отправлять в кафку или очередь то я аредлагал JOB.
...
Рейтинг: 0 / 0
25 сообщений из 265, страница 9 из 11
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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