Филипп Вагнер "Распределенные транзакции в условиях микросервисной архитектуры"/M2_TECH Scala Meetup

แชร์
ฝัง
  • เผยแพร่เมื่อ 11 ม.ค. 2025

ความคิดเห็น • 64

  • @bLzshka
    @bLzshka ปีที่แล้ว +12

    Очень понятно и просто обьяснил довольно сложную тему!

  • @radiopapus
    @radiopapus ปีที่แล้ว +25

    Смотрю на первую каритинку с монолитом, все в одном месте транзакции из коробки, понятно как с ними работать. Потом делим это все на домены, получаем сетевые накладные расходы, теряем изоляцию и строгую согласованность, добавляем кафку, добавляем доп таблицы, добавляем message relay. Выглядит это сложно. Доклад хороший.

    • @semenivanoff8615
      @semenivanoff8615 10 หลายเดือนก่อน

      С монолитами тяжелее работать.
      Накосячил в одном месте - не работает все.
      Разделенные среды на домены там все просто и понятно.

    • @neketavorotnikov6743
      @neketavorotnikov6743 9 หลายเดือนก่อน +1

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

  • @ВалдисПельш-е4в
    @ВалдисПельш-е4в ปีที่แล้ว +1

    супер, спасибо. До этого видео думал что saga, это transaction-outbox, то есть когда нам нужно атомарно положить в базу и отправить в очередь. Но оказывается это ток подзадача более общей задач распределенных транзакций))

  • @MicP8
    @MicP8 10 หลายเดือนก่อน +16

    TH-cam нужна опция пропускать все “aaa..”

  • @СергейИванов-ы7ч5ы
    @СергейИванов-ы7ч5ы ปีที่แล้ว +5

    Очень интересный доклад. Оказывается, можно в одной транзакции бронировать в нескольких тормознутых внешних сервисах ;-))

  • @ДаниярКадырбеков-ъ6о
    @ДаниярКадырбеков-ъ6о ปีที่แล้ว +7

    Наконец то хороший доклад где простыми словами рассказано о патерне Saga

  • @intrigant_huev
    @intrigant_huev ปีที่แล้ว +164

    Я б с такой фамилией на самолётах не летал

    • @kuanyshrsymbetov6022
      @kuanyshrsymbetov6022 ปีที่แล้ว +38

      Шойгу Герасимов - где мои 'оркестраторы"?!!

    • @JoelMiller-b9o
      @JoelMiller-b9o 9 หลายเดือนก่อน +2

      В страну 404 самое то

    • @SubaruImprezaEdet
      @SubaruImprezaEdet 6 หลายเดือนก่อน

      @@JoelMiller-b9o а у нас 500

    • @Roman-ov8bi
      @Roman-ov8bi 6 หลายเดือนก่อน

      @@kuanyshrsymbetov6022 7:40 7:41

    • @Roman-ov8bi
      @Roman-ov8bi 6 หลายเดือนก่อน

      @@kuanyshrsymbetov6022 7:50

  • @user13496
    @user13496 4 หลายเดือนก่อน +5

    Хотелось бы услышать как писать этот компенсационный алгоритм, лучшие практики

  • @Iaxls
    @Iaxls ปีที่แล้ว +1

    Прекрасный доклад! Благодарю!

  • @victorm7551
    @victorm7551 3 หลายเดือนก่อน

    спасибо большое за интересный доклад!

  • @dmitriyobidin6049
    @dmitriyobidin6049 ปีที่แล้ว +3

    При двухфакторной аутентификации можно запускать изменения данных в нескольких сервисах параллельно, и только коммитить синхронно. Не обязательно ждать ответа первого чтобы запустить коммит во втором.
    Строгая связность флоу - тоже не очень хорошо, потому что у нас может быть динамический флоу, т.е. чеолвек условно может чекбоксами натыкивать что ему надо, и на основе этого нам нужные разные цепочки? Мы задолбаемся все хардкодить.
    Получается по факту нам опять же нужен какой-то контроллер, который будет решать, какие события он в шину отправляет в рамках конкретного заказа. Надо ли там бронировать машину или нет, а может вместо машины там нужен трансфер. А с трансферами такая лабуда, что некоторые отели могут их предоставлять бесплатно при снятии дорого номера, некоторые за отдельную плату, а у каких-то такой услуги вообще не будет и надо привлекать третью сторону(такси) и т.д. Просто создать 1 флоу не выйдет.
    А получается что в случае саги нам опять таки нужен какой-то координатор, потому что условный сервис бронирования машин не должен знать(а тем более решать) какое действие должно происходить следующим. Поэтому жаль, что не затронули Event sourcing.

  • @timur2887
    @timur2887 25 วันที่ผ่านมา

    А еще сагу можно не хореографией описать а оркестрацией, чтобы отдельные сервисы-оркестраторы вели все саги и управляли взаимодействием конечных микросервисов. Саги так же как в докладе ставить в очереди для outbox с целью повышения надежности при падении/остановке оркестраторов

  • @ГеннадийШушпанов-д1ч
    @ГеннадийШушпанов-д1ч 18 วันที่ผ่านมา +1

    Так может микро-сервисы для этой задачи не подходят?

  • @user-tw4sx
    @user-tw4sx ปีที่แล้ว +3

    Здравствуйте. Как обрабатывать такой кейс, когда например у саги 3-я по счету локальная транзакция не проходит, запускаются компенсационные транзакции на 1-м и 2-м шаге, и валится второй сервис и компенсационные действия на 2-ом и 1-ом шаге не выполняются?

  • @thecftyhn
    @thecftyhn ปีที่แล้ว +12

    Судя по презентации, докладчик не понимает что такое атомарность и согласованность. Например - атомарность, это когда несколько действий воспринимаются как одно. Что будет что после коммита первого сервиса какой-то сторонний сервис поменяет так данные что компенсирующая транзакция не сможет выполниться? Данные первого сервиса доступны (закоммичены) для сторонних сервисов в то времмя когда не закомиченны данные остальных сервисов? И где тут атомарность?

    • @user13496
      @user13496 3 หลายเดือนก่อน +1

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

    • @vitali1002
      @vitali1002 หลายเดือนก่อน

      ​​@@user13496так в этом и вопрос, что второй кейс с невыполнено совсем не прокатит, ты занёс деньги на баланс первого сервиса и пошёл дальше сагой, пока ты там ходишь, кто-то эти деньги уже снял или сам пользователь трансфернул, в саге что-то сломалось и пришла команда все откатывать, а отказывать то нечего, баланс пустой

  • @d31m07y1988
    @d31m07y1988 10 หลายเดือนก่อน +5

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

    • @profile_pub190
      @profile_pub190 8 หลายเดือนก่อน

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

    • @triti77
      @triti77 9 วันที่ผ่านมา

      Тоже интересен этот вопрос и именно из-за него смотрю сейчас разве доклады

  • @JohnJohn31595
    @JohnJohn31595 11 หลายเดือนก่อน +2

    thank you

  • @АлексейПаршин-ч7е
    @АлексейПаршин-ч7е 10 หลายเดือนก่อน

    А может пересмотреть границы микросервисов? Если к примеру выделить агрегат - направление путешествия, то можно в рамках него провести все требуемые бронирования в одной транзакции

  • @yadronn
    @yadronn ปีที่แล้ว +1

    почему Аурус стоит после Майбах?

  • @user13496
    @user13496 3 หลายเดือนก่อน +1

    С false positive не совсем понял. Причем чем здесь вообще саги? Где там сага?

    • @Lyroy__X
      @Lyroy__X หลายเดือนก่อน

      согласен, как-будто бы лютый бред)

  • @igor5379
    @igor5379 9 หลายเดือนก่อน +3

    ждали самую медленную, потом начали ждать все три последовательно. 100% быстрее)

  • @nonpiramid
    @nonpiramid 3 หลายเดือนก่อน

    Если мы накручиваем дорогие, то добавляем и мета для потенциальных ошибок. Если одно из звеньев упадет и не передаст сигнал ни вперёд ни назад? Всё встанет и не понятно как продолжить

  • @YGNETATEL_3000
    @YGNETATEL_3000 9 หลายเดือนก่อน +2

    Вагнер уже и до Программирования дотянулся !

  • @evilLincoln
    @evilLincoln 8 หลายเดือนก่อน +3

    Узнаю Яндекс - все примеры исключительно на майбахах и аурусах

  • @alexandr6055
    @alexandr6055 7 หลายเดือนก่อน +3

    Шойгу, Герасимов, где с...а пдф?😂😂

  • @sfiorashtirliz8132
    @sfiorashtirliz8132 9 หลายเดือนก่อน

    А если в базах добавить еще одно логическое поле "подтверждено" и устанавливать там true если все транзакции прошли успешно. Клиенту в это время можно сообщать, что майбах выбран другим клиентом, но еще окончательно не забронирован. Можно его глянуть попозже.

  • @VyacheslavM1
    @VyacheslavM1 8 หลายเดือนก่อน

    8:35 здесь надо бы сказать, что компенсирующая транзакция тоже может не выполниться.

  • @ДаригаСолопиенко
    @ДаригаСолопиенко ปีที่แล้ว

    Я в восторге, вау 😙

  • @AlexSmith-pd8cn
    @AlexSmith-pd8cn ปีที่แล้ว +1

    Доклад интересный, но вот разрешение видео бы побольше сделать. Сложно смотреть на 4К телевизоре.

  • @Wise___Man
    @Wise___Man หลายเดือนก่อน +1

    лучший совет про сагу - это избегать ее всеми способами, все.

  • @ivani3237
    @ivani3237 ปีที่แล้ว +4

    Dirty read зачем-то какими-то обманутыми транзакциями обозвали

  • @yodo-y3i
    @yodo-y3i 6 หลายเดือนก่อน +1

    пАттерн же

  • @kozhurkin
    @kozhurkin 6 หลายเดือนก่อน

    роскошная рубашка

  • @Sergey09401
    @Sergey09401 2 หลายเดือนก่อน

    бро афигенно рассказывает понятными словами
    но боже неужели нелзя было дома практиковаться чтоб без этих слов паразитов ))

  • @Thief1987
    @Thief1987 4 หลายเดือนก่อน

    Чего он остановиться не может хоть на секунду?

  • @yaroslavlymar6599
    @yaroslavlymar6599 6 หลายเดือนก่อน

    в outbox паттерне сначала читают ивент из очереди, а потом контент этого ивента достают из БД, а не наоборот)

    • @ruslanvanzhula6823
      @ruslanvanzhula6823 3 หลายเดือนก่อน

      Суть же записать евент в базу в рамках транзакции чтобы его не потерять. Как его можно прочитать если он не создался

  • @incognito123q
    @incognito123q 9 หลายเดือนก่อน +1

    Он че вагнеровец

  • @serge4031
    @serge4031 23 วันที่ผ่านมา

    Какой замусоренный язык. Русским его назвать сложно

  • @eugenyvolkov7387
    @eugenyvolkov7387 ปีที่แล้ว +1

    Разберитесь получше, что такое уровни изоляции транзакций, В сценарии названном у вас как false positive - названные уровни изоляции - вам не помогут. эта задача решается только блокировкой на БД или другом каком то общем разделяемом ресурсе.

    • @howicanwin
      @howicanwin 10 หลายเดือนก่อน

      В зависимости от уровней изоляции под капотом также используюся блокировки на затронутые строки. На примере pg:
      * Для read committed - будет наложена блокировка на обновляемые строки и другие транзакции, меняющие те же строки, будут ждать пока транзакция, которая наложила блокировку, её отпустит (произойдет commit или rollback). Затем ожидающие транзакции перевыполнят запрос на обновления и первая из них снова наложит блокировку на записи.
      * Для repeatable read - такой же процесс, но только блокировка накладывается на записи при их выборке через select
      В примере с read committed тоже не должно возникнуть проблем, если запрос учитывает, что машина уже может быть не доступна (по флагу/статусу/кол-ву доступных машин), а не просто обновляет поле записи. Что-то вроде: update foo set availableCount = availableCount - 1 where id = 1 and availableCount > 0.

    • @user13496
      @user13496 3 หลายเดือนก่อน

      Да тоже кажется что не помогут. И вообще при чем там сага была не понятно.

  • @amonix4035
    @amonix4035 6 หลายเดือนก่อน

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

    • @DWGFragaed
      @DWGFragaed 6 หลายเดือนก่อน +1

      Чел ты по-хорошему и описал 2фк