|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Про delete вы правы. Но имхо это уже БЛ. Кому нужно знать такие тонкости? Пусть строят шину сообщений)) Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:34 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Вообще, часто сущности не удаляют. Их адейтет на Не актуальные))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Leonid Kudryavtsev, Два времени в одно поле? Одна бизнес транзакции нового объекта. Вставка. ... Так? Клиентский софт на MS Access, FoxPro, PowerBuilder выдал команду INSERT. Триггер отработал. Время 13:10. коллеги пошли на бизнес ланч и мы с ними.... В 13:15 запустился сервис выгребания обновлений вернулись с бизнес ланча, пошли покурили Покурили, сели за компьютер, вспомнили, что не нажали кнопку сохранить. Нажали. Прошел COMMIT. Время 14:30 В СУБД появилась запись с timestamp insert'а 13:10, которую никто не обработал ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 10:53 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях. Это ограничение нужно учесть. При построении систем. В принципе, ничего страшного. Архитектура всегда компромисс. Вряд ли у него будут длинные транзакции. Тогда второй проход джоба заберет эту сущность. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 11:16 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Время между вставкой и коммитом с разницей под 8 часов А какая разница с точки зрения написания программы, между "разницей под 8 часов", "разницей под 8 секунд" и "разницей под 8 милисекунд" ? Я вижу только одну: "разницу под 8 часов" - очень легко тестировать, это плюс "разницу под 8 милисекунд" - фиг протестируешь и проверишь, это большой минус ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:28 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Время между вставкой и коммитом с разницей под 8 часов может быть только в десктоп приложениях PetroNotC Sharp select field from t where myupdate > sysdate - КОНСТАНТА_МИЛЛИСЕКУНД ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:42 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Хмм. - если одна сек, то она меньше периода синхронизации БД = 5 мин. Как пример. То есть вообще не учитывается. Погрешность. - в ОРМ длинные транзакции не применяются. Тоже можно послать такие клиенты подальше. Тестировать что? Дайте ТЗ на тест. Райзе ведь не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:48 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Вы спутали бизнес транзакцию и физическую. Хибер и сервлет обычно 0,01сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:51 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, >это ни что иное как полная хрень, = я вашу хрень выше не понял и пруф просил. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:53 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Вы спутали бизнес транзакцию и физическую. Хибер и сервлет обычно 0,01сек. вот я пишу: Код: plsql 1. 2. 3.
в каком месте у меня появляется гарантия в 0.01 сек? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:55 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Контейнер сервлетов нормально работает и обеспечивает 0,01сек. Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 12:58 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:03 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Вот тут мембер пишет про 2 сек 22205323 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:06 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
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 местах. Обычно бизнес сущности более-менее мапятся на таблицу(ы). Т.ч. особой костыльности лично я не вижу. К тому же, задача репликации обычно более системная, чем прикладная. И переусложнять прикладной софт системными задачами, которые легко решить на уровне БД (триггер), тоже особого смысла нет. Вопрос изначально был не про репликацию, а про бизнес-события. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:06 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Андрей Панфилов, Контейнер сервлетов нормально работает и обеспечивает 0,01сек. Если вы НЕ СТОПОРИТЕ ПОТОК И НЕ НАГРУЖАЕТЕ ГЛУПЫМ КОДОМ 1. Сервер может работать под нагрузкой 2. В Java есть чудо опция Garbage Collection, для которой 0,01 сек - это вообще ни о чем ))) 3. Кроме сервера есть еще и сеть . и 100500 других причин. по которой 0,01 сек это "ни о чем". ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:09 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Контейнер сервлетов нормально работает и обеспечивает 0,01сек ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:10 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Андрей Панфилов PetroNotC Sharp Контейнер сервлетов нормально работает и обеспечивает 0,01сек ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:22 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp >это ни что иное как полная хрень, = я вашу хрень выше не понял и пруф просил. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:22 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Не готов спорить, т.к. самого предмета спора в общем-то нет Андрей Панфилов - пишем лог что у автора изменилось имя, дальше подключается 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 перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:26 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, +1 Есть бд и бд- центристкие решения. Она главная и все нормализовано. И есть трехзвенки в полный рост где нет триггеров. Все работает и там и там. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 13:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev реплицируем... OeBS... Leonid Kudryavtsev Т.ч. называть триггера "откровенные костыли" IMHO перебор ))) Вполне нормальное, древнее, проверенно и работоспособное решение. В ряде случаев - единственное доступное. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2020, 14:32 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
коллеги, вопрос. тут всё про то же самое - поллинг апдейтов и триггеры ) тут кто-то упомянул что можно не в лог-таблицу апдейты сладывать а выгребать по скажем, полю апдейтед (обновляем строку в таблице, обновляется поле апдейтед, выгребаем по полю). собссно вопрос следующий, понятно что выгребать по таймстампу от сих до сих. тут кто то упомянул опцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2020, 17:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT, авторопцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого? Может ты сам разберешься, надо сервису знать когда он что выгребал или у него плохо с памятью? Например, на sql.ru надо знать чтобы подсветить красным новые топики. Теперь соберись ты и расскажи тебе это зачем. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2020, 18:35 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp andreykaT, авторопцию что не надо сохранять последние выгребленные данные и можно как то так знать смещение.. вопрос.. как? я вижу что мне в любом случае как сервису надо узнать какие последние обновления я ыгребал (скажем, хранить где то в хранилище последний успешный процесс, типа от сих до сих выгребли). можно как то без этого? Может ты сам разберешься, надо сервису знать когда он что выгребал или у него плохо с памятью? Например, на sql.ru надо знать чтобы подсветить красным новые топики. Теперь соберись ты и расскажи тебе это зачем. о точно это был ты. и вроде говорил что эт оможн окак то делать без сохранения стейта. зы. я уже вроде рассказывал выше. нужно просто по набору данных строить индексы в эластике и всё. данные изменились находим соответствующие документы - актуализируем. всё. ну далее сверху обвес по работе с этими индексами. ничего особого. интегрироваться с сервисом через какой нибудь брокер тема так себе потому что там 100500 мест что шатают базу. кроме того там в целом, не один сервис который шатает эту базу. итого одно из решений (помимо всяких брось сообщение в кафку при апдейте) -- сделать триггер который логгирует апдейты (создание) записей. поверх этой таблицы стоит сервис, что выгребает все накопившиеся изменения оттуда по таймеру и говорит индексатору положить новые обновить старые нужные документы. второе решение - меняющий значения в бд сервис собссно да шлет мессадж в брокер. за брокером консамеры эти мессаджи соответственно разбирают. третье решение - вроде ты озвучивал. по полю апдейтед выгребать нужные обновленные записи и говорить об этом сервису который держит эластик индекс ап ту дейт. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2020, 20:07 |
|
Как нынче принято реализовывать взаимодействие между микросервисами учитывая OpenAPI?
|
|||
---|---|---|---|
#18+
andreykaT о точно это был ты. и вроде говорил что эт оможн окак то делать без сохранения стейта я говорил что сервисы не тупые а умные. И не могу представить себе что он не помнит вообще ничего. авторитого одно из решений (помимо всяких брось сообщение в кафку при апдейте) -- сделать триггер который логгирует апдейты Мы по кругу пошли? Я говорил про поле с меткой времени и JOB раз в минуту обнаруживает все изменения. Далее делай что хочешь. Сколько можно про одно и то же? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2020, 22:28 |
|
|
start [/forum/topic.php?fid=59&msg=40003383&tid=2120626]: |
0ms |
get settings: |
23ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
429ms |
get tp. blocked users: |
2ms |
others: | 288ms |
total: | 813ms |
0 / 0 |