Целостность данных в микросервисной архитектуре / Николай Голов (Avito)

Sdílet
Vložit
  • čas přidán 13. 01. 2019
  • Приглашаем на конференцию Saint HighLoad++ 2024, которая пройдет 24 и 25 июня в Санкт-Петербурге!
    Программа, подробности и билеты по ссылке: vk.cc/cuyIqx
    --------
    --------
    HighLoad++ Siberia 2018
    Тезисы и презентация:
    www.highload.ru/siberia/2018/a...
    На дворе 2018 - все любят микросервисы и пилить монолиты.
    При этом у монолита с единой базой есть плюс - целостность и согласованность данных о, например, списании денег за услугу и применении услуги можно гарантировать обычной транзакцией на уровне СУБД (PostgreSQL, Oracle и т.п.).

    --------
    Нашли ошибку в видео? Пишите нам на support@ontico.ru

Komentáře • 34

  • @petrkassadinovich2705
    @petrkassadinovich2705 Před 4 lety +13

    Хороший доклад по очень важной теме, спасибо!

  • @kostiatretyak
    @kostiatretyak Před 3 lety +1

    Спасибо за базовые идеи. Можно увидеть лез за деревьями

  • @native-nature-video
    @native-nature-video Před 9 měsíci

    Супер лекция. Спасмибо!!!

  • @antonkuranov
    @antonkuranov Před 2 lety +1

    23:23 гарантировать отменяемость можно только в случае, если данные еще не были использованы другой транзакцией перед их отменой. Поэтому либо собираем на коленках свой 2PC, либо менеджим транзакции по принципу blockchain.

  • @user-jd2xr7bf2t
    @user-jd2xr7bf2t Před rokem

    Saga: choreography based Персистентная шина RabbitMQ подойдет? или все таки Kafka?

  • @YarikYarik-tm5ns
    @YarikYarik-tm5ns Před 2 lety

    Здравствуйте Николай. А как реализовано ведение документации DWH (S2T)б как происходит синхронизация с кодом?

  • @user-alexsumin
    @user-alexsumin Před rokem +5

    Доклад Константина czcams.com/video/OOP_4kuzaWI/video.html

  • @sergpushkarev7461
    @sergpushkarev7461 Před 2 lety +1

    Отлично изложена теория

  • @dgarfgnom
    @dgarfgnom Před 3 lety +4

    30:36
    Не понятно, про какой сервис саг говорит докладчик для саги на хореографии?
    Если, который откатывает и монитрит саги, то это получается оркестратор, а это уже другой подход

    • @kostiatretyak
      @kostiatretyak Před 3 lety

      Следующий доклад про оркестратор послушай

  • @vasyaanonov64
    @vasyaanonov64 Před 3 lety +9

    Не надо говорить, что чего-то нельзя.
    Всё можно, надо знать плюсы и минусы.
    и не надо становиться авито - авито - это УГ какое-то неюзабильное.

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 Před 5 lety +3

    Огромное спасибо! Таки взрыв мозгов :)
    хорошо, что на русском! :)

  • @vadimosipov2147
    @vadimosipov2147 Před 5 lety

    Я правильно понимаю, что если Service1 посылает событие в шину, то это событие примет Saga по каналу Service1-Saga и перешлет в Service2 по каналу Saga-Service2, далее результат Service2 отправит в Service2-Saga и т.д.?
    Все взаимодействие делается через Saga с помощью шины, т.к. только она знает структуру зависимостей?

    • @ivangorsky7537
      @ivangorsky7537 Před 5 lety +4

      Вроде нет. При старте микросервис отправляет в Сагу свои параметры (после кого запускается, обязательный или нет). Все микросервисы используют единый (общий) канал связи. Для примера возьмем регистрацию. При поступлении события new_user микросервис, ответственный за это событие, обрабатывает событие и кидает событие new_user_ok (типа выполнил), микросервис, который стоит за ним, например, рассылка, ловит уже событие new_user_ok, отправляет email пользователю и шлёт событие reg_email_ok (на случай, если кто-то хочет подписаться за этим сервисом). В свою очередь, Сага тоже читает все события и смотрит, если микросервис 1 обязательный и в канале не было события new_user_ok, то отменяет все действия. Сага читает канал наравне со всеми и если сервис Саги сломался, отменить действия он сможет после починки, но вся система при этом не выходит из строя. Из минусов, то что все события летают ко всем сервисам. Нужна какая-то шина доставки данных с фильтрами. Но это я так понял и я мог совсем не так понять концепцию. То что Вы описали, больше подходит под описание оркестрируемой саги. Не знаю почему все так за хореографическую, по моему мнению, в ней очень много мест для непредсказуемого поведения и канал связи тоже может подвести, как и оркестрируемая сага. Из плюсов только гибкость системы, но хорошо продуманная оркестрируемая сага может обладать хорошей гибкостью. Надеюсь, Авито обнародует результаты своей работы.

    • @xfg9183
      @xfg9183 Před 4 lety +4

      @@ivangorsky7537 я вообще не понял, что за бред нес докладчик про какое-то вписывание чего-то там в хореографическую сагу, когда во всех статьях, хореография описывается просто как набор событий, на которые подписываются другие сервисы и выполняют свою логику. Откат также происходит по событию, просто при ошибке вместо reg_email_ok отправляется reg_email_fail. И всё. Нет больше ничего. Нет по-сути никакой саги вообще. Оркестрируемая сага там да, она представляет из себя некую сущность, в которой описывается последовательность шагов и компенсирующих шагов на случай сбоя.
      Хореография - сервисы выполняют некую логику по событию.
      Оркестровка - некая сущность сама вызывает нужные сервисы и после сбоя помнит с какого шага продолжить и в каком направлении.
      Кроме того, в этих же статьях пишут, что хореография - это ад, если бизнес-процесс состоит из 3 и более шагов и что в таком случае, лучше использовать более продвинутый подход - оркестрацию.
      Видимо мы с докладчиком разные интернеты читаем. При хореографии если сервис не обязательный, он просто не генерирует события при неудачах и на это просто никто не будет реагировать. Вот и всё. Всё управляется событиями. Не нужно тут лепить еще какую-то хрень в которую сервис отправляет свои параметры (после кого запускается, обязательный или нет). Зачем?

    • @ivangorsky7537
      @ivangorsky7537 Před 4 lety

      @@xfg9183 а если сервис не в состоянии сообщить об ошибке? Внезапно умер.

    • @xfg9183
      @xfg9183 Před 4 lety

      @@ivangorsky7537 если сервис умер, то событие для него останется лежать в очереди. Сервис поднимется, обработает событие и в свою очередь сгенерирует успешное событие reg_email_ok или не успешное событие reg_email_fail и так далее по цепочке. Падение сервиса ничего не ломает.

    • @ivangorsky7537
      @ivangorsky7537 Před 4 lety +1

      @@xfg9183 а если задача должна быть выполнена за 10 минут, а сервис поднялся через 20? То мы fail получим только через 20 минут. Но это пол беды. При таком подходе каждый сервис должен хранить логику обработки ошибок.
      Например, при использовании саги, сервисы должны уметь только обрабатывать событие и откатываться. Решение кому и когда откатываться принимает сага.
      Если же сервисы сами ловят fail-события, то логика работы системы становится размазанной по сервисам, менее прозрачной и неизвестно что и как себя поведет при очередном fail-событии.

  • @gekacrazy
    @gekacrazy Před 5 lety +7

    Никакой конкретики

  • @OStrekalovsky
    @OStrekalovsky Před 5 lety +5

    Ещё один доклад о сагах, ничего нового.

    • @ivangorsky7537
      @ivangorsky7537 Před 5 lety +1

      Если не составит труда, дайте, пожалуйста, ссылки на ещё видео по сагам. Не могу найти :(

  • @eld4j
    @eld4j Před 11 měsíci

    еба крист новоселич

  • @user-st1sc2ow3o
    @user-st1sc2ow3o Před 3 lety +10

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

    • @kostiatretyak
      @kostiatretyak Před 3 lety +5

      Докладчику просто самому интересно какой сейчас уровень у разраблтчиков

    • @omgoood
      @omgoood Před 10 měsíci

      Наливает воду в доклад

    • @i.p.1832
      @i.p.1832 Před 7 měsíci

      Попробуйте это в своих докладах, поймете зачем