powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
25 сообщений из 265, страница 10 из 11
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003234
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Про delete вы правы.
Но имхо это уже БЛ.
Кому нужно знать такие тонкости? Пусть строят шину сообщений))
Имхо
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003236
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вообще, часто сущности не удаляют. Их адейтет на Не актуальные)))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003243
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Leonid Kudryavtsev,
Два времени в одно поле?
Одна бизнес транзакции нового объекта. Вставка.
...
Так?

Клиентский софт на MS Access, FoxPro, PowerBuilder выдал команду INSERT. Триггер отработал. Время 13:10.
коллеги пошли на бизнес ланч и мы с ними....
В 13:15 запустился сервис выгребания обновлений
вернулись с бизнес ланча, пошли покурили
Покурили, сели за компьютер, вспомнили, что не нажали кнопку сохранить. Нажали. Прошел COMMIT. Время 14:30

В СУБД появилась запись с timestamp insert'а 13:10, которую никто не обработал
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003253
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях.
Это ограничение нужно учесть. При построении систем.
В принципе, ничего страшного.
Архитектура всегда компромисс.
Вряд ли у него будут длинные транзакции. Тогда второй проход джоба заберет эту сущность.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003307
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Время между вставкой и коммитом с разницей под 8 часов

А какая разница с точки зрения написания программы, между "разницей под 8 часов", "разницей под 8 секунд" и "разницей под 8 милисекунд" ?

Я вижу только одну: "разницу под 8 часов" - очень легко тестировать, это плюс
"разницу под 8 милисекунд" - фиг протестируешь и проверишь, это большой минус
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003319
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях
То что долгих транзакций в вебе не бывает (или непринято, или еще что) - это довольно распространенное заблуждение, распространяемое бракоделами, если исходить из UX, то ничто не мешает нам когда мы хотим обновить пару миллиардов записей пользователю в браузер кидать сообщение, что обновился очередной миллион и он у себя будет наблюдать некий прогресс-бар и видеть что система не зависла, а помимо этого существуют еще фоновые задания, которые вообще ничего про пользователей не знают и там транзакции можно сутками держать, собственно, если исходить из того что разница между вставкой и фиксацией может занимать пару секунд, то ничего не мешает этой разнице занимать и пару часов - разница или есть или ее нет, поэтому ваша компенсация этой разницы в виде:
PetroNotC Sharp
select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД
это ни что иное как полная хрень, потому что есть более ровный алгоритм, описанный ранее и работающий в Oracle уже десятки лет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003322
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Хмм.
- если одна сек, то она меньше периода синхронизации БД = 5 мин. Как пример.
То есть вообще не учитывается. Погрешность.
- в ОРМ длинные транзакции не применяются. Тоже можно послать такие клиенты подальше.
Тестировать что? Дайте ТЗ на тест. Райзе ведь не будет.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003325
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Вы спутали бизнес транзакцию и физическую.
Хибер и сервлет обычно 0,01сек.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

>это ни что иное как полная хрень,
= я вашу хрень выше не понял и пруф просил.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003331
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Вы спутали бизнес транзакцию и физическую.
Хибер и сервлет обычно 0,01сек.

вот я пишу:
Код: plsql
1.
2.
3.
begin transaction; // начало запроса
// здесь какая-то логика
commit; // перед отдачей ответа

в каком месте у меня появляется гарантия в 0.01 сек?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003338
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,
Контейнер сервлетов нормально работает и обеспечивает 0,01сек.
Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003342
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Leonid Kudryavtsev,
Хмм.
- если одна сек, то она меньше периода синхронизации БД = 5 мин. Как пример.
То есть вообще не учитывается. Погрешность.
- в ОРМ длинные транзакции не применяются. Тоже можно послать такие клиенты подальше.
Тестировать что? Дайте ТЗ на тест. Райзе ведь не будет.


Что за ерунда про период синхронизации. А если это одна секунда как раз попала на момент синхронизации:
1. Сторона A сделала INSERT
2. прошло пол секунды
3. Сторона B сделали SELECT * ... WHERE timestamp < prev_timestamp
4. прошло еще пол секунды
5. Сторона A сделала COMMIT, зафиксировала транзакцию

PetroNotC Sharp

select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД

Жуткий велосипед и костыль

1. Кто будет принимать решение, сколько миллисекунд достаточно?
2. Кто будет гарантировать, что эти миллисекунды никогда не будут нарушены?
Как пример:
a) программист на ПРОД базе запустил приложение под отладчиком и кусок кода проходить в пошаговом режиме. Такое конечно плохо, но иногда встречается (банально на ПРОД ошибка есть, на ТЕСТ повторить не удается; ПРОД настолько уникальный, что полноценный TEST даже не сделать /например лично отлаживался на серваке, который физически располагался где-то на Лондонской бирже, аналогичного для TEST никто в Лондон не повезет/).
b) сервир приложения выдал INSERT, ушел в глубокий Hibernate ))), вышел из Hibernate и выдал COMMIT.
Сервер приложения развернут на кластере VM Ware которая умеем себя с на ноду перетаскивать
3.
Т.е. принимающая сторона получит и измененые данные и ряд данных, которые она уже ранее обрабатывала? Т.е. на принимающей стороне должен еще быть не хилый компаратор, который сравнивает пришли новые данные или это старый мусор (который обрабатывать не надо) ?

А если таблиц много и разной структуры.... жуть какая-то. IMHO
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003348
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Вот тут мембер пишет про 2 сек 22205323
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003349
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev

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

Вот давайте на примере...

допустим мы имеем такую структуру:
- есть книжка, у книжки автор: book(id, title, author_id, modify_date)
- у автора имя: person(id, name)

Есть внешняя система, с которой мы синхронизируем изменения, система хранит данные в виде book(id, title, author_name) и мы какбы об этом знаем. Что должно происходить когда у person меняется name а нам нужно это как-то отправить во внешнюю систему? Варианты видятся следующие:
- пишем лог что у автора изменилось имя, дальше подключается ETL/ELT и начинается написание довольно стремного кода по выяснению где этот person еще участвует. Завтра разработчики системы добавили еще пару таблиц ссылающихся на person и наш ETL/ELT развалился
- в хибере ловим изменения в person и делаем условный update book set modify_date=sysdate - бизнес-логика за рамки приложения не вышла (аргумент типа "мы можем что-то потерять" - никакой не аргумент, я в предыдущем пункте обосновал), однако получаем дополнительную блокировку на обновляемых строках - идея так себе, потому что мы в СУБД изначально имеем возможность организовывать данные таким образом, чтобы где-то избегать конкуренции, а где-то, наоборот, порождать, тут же получается подход как у некоторых имбецилов, которые хранят данные в виде table(id, json) и у них возникает конкуренция на любой чих
- в хибере ловим изменения в person и вместо update делаем insert into book_log(id, change) - бизнес-логика там где и должна быть, блокировок лишних нет.

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

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

Вопрос изначально был не про репликацию, а про бизнес-события.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003351
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Андрей Панфилов,
Контейнер сервлетов нормально работает и обеспечивает 0,01сек.
Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ


1. Сервер может работать под нагрузкой
2. В Java есть чудо опция Garbage Collection, для которой 0,01 сек - это вообще ни о чем )))
3. Кроме сервера есть еще и сеть .

и 100500 других причин. по которой 0,01 сек это "ни о чем".
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003354
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Контейнер сервлетов нормально работает и обеспечивает 0,01сек
Какой именно механизм гарантиует, что транзакция будет длиться на 0.01 сек, а не две секунды и не час?
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003369
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов
PetroNotC Sharp
Контейнер сервлетов нормально работает и обеспечивает 0,01сек
Какой именно механизм гарантиует, что транзакция будет длиться на 0.01 сек, а не две секунды и не час?
ты должен писать так))))
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003371
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
>это ни что иное как полная хрень,
= я вашу хрень выше не понял и пруф просил.
Ну не знаю... вроде алгоритм простой: в лог пишем не текущую дату, а заведомо бОльшую, заведомо бОльшая дата - это как NULL, но по ней еще индекс можно строить, в итоге запрос в духе "дай там, то что еще не видели" будет выглядеть как "select * from .. where dt > last_seen", без каких-то компенсаций, повторных обработок и пр. Кроме этого, его еще можно раскатывать на несколько консамеров, путем сериализации доступа к логу и выставления "dt" в значение даты запуска.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003375
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не готов спорить, т.к. самого предмета спора в общем-то нет

Андрей Панфилов

- пишем лог что у автора изменилось имя, дальше подключается ETL/ELT и начинается написание довольно стремного кода по выяснению где этот person еще участвует. Завтра разработчики системы добавили еще пару таблиц ссылающихся на person и наш ETL/ELT развалился

Не очень понимает, какой код "по выяснению где этот person еще участвует" нужен.
Если хранилище данные нормализованы как в OLTP, реплицируем табличку и все
Если в хранилище данные денормализованы, архитектор/программисты хоторые проектировали хранилища и так должны знать, куда они этот person позасовывали.

Андрей Панфилов

Вопрос изначально был не про репликацию, а про бизнес-события.

Могу судить только по тем системам. с которыми сталкивался

Даже если бизнес-сущности соответствует 100500 таблиц (например Заказ/Order в OeBS: заказ, строки заказа, скидки/наценки, резерв на складе и 100500 связанных сущностей), то обычно, все равно, есть 1-2 "главные таблицы"

Если нам нужно отслеживать вновь оформленные заказы, то банальный триггер на ORDERS который будет следить за изменением поля Status с "Заказ оформляется" на "Заказ подтвержден".

Если счета в CC&B (Hibernate, Java, Cobol), то аналогично. Большинство действий со счетом автоматически будут менять и саму запись CI_BILLS.

Т.е. отследить бизнес-события наблюдая за не большим набором таблиц - проблем нет.

Ну и хорошо, если приложение разрабатывает одна команда. А если сорцов нет? Или с СУБД может работать сразу несколько приложений разрабатываемыми разными людьми?
(Основная система в офисе, Личный кабинет в I-net, интеграция с платежными системами которые инсертят данные из Сбера и т.к. и т.п.)

Т.ч. называть триггера "откровенные костыли" IMHO перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003383
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
+1
Есть бд и бд- центристкие решения. Она главная и все нормализовано.
И есть трехзвенки в полный рост где нет триггеров.
Все работает и там и там.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40003423
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
реплицируем...
OeBS...
Могу поспорить, что в этом OeBS (тут вроде даже не знают как слово suite читается ) какой-нить org chart представлен не меньше чем десятком таблиц, а может и двумя десятками, так вот в ИС, у которой org chart - это не основная функциональность, нужно из этого десятка таблиц только штуки 3-4, причем уже в другой структуре, а не так как это давным-давно увидели индусы из оракла, к тому же вопрос с репликацией уже был раскрыт здесь
Leonid Kudryavtsev
Т.ч. называть триггера "откровенные костыли" IMHO перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное.
Это уже в духе предыдущего оратора про RPC через очереди сообщений: "пофиг что оно медленно, у кого-то же работает". То что бывают ситуации когда иначе никак (другими словами: архитекторы ИС не предусмотрели отправку событий/запись журнала по основным бизнес-сущностям, а те кто систему сопровождает/интегрируется за десяток лет так и не удосужились написать фиче-реквест), совершенно не означает что в реальности всегда нужно так делать, в особенности когда есть более другие способы.
...
Рейтинг: 0 / 0
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
    #40009491
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллеги, вопрос. тут всё про то же самое - поллинг апдейтов и триггеры )
тут кто-то упомянул что можно не в лог-таблицу апдейты сладывать а выгребать по скажем, полю апдейтед (обновляем строку в таблице, обновляется поле апдейтед, выгребаем по полю).

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

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

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

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

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

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


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