Классное видео, спасибо. Давно тебя не было. По поводу проблем с микросервисами: мой опыт показывает, что все беды из-за человеческого фактора. Основная проблема большинства это создание микросервисов ради создания микросервисов (что прослеживается и по примерам в видео). В этом случае почти любая новая фича выносится в отдельный сервис особо не задумываясь, а надо ли ее выносить в отдельный сервис. На моей практике микросервисы далеко не всегда такие микро, как все думают. И кстати RPC или REST далеко не самые хорошие способы коммуникации между сервисами. Вообще тема огромная конечно, могу говорить о ней бесконечно :D Я бы еще добавил, что у идеальных микросервисов довольно высокий порог входа для бизнеса: 1. Нужны инженеры, которые в теме про всякие саги, транзакционность, брокеры сообщений и так далее 2. Нужна devops культура в компании и штат devops инженеров 3. Нужен сильный архитектор, который будет в состоянии за этим следить 4. Критически важно иметь хороших product managers особенно для проработки спецификаций Для небольших компаний, увы, этот подход чаще всего не является выгодным.
Микросервисы редко пилят с 0, обычно либо команда готовая есть, которая на кафках/кассандрах/тарантулах собаку съела, а также реактивщине и обычной асинхронщине уровня узла через блокирующую многопоточку с мутексами-семафорами. Либо это легаси, проекту от 5-7 до 10-15 лет, и он либо монолит, который внезапно наконец дорос до клиентской базы, раздавливающей любое вертикальное масштабирование, либо монолит в свое время распилили в SOA с SOAP-контрактами и система тоже перестала справляться с нагрузкой, т.к. топология "звезда" и ESB-шина стала точкой отказа, т.к. в единственном экземпляре, в кластер не засунешь. Здравстуй новый раунд хантинга и просьба рекрутерам искать кандидатов с "MSA-архитектурой" в резюме, дабы всё попилить.
@@НикитаГлухов-п5ю Наивный, в одном из проектов архитектор, ради удовлетворения своей течки на МС с ходу нарисовал схему из 4-х бэкхенд микросервисов, и 3-х фронтов, мы ох***, но его было не переубедить
На мой взгляд самая большая проблема в том, что иногда, до решения задач допускаются люди совершенно в них не компетентные. И тогда мы имеем наносервисы из говна и веток и мегалиты с неподдерживаемым кодом.
@@AndreySvyat ну в отдельно взятой компании может быть че угодно, речь была о том как переходят на MSA в большинстве случаев, так как стрёмно, если куча бабла вылетит в трубу из-за необоснованных ожиданий и непонимания уместности подхода.
Отличный анализ, поддерживаю идею о том что начинать нужно с монолита, а микросервисы внедрять по мере необходимости. Да и приставка микро мне кажется тут лишняя. Я считаю что бить приложения на части нужно в двух случаях, о первом вы рассказали в видео, когда растет нагрузка на какую-то часть и ее нужно срочно масштабировать, второй когда над приложением работает большая команда, тогда можно вынести часть бизнес контекстов в отдельное приложение и разделить команду. Что касается баз данных то я считаю что крупный монолит тоже должен работать на нескольких базах данных, отдельная база данных для каждого boundary context (DDD). Проблему кучи мелких запросов может решить паттерн CQRS. Коммуникацию между контекстами лучше изначально делать асинхронной используя event driven архитектуру. Монолит спроектированный таким образом очень легко разбивается на сервисы по границам бизнес-контекстов.
1) монолит лучше микросервиса 2) в микросервисе упрощается обслуживание гита 3) правильно распиленный по ddd микросервис отлично борется с техдолгом 4) микросервисы - это от безысходности, а не от того, что лучше
Был опыт не совсем микросервис, но делили написание функционала по языкам: На golang стримили видео, а взаимодействие с базой полностью на python. Такой вот микро-микро сервис был. Спасибо за интересный разбор интересной темы.
Приятно слушать думающего человека. Спасибо и удачи! Абсолютно так и есть, и честно говоря, все еще хуже, и просвет не намечается. Какую технологию не возьми, монолит, трехзвенку, микросервесы и т.п., если критическое количество разработчиков с кривыми ручками превосходит порог выносливости системы, то никакая архитектура не спасет. Программер должен всю жизнь учиться, иначе выходит только г**нокод. Я сам программер 25+ лет, и все встречавшиеся проблемы были только в квалификации и прилежности программеров, не в архитектуре. Один раз правильно написанный код работает десятилетиями.
С праздником! Мне очень нравится твой видео, я на втором курсе в Румынии и мне твой видео очень помогают. Можешь сделать и видео про алгоритмы и структуры данных? Спасибо!
Привет, досмотрел до горизонтального масштабирования, не очень понял как можно горизонтально масштабировать монолит, что делать с базой данных, предпологается что бд должна поддерживать шардирование или как?
Согласен с тобой. Из моей практики, писал и монолит очень большой и микросервисы. И в монолите люди творили такое, что на голову не одеть. Но все решалось жесткими ревью и автоматизацией проверками. А вот с микросервисами беда, не все видели очевидных проблем, типа ретраев, таймаутов, идемпотентности api, транзакционности процессов и почему нужно делать саги и тд. Микросервисы это намного сложнее и требует понимания распределенных систем, и хорошей квалификации разработчиков.
Все правильно, микросервисная архитектура это очень не просто. Distributed transactions, eventual consistency, resilience: retries и timeouts - это все не бесплатно, только вот звучит как решение всех проблем. Да, уже есть много инструментария и он довольно неплохой, но он однозначно увеличивает сложность приложения.
Сопоставление микросервисов и монолита всегда обречено на провал... Микросервисы это почти всегда следующая стадия развития монолита, а не его альтернатива. Я бы сказал что цепочка такая: монолит -> SOA -> микросервисы. Если ваша система не может быть поделена на высокоуровневые сервисы в SOA, то и в микросервисы соваться не стоит. Касательно плюсов микросервисов - один из самых главных это возможность разделить ответственность по командам. Если у вас такого нет, и разрабы не ноют "да нам надоело ждать, пока они там свой спринт подготовят в своем команде Х" - то почти наверняка вам не нужны микросервисы. SOA - почти всегда золотая середина, к которой стоит стремиться.
У меня пока, к сожалению, не было реального опыта работы с микросервивасами, но у меня о микросервисах сложилось впечатление, что из-за тренда их неправильно воспринимают, и во многом, мне кажется, это вина маркетологов, которые продвигают технологию просто ради технологии. В реальности, часть проблем, которые были освящены в видео объеденяются под одним названием: "Распределённый монолит". И на хороших курсах по микросервисам рассказывают, что "Распределённый монолит" != "Микросервисы". По хорошему, любую книгу надо начинать со слов "Плохая идея начинать писать приложение сразу на микросервисной архитектуре. Правильный подход - это пилить монолит." Т.е. сначала вы пишете хороший модульный монолит (в иделе, возможно, следуя DDD, ведь в последствии bounded context'ы помогут вам проще вытащить сервис из монолита и посадить на отдельную инфраструктуру), а затем уже смотрите на узкие места в вашем приложении и выделяетет их в микросервис. И да, вы не обязаны "когда-нибудь в будущем" целиком переходить полностью на микросервисы, распилив весь монолит. Часто это не нужно, ведь приложение отлично работает и в формате монолита с выделенными на отдельные машины и замасштабированными парочкой микросервисов, которые ГРАМОТНО изолированы, чтобы была честная отказоустойчивость. Т.е. к микросервисам, как и к любой другой технологии в принципе, надо подходить исходя из потребности, а не из трендов. Тогда польза микросервисов будет уже более явной. По поводу разных языков, тот же Amazon, на сколько я слышал, все микросервисы пишет на Java и запрещает использовать другие языки. Т.е. не нужно следовать тренду, а просто исходить из потребностей бизнеса (:
Касательно разных языков - это больше маркетинговая уловка. Ни одна компания не будет пилить микросервисы на чем попало(всмысле отдавать выбор языка на откуп программисту/команде). А если придется писать свои собственные решения для какой-то узкой области? Как потом его переиспользовать в своей же системе, если изначально это решение писалось на Go, а соседний микросервис где мы хотим это решение заюзать написан на Java? Поэтому зачастую в компаниях с большой микросервисной архитектурой есть списки разрешенных языков для использования. Шаг влево - надо согласовывать.
Я раньше думал что монолит это словная и не поворотливая штука, но сейчас я смотрю на проект на микросервисах и понимаю что не всё так плохо, особенно напрягает, не структурированные связи (с одного сервиса мы получаем одно с другово другое )
Привет. Вы правильно сказали что микросервис рассчитан на "задачу", а точней контекст. При таком подходе мы не должны смотреть что написано в том микросервисе, мы специалисты в своём контексте. В целом вся суть в том, что команда работает над одним или несколькими контекстами, но не наоборот. Команды изолированы друг от друга, и нет универсальных разработчиков. Конечно у микросервисов очень много минусов, и самая основная это в понимании разделения - в большинстве случаев это монолит(в класическом понимании) с удалённый вызовом процедур, а приставку "микро" рассматривают как "микросервис должен делать что-то одно и максимально простое". Из-за этого и получается что нужно постоянно смотреть код другого микросервиса, а решение той или иной задачи сводится к редактированию N микросервисов.
Ксения, здравствуйте. Спасибо за ролик! Я совсем новичок и мне интересна тема микросервисов. Но я сильно путаюсь в понятиях микросервисов/веб-сервисов и API. Может быть, вы бы смогли грамотно объяснить разницу? Я так понимаю, что микросервисы это именно архитектурный стиль, то есть у нас есть много разных веб-сервисов под каждую задачу. Например, user service, payment service, и тд. Но в свою очередь, веб сервисы являются web API. Правильно ли я понимаю, что микросервисы это и есть APIs, которые представляют собой список эндпоинтов, методов (get, post, etc)? Или же есть API как входная точка, и он в свою очередь перенаправляет реквест на какой-то микросервис? Буду очень благодарна за ответ!
Спасибо за обзор книги!, - теперь точно читать не буду. Про рост сложности там даже без дополнительных балансеров хватает - нужно собирать логи, метрики, обеспечивать распределенную трассировку, дебаг, зависимости, преемственность изменений апи, tail latency становится хуже просто за счет большего колва вызовов внутри системы, аутентификация, авторизация, шифрование трафика и тд.
Возможно в книге шла речь о крупных монолитах где сложная беспорядочно переплетающая инфраструктура только для одного узла, во внутрь обеспечивая сильную связанность. Поддержка таких систем сильно сложна и не поддается какому-то быстрому анализу. По поводу кода, в больших монолитах нельзя так просто взять и найти что-то, они операются только на программную архитектуру, только знание программной архитектуры помогает хоть как-то понять как это все работает) Я думаю автор книги не достаточно раскрыл тему, чтобы донести мысль.
Да с микросервисами все так, там много кода и все сложно. Но поверьте есть монолиты, в которых есть тупиковые ситуации и они как неповоротливые гиганты, с ними сложно (не подходящее слово) работать. Если с микросервисами сложно то с монолитом тупик, костыли, нереально, невозможно... Такие фразы там норма
Спасибо! Видео прям в точку, очень актуальное для меня. Как раз к нам недавно пришел новый архитектор со стороны заказчика, и хочет всё перефигачить на микросервисы. Моя аргументация, почему это лучше не делать, очень похожа на ту, что в этом видео.
Вроде микросервисы для двух вещей: во-первых, если кодовая база большая и разрастается еще больше, в этом случае поддерживать микросервисный код в перспективе будет проще (но не сразу); во-вторых, это точечное масштабирование. Еще небольшая причина - это когда команды разные и на разных языках пишут, но это редкость.
С прошедшим праздником! Спасибо за видео, натолкнуло на разные мысли и, да, понимаю что тема очень обширная и имеет множество вариаций. Не уверен что такие термины как монолитная и микросервисная архитектура можно применять для сайтов которые чуть больше чем простой блог, но я попробую :) На моем опыте были два сайта что имели схожий функционал, но бек энд одного был в рамках одного фреймворка что стал CMS'кой этого сайта, а у второго бек поделили на несколько частей. Оба этих сайта имели страницы со "статичным" контентом, новостные ленты, интернет магазин и личный кабинет пользователя. И во втором случае за интернет магазин отвечал свой бек, за личный кабинет свой, а все остальное ушло в третью часть бека. И, как по мне, работать с этим вариантом было куда удобней чем когда все крутится в одном месте. Эти "сервисы" были, почти полностью, независимы друг от друга (разве что айдишниками перекидываются если контент одного таки был связан с контентом другого сервиса), результат которых приходил на фронт, где по rest api, где через graphql. И если надо что то доделать на стороне, например на стороне интернет магазина, то ты попадаешь в проект который только этим и занимается, что было удобней чем лавировать по беку одной CMS'ки где все, очень грубо говоря, в одной куче, особенно когда это касается вьюшек с html кодом. Понимаю что по микросервисам можно упоротся так что каждая кнопочка станет отдельным микросервисом внутри которого ещё десяток наплодить можно, и вся эта вакханалия запросов летит с разных серверов, и тогда получается как пример с "плохим" ООП - чтобы получить банан надо и обезьяну сделать и джунгли посадить. Но это я утрирую :) В этих вещах все таки должен быть здравый смысл и если работая с микросервисами половина работы это перекидывать данные между всеми ними, вместо того чтобы с джойнами поработать, то этот здравый смысл похоже ушел куда то не туда. Когда же каждый отдельный микросервис максимально монолитен относительно своей задачи, то это уже куча лучше. Или это противоречит самой логике микросервисной архитектуры?
Привет моему любимому айтиблогеру! Хочу в свои почти под 26 в айти) Я ex фин.аналитик( pro excel user, и не могу видеть эти таблицы) Знаком немного с пайтоном и умею делать data extract по sql. В виду того, что рынок по пайтону переполнен, а js является для меня высоким барьером, хотел бы узнать ваше мнение по golang-у. Перед написанием коммента, я мало что знал об этом языке и предпочту учесть ваши соображения по golang-у, а также перспективы переезда с этим, допустим в Норвегию. Стоит ли игра этих свеч?!!!
я всегда говорю в видео, что язык не важен, а перспективы есть всегда, все зависит не от языка, а от усилий, приложенных к поиску работы и удачного стечения обстоятельств. нужно позиционировать себя не как программиста на каком-то языке, а как бэкендера, фронтендера, специалиста по платежам, гейм девелопера итп. со знанием каких-то технологий в тч языков.
Можно, но могут быть зависимости между этими микросервисами и тогда независимый деплой становится неявно зависимым, что еще хуже) Но если у вас микросервисы никак не завязаны друг на друга, а еще и две разные команды это разрабатывают, тогда это действительно плюс.
@@SuperHyuta Естественно версионирование делать нужно. Это актуально не только для микросервисов но и для монолитов. Но как это отменяет то что микросервисы завязаны друг на друга? А если надо откатить какой-то из них в критическую минуту? То без сложной системы оркестрации сделать это сложно. Тут проблема в сложности инфраструктуры и поддержке этого.
мне кажется, что большинство описанных минусов связаны с неправильным разделением приложения на ограниченные контексты. Если у вас группка микросервисов, которые работают всегда вместе, это очевидно должен быть 1 микросервис.
Мнение однобоке получилось. В целом ок, что не понравилось/не согласен. 1. Можно взять монолит и hot spot функциональность завернуть в отдельные инстансы и сконфигурировать load balancer. Нет нельзя, если возьмем ту же Java на старте приложение не делая ничего ~150MB, когда взять тот же Go/Rust и там будет 10MB, второй момент это база данных, если весь этот зоопарк будет писать в одну БД то начнутся проблемы с deadlock'ми и консистентностью. Поэтому правило один сервис одна БД. 2. Команда должна работать над одним микросервисом, если нужна какая - то функциональность то организуешь митинг и ставишь фичу в роадмап. 3. Латенси тут нужно организовывать асинхронную коммуникацию, это делает код сложнее, еше надо впиливать паттенр ака Circuit Breaker что бы избежать Cascading failure. Могу статью в коментах написать, как надо и не надо, но лень увы.
как больно это не было в распределенных системах есть только eventual consistency и про strong consistency и ACID можно в каком-то смысле забыть (CAP theorem все дела).
Проблемы с дедлоками в БД - это почти всегда кривой код, который эту БД использует, плюс дополнительно возможные проблемы на стороне БД (типа индексов, блокирующих всю таблицу даже при обращении к одной записи) или технологии, используемой для доступа к данным. Если всё написано и настроено правильно, то к одной БД можно подключать любое количество микросервисов, и никаких дедлоков не будет. Просто БД будет тормозить всё больше и больше, вот и всё. В своё время два месяца чинил дедлоки на одном проекте, который представлял собой десктопное приложение, стоящее на рабочих местах, и одну БД на сервере. Никакого зоопарка, просто 50-70 инстансов одного и того же приложения. Но код был плохой, и дедлоки сыпались как из рога изобилия. С тем же успехом можно получить дедлоки имея одну БД на микросервис и 50 инстансов этого самого микросервиса. Правило "один сервис-одна БД" возникло из-за того, что очень проблематично делать миграции БД, если эту БД используют несколько сервисов - нужно синхронизировать код в одном микросервисе с обновлением структуры БД в другом, плюс нужно синхронизировать сами файлы миграций БД между разными сервисами.
@@ivanlo1805 так я не делал никаких предложений, просто поправку сделал про дедлоки. При чём тут нарушение правила "один сервис-одна БД"? Дедлоки к этому правилу отношения никакого не имеют. На моём текущем проекте недавно, где это правило выполняется, была проблема с дедлоками в БД. Никто, кроме этого сервиса, с данной БД не работает. Были проблемы в коде сервиса.
@@stalker2k4 к этому правилу имеет отношение дедлоки в том числе. Если у тебя десктопное приложение куда пишут полтора человека, то там можно поправить код и будет работать и никаких дедлоков. Если у тебя сложное приложение работающее под нагрузкой, то на одном сервисе может все ок, а стоит их отскейлить 2+ и начинаются проблемы.
На самом деле, достаточно уверенные аргументы в пользу сторонников монолитной архитектуры. Хотелось бы чего-то добавить, но особо и нечего. В принципе соглашусь с аргументами, но по масштабируемости, я все таки не уверен - учитывая добавление новой функциональности, вы можете обновить один сервис, не затрагивая функциональность основных в глобальном смысле. Как по мне основная проблемы подобных решений: 1) обеспечение корректного взаимодействия между сервисами (делаете вы это посредством REST-протоколов, месседж-брокеров и пр.), 2) Конечно же отказоустойчивость, но тут обоюдоострый клинок (возможно вы знаете больше и скажете, что я не прав) и полностью согласен с обработкой таймаутов, но тут можно постараться корректное время выставить. 3) Ну и слишком сильное дробление логики и рост числа этих самых микросервисов.
О боже, я обожаю твой канал, готов говорить это под каждым видосом, каждый ролик - конкретно и по делу - жемчужина в огромном море российского айти ютуба.
@@OverEngineer я придумал гениальную идею,... Ну такое я себе сохраню мб реализую(хотя в вебе и мобильных приложениях вообще не копаюсь, чисто С++), но идея прикольная...(в личку могу кинуть как идею для видео хД)
лайк но книга для девопсов, я так понял в основном. Ждем обзор на хорошую книгу(адвансед) по архитектуре микро-сервисов. Если такие есть :) на 2 апреля, как-раз выходной.
Спасибо за видео, подскажите, Ксения, какая у вас клавиатура? Еще можно добавить в минус, что для такого зоопарка микросервисов надо как то поддерживать тестовые среды в актуальном состоянии.
Самый главный вопрос для оголтелых любителей микросервисов - как в вашей фигне сделать консистентный дамп всей системы? И я даже не про теоритическую протребность восстановления из бекапа, когда стало все совсем плохо. А как банально сделать дамп, чтобы потом его почистить и запустить на стейдже? Ну и сказки про то как уменьшаются накладные расходы просто убивают. Вот был у меня раньше 1 репозиторий: 1 конфиг ci (очень глубоко переиспользуемый), 1 "конфиг" сборки "docker'а", 1 helm chart... Теперь у меня 30 копий этого... В это невозможно вносить изменения руками, оно постоянно подвержено дрейфу конфигурации (разработчики лезут в ci/docker/хелмы). В среднесрочной перспективе выделение в микросервисы с выделением в отдельные репозитории приводит, ВНЕЗАПНО, к появлению в отдельных репозиториях отдельно живущих сущностей с точки зрения инфраструктуры. Которые опять же, ВНЕЗАПНО, нужно отдельным образом, вникая в контекст, сопровождать. Микросервисы, имхо, эта такая вирусная теория в духе современного эффективного менеджмента. А что, давайте возьмем и скинем с плечей разработчиков 5% проблем (честно говоря так до сих пор не понимаю механизм, как это помогает вообще), за счет создания +50% проблем у инфраструктуры (тут полностью понимаю на своей шкуре). И тогда на краткосрочном этапе на запасе прочности инфраструктуры и еще не удрейфовавших конфигурациях мы сможем некоторое время "ехать" быстрее. Ну а что будет через несколько лет... А какая мне разница, что у них будет через несколько лет. Вот мои показатели - я ускорил, вот график, это объективно! Я пошел на повышение в другую компанию.
Есть и более серьёзные проблемы. Например распределенные транзакции и их откат. Или trace ошибок. / Главный плюс для меня, это возможность сделать много команд (1 команда владеет 1-5 микросервысами). Для большого продукта это лучше, чем 400 девов пушат в одну репу
@@OverEngineer Ну когда команда работает над микросервисом и никто больше в него не пушит, то команда знает весь code base и несет за него ответственность. В случае с монолитом очень сложно построить подобную культуру разработки. В результате люди ломают код, так как знать весь огромный монолит и все изменения в нем невозможно. Ну и другие дэвы ломают код, за который отвественная твоя команда и вам в результате разребать. По крайне мере у меня такой опыт. Еслы у тебя по другому, буду рад если поделишся опытом\мнением :)
@@dimalisovyk5277 что мешает командам нести ответственность за отдельные фичи в монолите? Если пуш в одну фичу ломает другую фичу, значит программеры в компании так себе и микросервисная архитектура их не спасет (скорее наоборот, добавит проблем).
@@alexeymezenin ну я говорю о реальном мире, а не об асбтрактных команиях, где все 1000 разработчиков внимательные и ответсвенные и не совершают ошибок. Когда отвественны все - не отвествен никто. А если у тебя маленький кусочек, за который конкретно тебя будут пинать, это мотивирует иметь ownership
@@alexeymezenin оно так не работает. Не бывает идеальных систем. Не бывает людей, которые за 5 минут проанализируют риски добавления кода в кодовую базу 5 млн строк, развиваемую 1000 человек. Всегда что-то не учитывается и падает. В случае хороших микросервисов падает только микросервис.
Хей бэкендерша) А можно видосик по архитектуре (если это к тому относится конечно)? Как создавать правильные методы /не городить огороды без спагетти кода, вот это вотвсё /Что бы взрастить в себе чувство прекрасного и делать элегантные решения в коде
1. По мне так микросервисы -- это в основном способ организовать команды разработки так, чтобы они не мешали друг другу. Когда в компании 200+ человек, не представляю как можно катать один монолит с правками от всей этой кучи людей. 2. Если появляется необходимость делать некие join'ы между сервисами, то возможны два варианта -- либо не нужно эти сервисы разбивать в отдельные приложения (ошибка проектирования), либо второй вариант -- можно подтягивать часть нужных данных в локальную базку, используя например кафку или даже можно делать синхронные запросы в фоне на апишку другого сервиса.
Спасибо большое, пересматриваю спустя несколько лет, а если пересматриваю, значит ценно =)
Спасибо за видос по архитектуре!
Хорошо, что такие люди как ты бесплатно делятся своим опытом в таком понятном формате
Какая вы классная) я в восторге! Спасибо за труд.
Посмотрел залпом несколько Ваших видео. Класс! Спасибо большое!
Классное видео, спасибо. Давно тебя не было.
По поводу проблем с микросервисами: мой опыт показывает, что все беды из-за человеческого фактора.
Основная проблема большинства это создание микросервисов ради создания микросервисов (что прослеживается и по примерам в видео).
В этом случае почти любая новая фича выносится в отдельный сервис особо не задумываясь, а надо ли ее выносить в отдельный сервис.
На моей практике микросервисы далеко не всегда такие микро, как все думают. И кстати RPC или REST далеко не самые хорошие способы коммуникации между сервисами. Вообще тема огромная конечно, могу говорить о ней бесконечно :D
Я бы еще добавил, что у идеальных микросервисов довольно высокий порог входа для бизнеса:
1. Нужны инженеры, которые в теме про всякие саги, транзакционность, брокеры сообщений и так далее
2. Нужна devops культура в компании и штат devops инженеров
3. Нужен сильный архитектор, который будет в состоянии за этим следить
4. Критически важно иметь хороших product managers особенно для проработки спецификаций
Для небольших компаний, увы, этот подход чаще всего не является выгодным.
Микросервисы редко пилят с 0, обычно либо команда готовая есть, которая на кафках/кассандрах/тарантулах собаку съела, а также реактивщине и обычной асинхронщине уровня узла через блокирующую многопоточку с мутексами-семафорами. Либо это легаси, проекту от 5-7 до 10-15 лет, и он либо монолит, который внезапно наконец дорос до клиентской базы, раздавливающей любое вертикальное масштабирование, либо монолит в свое время распилили в SOA с SOAP-контрактами и система тоже перестала справляться с нагрузкой, т.к. топология "звезда" и ESB-шина стала точкой отказа, т.к. в единственном экземпляре, в кластер не засунешь. Здравстуй новый раунд хантинга и просьба рекрутерам искать кандидатов с "MSA-архитектурой" в резюме, дабы всё попилить.
@@НикитаГлухов-п5ю пилят пилят(
@@НикитаГлухов-п5ю Наивный, в одном из проектов архитектор, ради удовлетворения своей течки на МС с ходу нарисовал схему из 4-х бэкхенд микросервисов, и 3-х фронтов, мы ох***, но его было не переубедить
На мой взгляд самая большая проблема в том, что иногда, до решения задач допускаются люди совершенно в них не компетентные. И тогда мы имеем наносервисы из говна и веток и мегалиты с неподдерживаемым кодом.
@@AndreySvyat ну в отдельно взятой компании может быть че угодно, речь была о том как переходят на MSA в большинстве случаев, так как стрёмно, если куча бабла вылетит в трубу из-за необоснованных ожиданий и непонимания уместности подхода.
Отличный анализ, поддерживаю идею о том что начинать нужно с монолита, а микросервисы внедрять по мере необходимости. Да и приставка микро мне кажется тут лишняя. Я считаю что бить приложения на части нужно в двух случаях, о первом вы рассказали в видео, когда растет нагрузка на какую-то часть и ее нужно срочно масштабировать, второй когда над приложением работает большая команда, тогда можно вынести часть бизнес контекстов в отдельное приложение и разделить команду. Что касается баз данных то я считаю что крупный монолит тоже должен работать на нескольких базах данных, отдельная база данных для каждого boundary context (DDD). Проблему кучи мелких запросов может решить паттерн CQRS. Коммуникацию между контекстами лучше изначально делать асинхронной используя event driven архитектуру. Монолит спроектированный таким образом очень легко разбивается на сервисы по границам бизнес-контекстов.
Отличный комментарий!
Привет, большое спасибо за видео, посмотрел почти все взахлеб, не пропадай надолго!
Очень интересно! ждем вашего возвращения.
1) монолит лучше микросервиса
2) в микросервисе упрощается обслуживание гита
3) правильно распиленный по ddd микросервис отлично борется с техдолгом
4) микросервисы - это от безысходности, а не от того, что лучше
О какие люди! С праздником!
С праздником XO
Благодарю вас Ксения за такое видео! впервые слушаю и все понимаю, очень хорошо ложится ваше изложение :) У вас отличный канал!
Благодарю за интересное и полезное видео! С праздником!
Здравствуйте. Обожаю ваши видео. Продолжайте пожалуйста.
Благодарю за ревью книги!
Отличная блузка!)
Хороший видос. Вчера как раз слушал стрим об этом
Был опыт не совсем микросервис, но делили написание функционала по языкам: На golang стримили видео, а взаимодействие с базой полностью на python. Такой вот микро-микро сервис был. Спасибо за интересный разбор интересной темы.
Вопрос знатокам, как компоновать(JOIN) данные из разных баз данных? на уровне приложения!
Приятно слушать думающего человека. Спасибо и удачи! Абсолютно так и есть, и честно говоря, все еще хуже, и просвет не намечается. Какую технологию не возьми, монолит, трехзвенку, микросервесы и т.п., если критическое количество разработчиков с кривыми ручками превосходит порог выносливости системы, то никакая архитектура не спасет. Программер должен всю жизнь учиться, иначе выходит только г**нокод. Я сам программер 25+ лет, и все встречавшиеся проблемы были только в квалификации и прилежности программеров, не в архитектуре. Один раз правильно написанный код работает десятилетиями.
Такая компиляция инфы впечатляет)
Спасибо за очень полезный контент
Отдельный респект за "функциональность" 👍
С праздником! Мне очень нравится твой видео, я на втором курсе в Румынии и мне твой видео очень помогают. Можешь сделать и видео про алгоритмы и структуры данных? Спасибо!
Salut, sunt din Moldova. Tu cu ce te ocupi?
Спасибо, очень интересно.
С праздником !!! Информация четкая, разложенная по полочкам. Спасибо
Привет. А что за читалка?
Какую посоветуешь купить??
Познавательно, спасибо. С праздником
Спасибо за видео. Всегда рад вашим видео
Комментарий для интересного канала и человека 👍
Очень классное видео! 👍
а почему речь идет только о ресурсах? почему не смотрим со стороны именно бизнеса?
Привет, досмотрел до горизонтального масштабирования, не очень понял как можно горизонтально масштабировать монолит, что делать с базой данных, предпологается что бд должна поддерживать шардирование или как?
Согласен с тобой. Из моей практики, писал и монолит очень большой и микросервисы. И в монолите люди творили такое, что на голову не одеть. Но все решалось жесткими ревью и автоматизацией проверками.
А вот с микросервисами беда, не все видели очевидных проблем, типа ретраев, таймаутов, идемпотентности api, транзакционности процессов и почему нужно делать саги и тд.
Микросервисы это намного сложнее и требует понимания распределенных систем, и хорошей квалификации разработчиков.
Спасибо за интересные видео
спасибо за видео, было интересно
А видео по Ruby on Rails будет ?
Все правильно, микросервисная архитектура это очень не просто. Distributed transactions, eventual consistency, resilience: retries и timeouts - это все не бесплатно, только вот звучит как решение всех проблем. Да, уже есть много инструментария и он довольно неплохой, но он однозначно увеличивает сложность приложения.
полезная инфа однако...
Сопоставление микросервисов и монолита всегда обречено на провал...
Микросервисы это почти всегда следующая стадия развития монолита, а не его альтернатива.
Я бы сказал что цепочка такая: монолит -> SOA -> микросервисы.
Если ваша система не может быть поделена на высокоуровневые сервисы в SOA, то и в микросервисы соваться не стоит.
Касательно плюсов микросервисов - один из самых главных это возможность разделить ответственность по командам. Если у вас такого нет, и разрабы не ноют "да нам надоело ждать, пока они там свой спринт подготовят в своем команде Х" - то почти наверняка вам не нужны микросервисы. SOA - почти всегда золотая середина, к которой стоит стремиться.
красивая блузка :)
У меня пока, к сожалению, не было реального опыта работы с микросервивасами, но у меня о микросервисах сложилось впечатление, что из-за тренда их неправильно воспринимают, и во многом, мне кажется, это вина маркетологов, которые продвигают технологию просто ради технологии.
В реальности, часть проблем, которые были освящены в видео объеденяются под одним названием: "Распределённый монолит". И на хороших курсах по микросервисам рассказывают, что "Распределённый монолит" != "Микросервисы".
По хорошему, любую книгу надо начинать со слов "Плохая идея начинать писать приложение сразу на микросервисной архитектуре. Правильный подход - это пилить монолит." Т.е. сначала вы пишете хороший модульный монолит (в иделе, возможно, следуя DDD, ведь в последствии bounded context'ы помогут вам проще вытащить сервис из монолита и посадить на отдельную инфраструктуру), а затем уже смотрите на узкие места в вашем приложении и выделяетет их в микросервис. И да, вы не обязаны "когда-нибудь в будущем" целиком переходить полностью на микросервисы, распилив весь монолит. Часто это не нужно, ведь приложение отлично работает и в формате монолита с выделенными на отдельные машины и замасштабированными парочкой микросервисов, которые ГРАМОТНО изолированы, чтобы была честная отказоустойчивость.
Т.е. к микросервисам, как и к любой другой технологии в принципе, надо подходить исходя из потребности, а не из трендов. Тогда польза микросервисов будет уже более явной.
По поводу разных языков, тот же Amazon, на сколько я слышал, все микросервисы пишет на Java и запрещает использовать другие языки. Т.е. не нужно следовать тренду, а просто исходить из потребностей бизнеса (:
Касательно разных языков - это больше маркетинговая уловка. Ни одна компания не будет пилить микросервисы на чем попало(всмысле отдавать выбор языка на откуп программисту/команде). А если придется писать свои собственные решения для какой-то узкой области? Как потом его переиспользовать в своей же системе, если изначально это решение писалось на Go, а соседний микросервис где мы хотим это решение заюзать написан на Java? Поэтому зачастую в компаниях с большой микросервисной архитектурой есть списки разрешенных языков для использования. Шаг влево - надо согласовывать.
Я раньше думал что монолит это словная и не поворотливая штука, но сейчас я смотрю на проект на микросервисах и понимаю что не всё так плохо, особенно напрягает, не структурированные связи (с одного сервиса мы получаем одно с другово другое )
Видосик пока не смотрел, чисто лайчик пока поставил
Привет, подскажи, а какому уровню специалистов можно почитать? Нужно ли глубоко знать программирование?
нет, не нужно. там вообще ни одного куска кода нет)
Поддерживаю, не всегда нужно стрелять из пушки по воробьям
Привет.
Вы правильно сказали что микросервис рассчитан на "задачу", а точней контекст.
При таком подходе мы не должны смотреть что написано в том микросервисе, мы специалисты в своём контексте.
В целом вся суть в том, что команда работает над одним или несколькими контекстами, но не наоборот. Команды изолированы друг от друга, и нет универсальных разработчиков.
Конечно у микросервисов очень много минусов, и самая основная это в понимании разделения - в большинстве случаев это монолит(в класическом понимании) с удалённый вызовом процедур, а приставку "микро" рассматривают как "микросервис должен делать что-то одно и максимально простое". Из-за этого и получается что нужно постоянно смотреть код другого микросервиса, а решение той или иной задачи сводится к редактированию N микросервисов.
Актуально теперь переходит с php на rails, заранее спасибо
Ксения, здравствуйте. Спасибо за ролик! Я совсем новичок и мне интересна тема микросервисов. Но я сильно путаюсь в понятиях микросервисов/веб-сервисов и API. Может быть, вы бы смогли грамотно объяснить разницу? Я так понимаю, что микросервисы это именно архитектурный стиль, то есть у нас есть много разных веб-сервисов под каждую задачу. Например, user service, payment service, и тд. Но в свою очередь, веб сервисы являются web API. Правильно ли я понимаю, что микросервисы это и есть APIs, которые представляют собой список эндпоинтов, методов (get, post, etc)?
Или же есть API как входная точка, и он в свою очередь перенаправляет реквест на какой-то микросервис? Буду очень благодарна за ответ!
коротко - оба описанных вами варианта возможны)
Спасибо за обзор книги!, - теперь точно читать не буду. Про рост сложности там даже без дополнительных балансеров хватает - нужно собирать логи, метрики, обеспечивать распределенную трассировку, дебаг, зависимости, преемственность изменений апи, tail latency становится хуже просто за счет большего колва вызовов внутри системы, аутентификация, авторизация, шифрование трафика и тд.
Привет, Ксюша. Давно же тебя не было) С праздником) Надеюсь видеть тебя почаще
Очень круто разъяснила!! Лайк подписка!!!
Возможно в книге шла речь о крупных монолитах где сложная беспорядочно переплетающая инфраструктура только для одного узла, во внутрь обеспечивая сильную связанность. Поддержка таких систем сильно сложна и не поддается какому-то быстрому анализу. По поводу кода, в больших монолитах нельзя так просто взять и найти что-то, они операются только на программную архитектуру, только знание программной архитектуры помогает хоть как-то понять как это все работает) Я думаю автор книги не достаточно раскрыл тему, чтобы донести мысль.
Да с микросервисами все так, там много кода и все сложно. Но поверьте есть монолиты, в которых есть тупиковые ситуации и они как неповоротливые гиганты, с ними сложно (не подходящее слово) работать. Если с микросервисами сложно то с монолитом тупик, костыли, нереально, невозможно... Такие фразы там норма
Отличное видео
Согласен! Этот фапинг на микросервисы создаёт не менее стремную головную боль.
Спасибо! Видео прям в точку, очень актуальное для меня. Как раз к нам недавно пришел новый архитектор со стороны заказчика, и хочет всё перефигачить на микросервисы. Моя аргументация, почему это лучше не делать, очень похожа на ту, что в этом видео.
Подскажи, пожалуйста, что за читалка?)
kindl
Вроде микросервисы для двух вещей:
во-первых, если кодовая база большая и разрастается еще больше, в этом случае поддерживать микросервисный код в перспективе будет проще (но не сразу);
во-вторых, это точечное масштабирование.
Еще небольшая причина - это когда команды разные и на разных языках пишут, но это редкость.
Спасибо 👍
спасибо большое за видел
С прошедшим праздником!
Спасибо за видео, натолкнуло на разные мысли и, да, понимаю что тема очень обширная и имеет множество вариаций.
Не уверен что такие термины как монолитная и микросервисная архитектура можно применять для сайтов которые чуть больше чем простой блог, но я попробую :)
На моем опыте были два сайта что имели схожий функционал, но бек энд одного был в рамках одного фреймворка что стал CMS'кой этого сайта, а у второго бек поделили на несколько частей.
Оба этих сайта имели страницы со "статичным" контентом, новостные ленты, интернет магазин и личный кабинет пользователя.
И во втором случае за интернет магазин отвечал свой бек, за личный кабинет свой, а все остальное ушло в третью часть бека.
И, как по мне, работать с этим вариантом было куда удобней чем когда все крутится в одном месте.
Эти "сервисы" были, почти полностью, независимы друг от друга (разве что айдишниками перекидываются если контент одного таки был связан с контентом другого сервиса), результат которых приходил на фронт, где по rest api, где через graphql.
И если надо что то доделать на стороне, например на стороне интернет магазина, то ты попадаешь в проект который только этим и занимается, что было удобней чем лавировать по беку одной CMS'ки где все, очень грубо говоря, в одной куче, особенно когда это касается вьюшек с html кодом.
Понимаю что по микросервисам можно упоротся так что каждая кнопочка станет отдельным микросервисом внутри которого ещё десяток наплодить можно, и вся эта вакханалия запросов летит с разных серверов, и тогда получается как пример с "плохим" ООП - чтобы получить банан надо и обезьяну сделать и джунгли посадить. Но это я утрирую :)
В этих вещах все таки должен быть здравый смысл и если работая с микросервисами половина работы это перекидывать данные между всеми ними, вместо того чтобы с джойнами поработать, то этот здравый смысл похоже ушел куда то не туда.
Когда же каждый отдельный микросервис максимально монолитен относительно своей задачи, то это уже куча лучше.
Или это противоречит самой логике микросервисной архитектуры?
Привет моему любимому айтиблогеру!
Хочу в свои почти под 26 в айти) Я ex фин.аналитик( pro excel user, и не могу видеть эти таблицы)
Знаком немного с пайтоном и умею делать data extract по sql. В виду того, что рынок по пайтону переполнен, а js является для меня высоким барьером, хотел бы узнать ваше мнение по golang-у. Перед написанием коммента, я мало что знал об этом языке и предпочту учесть ваши соображения по golang-у, а также перспективы переезда с этим, допустим в Норвегию. Стоит ли игра этих свеч?!!!
я всегда говорю в видео, что язык не важен, а перспективы есть всегда, все зависит не от языка, а от усилий, приложенных к поиску работы и удачного стечения обстоятельств. нужно позиционировать себя не как программиста на каком-то языке, а как бэкендера, фронтендера, специалиста по платежам, гейм девелопера итп. со знанием каких-то технологий в тч языков.
Спасибо за видео, спасибо за то, что делишься опытом!
Ох, только вчера заинтересовался микросервисами, читал про это, а сегодня целое видео в рекомендациях.
классное видео!
микросервисы можно деплоить независимо. Это плюс.
Можно, но могут быть зависимости между этими микросервисами и тогда независимый деплой становится неявно зависимым, что еще хуже) Но если у вас микросервисы никак не завязаны друг на друга, а еще и две разные команды это разрабатывают, тогда это действительно плюс.
@@SuperHyuta Естественно версионирование делать нужно. Это актуально не только для микросервисов но и для монолитов. Но как это отменяет то что микросервисы завязаны друг на друга? А если надо откатить какой-то из них в критическую минуту? То без сложной системы оркестрации сделать это сложно. Тут проблема в сложности инфраструктуры и поддержке этого.
мне кажется, что большинство описанных минусов связаны с неправильным разделением приложения на ограниченные контексты. Если у вас группка микросервисов, которые работают всегда вместе, это очевидно должен быть 1 микросервис.
Незнаю как, но ютуб мне порекомендовал очень годный канал! Спасибо тебе Ксения за интересный контент!
Вы вернулись, очень рад видеть!
хорошее видео для начинающих
что за модель клавиатуры у тебя?
все время на нее взгляд сходил)
Вот эта: www.amazon.com/Keyboard-TedGem-All-Metal-Spill-Resistant-Backlit/dp/B07RL7R55S
Пора! Пора уже раскрыть тему многопоточки
Лайк за помытые волосы)
Мнение однобоке получилось. В целом ок, что не понравилось/не согласен. 1. Можно взять монолит и hot spot функциональность завернуть в отдельные инстансы и сконфигурировать load balancer. Нет нельзя, если возьмем ту же Java на старте приложение не делая ничего ~150MB, когда взять тот же Go/Rust и там будет 10MB, второй момент это база данных, если весь этот зоопарк будет писать в одну БД то начнутся проблемы с deadlock'ми и консистентностью. Поэтому правило один сервис одна БД. 2. Команда должна работать над одним микросервисом, если нужна какая - то функциональность то организуешь митинг и ставишь фичу в роадмап. 3. Латенси тут нужно организовывать асинхронную коммуникацию, это делает код сложнее, еше надо впиливать паттенр ака Circuit Breaker что бы избежать Cascading failure. Могу статью в коментах написать, как надо и не надо, но лень увы.
как больно это не было в распределенных системах есть только eventual consistency и про strong consistency и ACID можно в каком-то смысле забыть (CAP theorem все дела).
Проблемы с дедлоками в БД - это почти всегда кривой код, который эту БД использует, плюс дополнительно возможные проблемы на стороне БД (типа индексов, блокирующих всю таблицу даже при обращении к одной записи) или технологии, используемой для доступа к данным. Если всё написано и настроено правильно, то к одной БД можно подключать любое количество микросервисов, и никаких дедлоков не будет. Просто БД будет тормозить всё больше и больше, вот и всё.
В своё время два месяца чинил дедлоки на одном проекте, который представлял собой десктопное приложение, стоящее на рабочих местах, и одну БД на сервере. Никакого зоопарка, просто 50-70 инстансов одного и того же приложения. Но код был плохой, и дедлоки сыпались как из рога изобилия. С тем же успехом можно получить дедлоки имея одну БД на микросервис и 50 инстансов этого самого микросервиса.
Правило "один сервис-одна БД" возникло из-за того, что очень проблематично делать миграции БД, если эту БД используют несколько сервисов - нужно синхронизировать код в одном микросервисе с обновлением структуры БД в другом, плюс нужно синхронизировать сами файлы миграций БД между разными сервисами.
@@stalker2k4 а в чем предложение то? Нанимать суперменов кто не пишет плохой код? Или нарушайте правило один сервис одна БД, но нанимайте суперменов?
@@ivanlo1805 так я не делал никаких предложений, просто поправку сделал про дедлоки.
При чём тут нарушение правила "один сервис-одна БД"? Дедлоки к этому правилу отношения никакого не имеют. На моём текущем проекте недавно, где это правило выполняется, была проблема с дедлоками в БД. Никто, кроме этого сервиса, с данной БД не работает. Были проблемы в коде сервиса.
@@stalker2k4 к этому правилу имеет отношение дедлоки в том числе. Если у тебя десктопное приложение куда пишут полтора человека, то там можно поправить код и будет работать и никаких дедлоков. Если у тебя сложное приложение работающее под нагрузкой, то на одном сервисе может все ок, а стоит их отскейлить 2+ и начинаются проблемы.
На самом деле, достаточно уверенные аргументы в пользу сторонников монолитной архитектуры. Хотелось бы чего-то добавить, но особо и нечего.
В принципе соглашусь с аргументами, но по масштабируемости, я все таки не уверен - учитывая добавление новой функциональности, вы можете обновить один сервис, не затрагивая функциональность основных в глобальном смысле.
Как по мне основная проблемы подобных решений: 1) обеспечение корректного взаимодействия между сервисами (делаете вы это посредством REST-протоколов, месседж-брокеров и пр.), 2) Конечно же отказоустойчивость, но тут обоюдоострый клинок (возможно вы знаете больше и скажете, что я не прав) и полностью согласен с обработкой таймаутов, но тут можно постараться корректное время выставить. 3) Ну и слишком сильное дробление логики и рост числа этих самых микросервисов.
По ходу следуюший твой ролик выйдет 1 мая.
А еще следующий - 9 мая!)))
да, ты угадал. по ролику на каждый социалистический праздник
@@OverEngineer можешь как - нибудь осветить свое видение книги Рихтера по С#? Очень интересно услышать твое мнение!
Девушка, твои родители случайно не пираты? А почему ты такое сокровище? Парень есть у тебя? Свяжись со мной!
Странно мой коммент про брокеры удаляют, почему про них ничего не сказали?
это ютуб удалил, не я)
а что надо было сказать про брокеры? я упомянула, что возможен асинхронный обмен между сервисами
@@OverEngineer sla не уменьшают? Чел из майкрософта рассказывал, julio casal на канале
О боже, я обожаю твой канал, готов говорить это под каждым видосом, каждый ролик - конкретно и по делу - жемчужина в огромном море российского айти ютуба.
Жду тренда на микромикросервисы, каждую функцию пишем в отдельном репозитории и общаемся с ней по интернету, неплохая идея. Жду книг по этой тематике
так чего его (тренд) ждать, он уже лет 6-7 как тут)
@@OverEngineer я придумал гениальную идею,... Ну такое я себе сохраню мб реализую(хотя в вебе и мобильных приложениях вообще не копаюсь, чисто С++), но идея прикольная...(в личку могу кинуть как идею для видео хД)
Serverless computing / FaaS это примерно оно.
@@niklkelbon3662 C++ есть в вебе, правда в основном в гигантах вроде aws/google/yandex
@@ColdBanehallow есть, но я просто этим не занимался, об этом говорю
Спасибо алгоритмы ютуба, ничего не понял, но было очень интересно!
Спасибо, интересное видео)
Спасибо за интересное видео. Хотелось бы услышать ваше мнение по поводу книги Release It
лайк но книга для девопсов, я так понял в основном. Ждем обзор на хорошую книгу(адвансед) по архитектуре микро-сервисов. Если такие есть :) на 2 апреля, как-раз выходной.
В качестве ментора ты не пробовала себя ?
Спасибо за видео, подскажите, Ксения, какая у вас клавиатура?
Еще можно добавить в минус, что для такого зоопарка микросервисов надо как то поддерживать тестовые среды в актуальном состоянии.
Отличное видео, полезное, спасибо!
Крутой обзор, больше таких видео.
Спасибо! Наконец, поняла, что такое микросервисы )
Самый главный вопрос для оголтелых любителей микросервисов - как в вашей фигне сделать консистентный дамп всей системы?
И я даже не про теоритическую протребность восстановления из бекапа, когда стало все совсем плохо. А как банально сделать дамп, чтобы потом его почистить и запустить на стейдже?
Ну и сказки про то как уменьшаются накладные расходы просто убивают.
Вот был у меня раньше 1 репозиторий: 1 конфиг ci (очень глубоко переиспользуемый), 1 "конфиг" сборки "docker'а", 1 helm chart... Теперь у меня 30 копий этого... В это невозможно вносить изменения руками, оно постоянно подвержено дрейфу конфигурации (разработчики лезут в ci/docker/хелмы). В среднесрочной перспективе выделение в микросервисы с выделением в отдельные репозитории приводит, ВНЕЗАПНО, к появлению в отдельных репозиториях отдельно живущих сущностей с точки зрения инфраструктуры. Которые опять же, ВНЕЗАПНО, нужно отдельным образом, вникая в контекст, сопровождать.
Микросервисы, имхо, эта такая вирусная теория в духе современного эффективного менеджмента. А что, давайте возьмем и скинем с плечей разработчиков 5% проблем (честно говоря так до сих пор не понимаю механизм, как это помогает вообще), за счет создания +50% проблем у инфраструктуры (тут полностью понимаю на своей шкуре). И тогда на краткосрочном этапе на запасе прочности инфраструктуры и еще не удрейфовавших конфигурациях мы сможем некоторое время "ехать" быстрее. Ну а что будет через несколько лет... А какая мне разница, что у них будет через несколько лет. Вот мои показатели - я ускорил, вот график, это объективно! Я пошел на повышение в другую компанию.
Грамотно
Нормальная такая запивачка
Есть и более серьёзные проблемы. Например распределенные транзакции и их откат. Или trace ошибок. / Главный плюс для меня, это возможность сделать много команд (1 команда владеет 1-5 микросервысами). Для большого продукта это лучше, чем 400 девов пушат в одну репу
а почему 400 девов не могут пушить в одну репу? и почему нельзя иметь множество команд, работающих над монолитом?
@@OverEngineer Ну когда команда работает над микросервисом и никто больше в него не пушит, то команда знает весь code base и несет за него ответственность. В случае с монолитом очень сложно построить подобную культуру разработки. В результате люди ломают код, так как знать весь огромный монолит и все изменения в нем невозможно. Ну и другие дэвы ломают код, за который отвественная твоя команда и вам в результате разребать. По крайне мере у меня такой опыт. Еслы у тебя по другому, буду рад если поделишся опытом\мнением :)
@@dimalisovyk5277 что мешает командам нести ответственность за отдельные фичи в монолите? Если пуш в одну фичу ломает другую фичу, значит программеры в компании так себе и микросервисная архитектура их не спасет (скорее наоборот, добавит проблем).
@@alexeymezenin ну я говорю о реальном мире, а не об асбтрактных команиях, где все 1000 разработчиков внимательные и ответсвенные и не совершают ошибок. Когда отвественны все - не отвествен никто. А если у тебя маленький кусочек, за который конкретно тебя будут пинать, это мотивирует иметь ownership
@@alexeymezenin оно так не работает. Не бывает идеальных систем. Не бывает людей, которые за 5 минут проанализируют риски добавления кода в кодовую базу 5 млн строк, развиваемую 1000 человек. Всегда что-то не учитывается и падает. В случае хороших микросервисов падает только микросервис.
Никто не говорил, что микросервисы - это просто!
Как всегда, топ-контент
Спасибо. Я не согласен
Расскажешь что не так?
Да. Взять всё и поделить :))
Что насчет книги Криса Ричардсона "Микросервисы. Паттерны разработки и рефакторинга"?
Читала?
Если да, то что думаешь?
Кстати да, отличная книга, без карго культа микросервисов, начинается как раз с рассуждений о плюсах и минусах монолитов и микросервисов.
Лучшее решение в большинстве случаев - это модульный монолит.
Ждал твоё видео больше чем новую (старую) Diablo.
Хей бэкендерша) А можно видосик по архитектуре (если это к тому относится конечно)? Как создавать правильные методы /не городить огороды без спагетти кода, вот это вотвсё /Что бы взрастить в себе чувство прекрасного и делать элегантные решения в коде
1. По мне так микросервисы -- это в основном способ организовать команды разработки так, чтобы они не мешали друг другу. Когда в компании 200+ человек, не представляю как можно катать один монолит с правками от всей этой кучи людей.
2. Если появляется необходимость делать некие join'ы между сервисами, то возможны два варианта -- либо не нужно эти сервисы разбивать в отдельные приложения (ошибка проектирования), либо второй вариант -- можно подтягивать часть нужных данных в локальную базку, используя например кафку или даже можно делать синхронные запросы в фоне на апишку другого сервиса.
Прикольная бутолочка, которая не мотивирует встать и сходить за водичкой на кухню если она на рабочем столе )
зато меньше дневной дозы не выпьешь)
@@OverEngineer что там между drink more и almost there написано ?)
Еее! Давно не видели! Хорошо что всё хорошо) С праздником!