Почему Дядюшка Боб обидел сервисы?

Поділитися
Вставка
  • Опубліковано 12 тра 2022
  • #soer #itubeteam
    Основной канал для общения и публикации новых видео - Телегарм - t.me/softwareengineervlog
    Спонсорство - donate.s0er.ru
    Сайт платным контентом - soer.pro
    Зеркало для видео Дзен Видео - zen.yandex.ru/id/5f578bdf22e2...
    GitHub - github.com/soerdev
    Чат для программистов - / discord
    Группа ВК - codeartblog

КОМЕНТАРІ • 51

  • @S0ERDEVS
    @S0ERDEVS  2 роки тому +1

    Моя телега t.me/softwareengineervlog

  • @vovasokolov768
    @vovasokolov768 2 роки тому +26

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

    • @saint8283
      @saint8283 2 роки тому +1

      Так все вроде просто. Если я правильно понял, то задача должна быть максимально конкретной, тогда она будет универсальной по внешним признакам. Прасинг Json файлов конкретная задача? Да. И при этом она нужна везде. Но ей грозит отдельная функция, а не сервис. Поэтому второе требование, задача должна потреблять ресурсы, чтобы ее было рентабельно выносить. Автор же привел в пример задачу хранения данных, почтовый сервис и онлайн карты. Мне приходит в голову распознавание лиц, маршрутизация, оркестрация, логирование с аналитикой. Если разбивать бизнес логику, тот тут надо прогнозировать, это уже не из области паттернов, а про аналитику. Вообще советуют начать с монолита, а потом отделять. А так принцип тот же что и везде. Что функция, что класс, что компонент должны выполнять конкретную задачу, тогда в больше всяких мест их можно будет запихнуть))) Это и есть low coupling, high cohesion.

  • @AlexP-jc7rz
    @AlexP-jc7rz 2 роки тому +16

    По-моему, Мартин в первую очередь как раз объясняет различия между хорошей архитектурой со слабым зацеплением и сильной связностью и плохой, когда наоборот, и приводит пример, когда сервисы сильно зацеплены и соответственно при изменении данных, это изменение проходит через все сервисы - как пример как раз плохой архитектуры. Далее он объясняет принципы разбиения на компоненты, чтобы уменьшить зацепление и увеличить связность, и говорит, что компонент это может быть как либа, так и сервис.
    Эта основная идея и заложена в Agile principles и Clean architecture Мартина, причем вторая книга действительно довольно поверхностно проходится по проблеме (у нее и объем 200-300 страниц), возможно поэтому складывается такое впечатление что Мартин топит против SoA, но это не так. Он топит против именно кривого SoA и объясняет, что сам по себе SoA, то есть микросервисы - не панацея, и там точно также важна правильная, "чистая", архитектура. В Agile principles есть даже отдельный пример иллюстрирующий этот случай.

  • @grommaks
    @grommaks 2 роки тому +3

    Гладко было на бумаге, но забыли про овраги
    Джуны пишут сервера, старички побитые опытом пишут сервисы…даже в монолите можно написать описанный сервис
    Написать правильно новую службу, это дорого и требует огромных навыков у руководства (лиды, архитекторы, овнеры)…реальность слишком сурова… ещё и скрам подходы часто трактуются таким образом, что спринт производит юзер стори, если юзер не пощупал в конце спринта, значит ничего не наработали…вот из-за этого много кто разрабатывает апи сервиса и сразу же его интегрирует в одном спринте, редактируя по пути версию апи и клиентский код. Да и для бизнеса требования к сервису, часто это потребности клиентского кода.
    В видео примеры сервисов это уже устоявшиеся службы, почтовик, БД и т.д.
    Где АПИ разработан десятки лет назад (SQL это АПИ)
    Возможно стоит прокачивать навыки создания того самого апи и думать не от потребностей клиента, например в этой книге много материалов на подумать
    Проектирование веб АПИ (Арно Лоре)

  • @ITKAMASUTRA
    @ITKAMASUTRA 2 роки тому +7

    За вектор поразмыслить - лайк Соеру! Особенно за… несколько часов - прочитал 🤪 📚

  • @user-yb5rj1or4f
    @user-yb5rj1or4f 2 роки тому +5

    А теперь бы про микросервисы, и их место в сервисно-ориентированной архитектуре

  • @romanlunin386
    @romanlunin386 2 роки тому +1

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

  • @edmond-dantes-1796
    @edmond-dantes-1796 2 роки тому +1

    Вот бы теперь послушать чем отличаются сервисы и микросервисы

  • @m19stv
    @m19stv 11 місяців тому

    Очень хорошую мысль извлёк из ваших слов и мнения. Спасибо вам большое!

  • @soltaurus
    @soltaurus 2 роки тому

    Интересно, благодарю

  • @Gabriel-hg7fl
    @Gabriel-hg7fl 2 роки тому +2

    Интересно было бы послушать про микросервисы!

  • @realfootball338
    @realfootball338 2 роки тому +8

    Потому что их одобрил дядя Сэм 👉. Не знаю как на беке - на фронте микрофронтенды помагают увеличить объемы работы, занять по больше персонала и отмыть по больше баблишек.

    • @user-ur4ev7vl6c
      @user-ur4ev7vl6c 2 роки тому

      так же и на бэке

    • @drovoseg
      @drovoseg 2 роки тому +1

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

    • @user-ur4ev7vl6c
      @user-ur4ev7vl6c 2 роки тому

      @@drovoseg Можно добавить - отсутствие архитектора

  • @user-mo9jb1bx1b
    @user-mo9jb1bx1b 2 роки тому

    Спасибо за разъяснение!

  • @avisalon4730
    @avisalon4730 2 роки тому

    Спасибо за видео! Хорошое объяснение. До этого момента я думал что микросервисная архитектура это модная безсмыслица.

  • @vic7871
    @vic7871 2 роки тому

    Спасибо!

  • @dzeensibir2341
    @dzeensibir2341 2 роки тому +6

    Сделай выпуск пожалуйста подробнее про микросервисы, почему везде в паутине твердят что Go лучший язык для них?

    • @bubblesort6368
      @bubblesort6368 2 роки тому +2

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

    • @phat80
      @phat80 Рік тому +1

      1. Быстрая компиляция - в отличие от других компилируемых языков
      2. Достаточно простой синтаксис - в отличие от C++ или Rust
      3. Скорость выполнения с CG - в отличие интерпретируемых языков и даже в какой-то мере по сравнению с языками, которые выполняются с помощью VM
      4. Легкая и понятная многопоточность (для тяжелых сервисов это особенно важно) - в отличие от любого другого языка, который ее поддерживает
      5. Статическая типизация - в отличие от JS или Python
      6. Стандартная библиотека в большинстве случаев обеспечит все, что необходимо, чтобы запустить микросервис без чего бы то ни было еще. Просто запустил бинарные и сервис работает.

  • @torburgmax
    @torburgmax 2 роки тому +1

    а как субд нам может отказать в обслуживании?

  • @oeaoo
    @oeaoo 2 роки тому +6

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

    • @user-hc1hl2nx8e
      @user-hc1hl2nx8e 2 роки тому +5

      Речь же про "софтварный" сервер, в контексте "клиент-серверного" взаимодействия. А "сервис" в контексте SOA и далее вся разница в видео разжевана.

  • @ostrov11
    @ostrov11 2 роки тому

    ... пишите монолиты, когда и если придёт время нужды в "сервисах" к тому моменту вы уже должны быть в состоянии отдать на аутсорс, или начинайте писать новый монолит ))

  • @basilboluk
    @basilboluk 2 роки тому

    Спасибо, нашёл 4 книги Роберта Мартина. Прочитаю обязательно.

  • @petrplotnikov4307
    @petrplotnikov4307 2 роки тому

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

  • @diatm1506
    @diatm1506 2 роки тому +2

    Я всё думаю в бд связь one to mony albums, genres вот думаю в NestJs контролере дёргать 2 сервиса или создать 2 метода 1 сервиса или в сервисе дёргать 2 репозитория или фильтровать с помощью queryParams по году и жанру с одим сервисом, контролером и репозиторием) В angulare с сервисами проще)

    • @bubblesort6368
      @bubblesort6368 2 роки тому +2

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

    • @diatm1506
      @diatm1506 2 роки тому

      @@bubblesort6368понял спосибо у меня монолит)

  • @david_shiko
    @david_shiko 2 роки тому

    Интересно, но водички много.

  • @SlavaCh
    @SlavaCh 2 роки тому

    Возвращение ошибки с сервера не есть отказ от выполнения обслуживания?

    • @itcloudguy
      @itcloudguy Рік тому

      Да. Ошибка от СУБД означает, что "я не понял, что ты имеешь в виду и не могу выполнить запрос. Если напишешь запрос, который я пойму, то выполню". Потому что это СУБД. И она не вернёт ошибку если ресурс просто не найден.

  • @AlexAlex-ms3bg
    @AlexAlex-ms3bg 2 роки тому

    Так и не понял почему дядя Боб обидел сервисы

  • @skynowa2626
    @skynowa2626 2 роки тому +1

    Сервисный сервис

  • @konstantinchvilyov9602
    @konstantinchvilyov9602 2 роки тому +3

    Думаю, что для ясного понимания необходимо точно переводить "service" и однозначно называть по-русски что подразумеваешь под словом "сервис":
    1.Услуга.
    2.Обслуживание.
    3.Служба.

    • @xander-on-the-earth
      @xander-on-the-earth 2 роки тому +1

      Вы затронули очень острую тему, сейчас такой хейт поднимется. А по-существу, конечно же, правильно. Причём, не только для темы данного ролика - это повсеместно. Иногда можно увидеть целые лекции, где люди пытаются объяснить что-то, хотя достаточно было бы дать точный, не синонимичный перевод. Достаточно взглянуть на инструкцию к любому лекарству в аптеке, чтобы осознать масштаб языковой катастрофы.

  • @madalex8223
    @madalex8223 2 роки тому

    Что-то лайков маловато

  • @stanislavsh6582
    @stanislavsh6582 2 роки тому

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

    • @itcloudguy
      @itcloudguy Рік тому

      Это какая же такая СУБД, чтоб разработчики так извращались? Само ядро любой СУБД это ее типы данных, разработанные раз и навсегда. Изменив что-то в типах можно просто выкинуть продукт на помойку. Вы о чём? О самописной может?

    • @stanislavsh6582
      @stanislavsh6582 Рік тому

      ​@@itcloudguy Пример был гипотетический, на основе реального провайдера pgSql для efCore в дотнете, когда в разработчики с той стороны решили, что все, мы будем кидать эксепшн если не передать таймзону для полей с временем(те что просто DateTime). Да, там дали возможность и по старому работать, но пометили это как легаси.
      Ну так вот, из-за этого, конкретно у нас - пришлось на время всю разработку остановить. А почему? Потому что - вот, они порешали, что не кошерно и вообще - в дотнете некрутое время, а мы - хотим круто, потому - страдайте. Весело - офигеть.

  • @DeceasedMinstrel
    @DeceasedMinstrel 2 роки тому

    Использовать слова "служба" и "сервис" как имеющие разный смысл в русском языке намного проще, чем в английском.

    • @itcloudguy
      @itcloudguy Рік тому

      Они не о разном смысле. Слово "сервис" - иностранное. И на русском означает "служба". Никак иначе.

    • @DeceasedMinstrel
      @DeceasedMinstrel Рік тому +1

      @@itcloudguy Вот и я о том. Автор ролика использует эти слова как имеющие разный смысл. И очень интересно, какой англоязычный смысл он имеет в виду, говоря "служба".

  • @worddoc4322
    @worddoc4322 2 роки тому

    Побуду немного душным и скажу, что вы путаете связанность с зацеплением

    • @AlexP-jc7rz
      @AlexP-jc7rz 2 роки тому +9

      Это вы путаете, потому что связанность это и есть зацепление (coupling), вы перепутали ее со связностью (cohesion), что суть характеристика модуля, когда в нем содержатся близкие по смыслу концепции (это хорошо). Зацепление - это плохо, это количество внешних зависимостей модуля, чем их больше, тем меньше связность модуля и тем хуже.

    • @worddoc4322
      @worddoc4322 2 роки тому

      @@AlexP-jc7rz Оу, благодарю, буду внимательнее

  • @EshkinKot1980
    @EshkinKot1980 4 місяці тому

    Дичь лютая!
    "Сервис, сильно зацепленный на логику вашего приложения, является просто вынесенной службой." А слово service как с английского переводится?
    Чуть ранее в качестве сервиса была упомянута СУБД. ЧЁ??? Где тут низкое зацепление? Разве приложение не содержит слой моделей, которые в точности повторяют структуру таблиц? Или, может быть, приложение продолжает работать после того, как сервер БД прилег?