powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / soa eventual consistency
14 сообщений из 14, страница 1 из 1
soa eventual consistency
    #39417413
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположим есть сервисы a, b, c.

Сервисы b и c имеют два метода пополнить/списать со счёта, у каждого своя БД соответственно. То есть сервис a дергает сначала b списать 100 рублей со счёта xxx, а затем сервис c зачислить 100 рублей на счёт xxx.

Как избежать не консистентности в данном случае, когда средства списались в базе b но ещё не зачислены в c? Никакие two phase commit/atomic transactions здесь не помогают, тк коммитятся все равно последовательно базы.

Допустим у нас есть сервис d который лезет в базы b и c и строит отчёты, тогда например вполне вероятен вариант, что на счёте xxx будет в данном примере 0 рублей.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417417
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Как избежать не консистентности
Никак. У тебя распределенная система.

Ищи другое решение. Например все сервисы сливают сервису X свое состояние, ты делаешь запрос к X где все всегда консистентно.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417418
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Тогда логичней было бы вообще объединить сервисы b и c в один, но это все противоречит духу soa, где у каждого сервиса своя база. Прикол в том, что ценной инфы по этому поводу очень мало, обычно пишут типо вам нужны distributed transactions, дак они это тоже не решают. Как вообще на практике такое решается? Надо строить отчёт по данным 20 сервисов например, естественно пока мы читаем оттуда данные туда могут понапихать еще, в результате отчёт будет кривой. Вот как такая штука решается, кроме использования общей базы?
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417421
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО у тебя в архитектуре проблемы. Назначь главным b или c, но один. И опрашивай только его, а не объединяй ответы обоих, их нельзя объединять.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417422
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tno56892Как избежать не консистентности
Никак. У тебя распределенная система.

Ищи другое решение. Например все сервисы сливают сервису X свое состояние, ты делаешь запрос к X где все всегда консистентно.
Просто сливать инфу не получится кстати, так как его тоже будут последовательно дергать, ну можно конечно ввести уникальный айдишник транзакции и сколько сервисов должно отчитаться, тогда в чревисе х мы для каждого айдишника тупо накапливает все изменения , все сервисы по этой транзакции от читались - ок сливаем в базу сервиса х, вот там консистентности будет. Но это ж какая нагрузка , явный боттлнек, ушли от монолита пришли к такому...хотя как вариант интересный
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417431
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как бы можно было сделать теоретически:
Пусть есть n сервисов и менеджер транзакций t.
Шаги коммита:
1.транзанкш менеджер мультикастом шлёт precommit n сервисам, они отвечают ок
2. Транзакшн менеджер шлёт мультикастом commit-lock всем сервисам, что означает поставить все чтения/записи данных, которые затронули изменения в данной транзакции в очередь и применить эти изменения, получить подтверждение
3. Транзакшн менеджер шлёт мультикастом всем unlock
Вот здесь норм должно быть, только это уже совсем не rdms..
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417434
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
Не, это тоже неконсистентно, тк если сервис1 в состоянии lock-commit, а до второго ещё оно не дошло, то если какойлибо третий обратится в этот момент, то в сервисе1 он встанет в очередь и потом получит новое значение, а в сервисе2 успеет достать старое ещё до lock-commit
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417439
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892, можно в сервисе "a" завести ленту бизнес операций типа проводки.
а сервисы "b", "c" синхронизировать с ней. Можно даже постфактумом.

Главное чтобы ошибка или непринятие пополнения или списания фиксировалась
в журнале "a" тоже как откат или коррекция.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417443
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Это как раз таки решает two phase commit.
Проблема то не в этом, а в data consistency.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417444
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда забей. Консистентность такого уровня о котором ты говоришь может обеспечить
разве что Oracle RAC.

Или у тебя своё (другое) определение консистентности в рамках имеющейся инфраструктуры
и его (это понимание) необходимо как-то определить и формально описать.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417446
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Oracle RAC это жеж вроде как обычный master-slave, совсем не по soa'совски.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417451
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В RAC нету master-slave.
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417460
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Ну все равно это не подходит, тк подразумевает объединение двух сервисов в один с общей базой и так в итоге приходим к монолиту...
...
Рейтинг: 0 / 0
soa eventual consistency
    #39417473
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь в рассуждениях где-то есть неточность.

Цитирую
Допустим у нас есть сервис d который лезет в базы b и c и строит отчёты, тогда например вполне вероятен вариант, что на счёте xxx будет в данном примере 0 рублей.

Вот с этого места - неверно. Никакой сервис d не может ходить в базы b и с и строить отчеты. Нет единой точки
где есть сведения счетчиков транзакций.

Пожалуй эта точка существует только со стороны наблюдателя который сидит в сервисе A. И то при условии
что мы смотрим сквозь контекст транзакционного менеджера который делает проводки.

Поэтому и проводки и отчеты можно делать только со стороны сервиса A.

Если на сервисы b,c смотреть отдельно со стороны то в классификации CAP мы будем иметь полную AP
модель. Тоесть доступность есть (A). И есть разделение (P) (b,c разделены и полностью независимы) а consistency - остуствтует.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / soa eventual consistency
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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