Тёмный
Digital Train | Alex Babin
Digital Train | Alex Babin
Digital Train | Alex Babin
Подписаться
Channel for those who want to understand Software Development & IT. Get deep knowledge of how the industry works.
If you are a system or business analyst, automated or manual tester, software engineer, or planning to become - Welcome! 🚀
Microservices architecture for everyone
1:31:48
2 месяца назад
Java middle Mock-interview
55:41
2 месяца назад
Java middle+ mock interview
58:52
2 месяца назад
Комментарии
@user-fb6fr5nx9u
@user-fb6fr5nx9u 2 дня назад
Минусы монолита описанные как будто бы больше на мифы смахивают (особенно если смотреть на них не в вакууме, а сравнивать с микросервисами): - "в монолите сложно понять какой модуль на какой влияет", - не согласен. Сложно понять какие микросервисы друг на друга влияют (сама по себе трассировка, сервис дискавери, поиск проблем и отслеживание циклических вызовов, совместимость апи и прочие проблемы), как и в целом сопровождение микросервисов на порядок сложнеее чем совпровождение монолита, тк в случае монолита простым поиском по коду проекта или дебаггером все можно просмотреть и в билд тайме 99% ошибок взаимодействия ловить можно, надо только те же самые хорошие практики современные использовать чтобы не скатывать все к "big ball of mud" - "сложно масштабировать" - какая по сути разница копию всего приложения развернуть или только его части? разверните X копий (или настройте автоскейл горизонтальный как вам надо) и если нагрузка на модуль платежей будет выше чем нагрузка на модуль такси, то просто какой-то больший процент реплик будет занят обработкой платежей, а какой-то меньший процент реплик займет обработка запросов такси. Ну и в крайних случаях, если очень хочется, можно вынести какой-нибудь ОДИН модуль из монолита, не трогая большую часть других модулей. - "гибкость и простота разаработки, обновления" - ну так если у вас монолит модульный, вы можете эти модули как угодно тасовать, менять и тд (и в том числе, как уже упоминал выше, можно вынести некоторые модули из монолита если такая потребность по какой-то очень важной причине настанет). По поводу истории с булевыми флагами и тестированием - уже давно придумали разные стратегии выкатки сложных обнвлений - типо канареек , фича флагов, A/B и прочих стратегий, которые в монолите тоже можно применять схожим образом как и в случае с микросервисами
@digital_train
@digital_train 2 дня назад
Спасибо за развернутый ответ По первому пункту - речь идет о протекании абстракций, в микросервисах эта проблема отсутствует т.к. код физически разделен network и общается через API (предлагаю случаи с некорректно построенной архитектурой, API не рассматривать). Отсюда есть большой плюс, что локальное внесение изменений в код (без изменений API) не может сломать код в другом микросервисе По второму пункту - про содержание микросервисов, в видео это отмеченно, что микросервисы требуют дополнительных затрат т.к. все процессы тестировния, логирования и тд нам нужно поддерживать для всех микросервисов. В монолите за счет меньшего количество сущностей администрирование упрощается По третьему пункту - про масштабирование. Если в монолите мы изначально заложим возможность масштабирования, то в этом случае можно эволюционно прийти к скейлинга отдельных модулей (выделяя их или нет). Часто так бывает, что монолит пишут без видения того что инстансов может быть несколько и как следствие даже простейшее создание второго инстанса может быть проблемой, в отличии от микросервисов где это является ключевым вопросов (то есть мы его никак не потеряем) По последнему пункту - про обновления, действительно если в код заложить систему плагинов то ей можно управлять так же гибко как и в случае с микросервисами, системой флагов или другими механизмами (бренчинг и тд). Но как показывает практика никто этого не делает и в большинстве случаев код прийдется переписывать. Резюмирую - если архитектор с головой то он и монолит построит такой, что большой части проблем удастся избежать. Плюс микросервисов здесь в том что все эти вопросы мы разбираем на самом первом этапе проектирования
@XdXD-ff2vc
@XdXD-ff2vc 10 дней назад
Автор красава, ахуенный материал
@do_bro
@do_bro 12 дней назад
Спасибо. За полчаса всё по полочкам разложил
@romantitov6207
@romantitov6207 14 дней назад
Спасибо за видео. Очень интересное но как по мне уж слишком поверхностное. Автор подчеркивает важность демонстрации практического опыта на собеседовании но именно этого самого практического опыта использования этих паттернов автором в этом видео и не хватает. Надеюсь в будующих видео будет что-то основанное на реальных проектах. Хотя возможно для начинающих видео будет полезно чтобы не искать по гуглам все эти паттерны.
@user-bs8bz5lk1b
@user-bs8bz5lk1b 15 дней назад
Всё доходчиво) Возник вопрос по поводу JWT. Допустим есть API Gateway сервис и Security сервис, который после первоначальной проверки имя:пароль генерирует JWT, используя RSA шифрование и отдает его клиенту. Каким образом лучше всего осуществить проверку этого токена, не отправляя каждый запрос от клиента в Security, у которого (только!) есть доступ к RSA ключам? Сейчас на Gateway применяется фильтр, который отправляет запросы к другим микросервисам сначала в Security на верификацию JWT. Как-то криво по-моему(
@digital_train
@digital_train 15 дней назад
Есть несколько подходов, если я правильно понял ваш случай - это случай когда для каждого микросервиса мы осуществляет запрос и проверку токена, такой подход отлично работает с точки зрения безопасности, но у него есть минусы и один из основных это проблема масштабирования (при большом количестве микросервисов и запросов рост нагрузки будет экспоненциальным). В таком случае чаще всего переходят на аутентификацию на edge (по перимитру), что сильно упрощает масштабирование, но снижает "строгость" проверок для каждого вызова внутри безопасной зоны Подробно данных подход хорошо изложен в блоге Netflix (они как раз столкнулись с проблемой управления и масштабирования) - netflixtechblog.com/edge-authentication-and-token-agnostic-identity-propagation-514e47e0b602
@AllMovieAndGameTrailers
@AllMovieAndGameTrailers 16 дней назад
ммм алгоритм бинарного поиска на несколько минут дольше писал и хоткеи не использует. боже дай сил окружающим интервьюера)))
@alexandr6055
@alexandr6055 18 дней назад
контент супер! Спасибо вам
@egor.cleric
@egor.cleric 18 дней назад
Мне кажется автор натягивает сову на глобус говоря, что RabbitMQ это про Push. Сам брокер не знает адреса потребителей, они к нему подключаются и запрашивают новые сообщения. Это только запутывает
@digital_train
@digital_train 18 дней назад
Действительно это может немного смущать что rabbitmq ориентирован на push based. В нем есть два типа API push & pull но в большинстве случаев используется push подход (www.rabbitmq.com/docs/consumers#subscribing )
@MrCipec
@MrCipec 18 дней назад
Пили про аутентификацию, всегда актуально)
@sergeystarostin179
@sergeystarostin179 20 дней назад
Спасибо. Еще бы добавить nats/nats streaming.
@ivanstrelka3448
@ivanstrelka3448 22 дня назад
Оч круто! Если можно покажите тесты на gRPC пожалуйста
@tihon4979
@tihon4979 22 дня назад
Доступно. Понятно. Без воды. Лайк. Подписка.
@user-zs3tk1gn2x
@user-zs3tk1gn2x 22 дня назад
спасибо!!!
@ivanstrelka3448
@ivanstrelka3448 23 дня назад
Топ контент! Спасибо
@paemox
@paemox 24 дня назад
Очереди сообщений не нужны практически никогда! Для этого есть обратный прокси и балансировщик nginx/Apache.
@digital_train
@digital_train 23 дня назад
Действительно в самых простых случая очередь можно заменить на реверс + LB Но это только часть функциональности, очереди так же: - Автоматически масштабируются при добавлении и удалении нод из кластера - Могут гарантировать транзакционность и использовать различные стратегии доставки - Часть из очередей могут использоваться в виде хранилища events в event-driven архитектуре - Так же поверх них удобно строить real-time стримы данных и событий и не переживать за то что какой-то из consumer упадет Важно посмотреть на кейс и уже после решать нужна ли очередь или нет
@paemox
@paemox 23 дня назад
@@digital_train - Балансировщик тоже может добавлять и удалять ноды - Если пользователь не получает ответ в течении 30 секунд, то в большинстве случаев он перестает его ждать и уходит. Поэтому нет смысла накапливать сообщения в надежде когда-то там обработать все. - Событийная архитектура усложняет разработку, если система не помещается на сервер, то лучше использовать шардирование, а не разбиение на подсистемы, что связаны событиями. - После падения консюмеров забивается и падает очередь, что делает ее бессмысленной для спасения. Проще разруливать падение на клиенте путем повторных запросов.
@jewgenijmoldawski3306
@jewgenijmoldawski3306 20 дней назад
Есть задачи, в которых поток запросов имеет ярко выраженные короткие пики, а в остальное время почти ноль. В этих случаях, если время ответа некритично или ответ вообще не предусмотрен, очередь очень помогает дешево разгрузить обработчики.
@unicoxr5tj417
@unicoxr5tj417 25 дней назад
поддержка видосиков комменто-лайком
@ivanstrelka3448
@ivanstrelka3448 28 дней назад
Оч круто!! Спасибо
@alexandr6055
@alexandr6055 29 дней назад
У меня вопрос по event sourcing. Вот Вы сказали, что мы каждый шаг пользователя фиксируем. Имеется ввиду прям i/o фиксация в бд. Или у нас просто собираются данные в некую коллекцию, а затем по завершении действий пользователем делаем запись в бд? При втором варианте конечно есть риск потери данных при сбое, но первый вариант кажется суперзатратным, все таки идёт постоянная запись в бд. Если юзер просто играется и добавляет товар через плюсик по одному до 20шт, затем удаляет, для меня это 20 транзакций?😢
@digital_train
@digital_train 28 дней назад
Отличный вопрос, спасибо что задали его! Действительно если рассмотреть реальную систему то такой подход будет слишком трудозатратен с тз "бека". Поэтому в примере с обычным e-commerce это будет слишком накладно + потеря корзины пользователя который ушел на несколько часов не так критична С другой стороны если мы продаем что-то на что есть жесткий лимит и пользователь будет сильно разочарован в случае отказа - например билет на самолет ил театр, то стоит фиксировать не саму корзину а событие старта процесса покупки тем самым мы снизим нагрузку на "бек", а с другой стороны сможем обеспечить гарантию только одной продажи для пользователя
@alexandr6055
@alexandr6055 28 дней назад
@@digital_train спасибо, теперь понял.
@novmicha
@novmicha Месяц назад
Про multi stage pipeline очень вскользь сказано, хотелось бы на конкретном примере. Например как организовать транзакцию когда идет целый ряд событий как результат одного. К примеру типовая ситуация: заказ от пользователя (оплата-пересчет остатков-информирование).
@digital_train
@digital_train 28 дней назад
Отличный вопрос, как раз разбирали его на теме про паттерны микросервисной архитектуры. Если коротко - транзакционность между микросервисами это дорого и сложно, но есть подходы к организации Тут пример ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ViCD4ERj578.htmlsi=M7WRUakxvd6PIYtH 1. Event sourcing 2. Saga pattern
@serb1146
@serb1146 Месяц назад
Спасибо.
@vladimir_v_it
@vladimir_v_it Месяц назад
Классное видео! Спасибо!
@immortal-spirit-13
@immortal-spirit-13 Месяц назад
Спасибо )🙂довольно таки хорошая теория 👍
@unicoxr5tj417
@unicoxr5tj417 Месяц назад
какнал об автотестах микросервисов на Джава?
@digital_train
@digital_train Месяц назад
Канал о помощи начинающим ИТ инженерам, тестировщикам и аналитикам Вот тут для примера мы рассматриваем архитектуру и паттерны микросервисов, что полезно для инженеров ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-ViCD4ERj578.html
@unicoxr5tj417
@unicoxr5tj417 Месяц назад
@@digital_train буду смотреть, спасибо. Пысы пре-миддл инженер-тестировщик с упором на Джава, что его три раза
@jonkarmok1840
@jonkarmok1840 Месяц назад
Я правильно понимаю что у Rabbit должны быть ниже задержки, чем у Kafka?
@digital_train
@digital_train Месяц назад
Если мы говорим на задержку на чтение и обработку сообщения то за счет структуры Kafka сообщение будет проходить быстрее, т.к. там по сути отсутствует умный роутинг и т.д. Но если наша задача выглядит как в зависимости от сложной логики раскидать сообщение по группам, с какими-нибудь полиси. То тут RabbitMQ будет быстрее так как в Kafka нет внутренних механизмов и все прийдется делать во внешнем сервисе, следовательно только передача сообщения между очередью и сервисом съест львиную долю времени Если суммировать, смотрите на ваш кейс_
@prostoprosa
@prostoprosa Месяц назад
Большое спасибо за видео. Понятно и доступно)
@nikolaykozlov4888
@nikolaykozlov4888 Месяц назад
Отличное представление информации. Просто огонь! Спасибо
@ilmussha
@ilmussha Месяц назад
Спасибо за видео, вы лучший на мире
@user-zw8mz5jy8f
@user-zw8mz5jy8f Месяц назад
Благодарю за видео, вкатывающимся будет очень полезно. Хотелось бы услышать каким образом работать с информацией, чтобы это все перерастало в навык, ибо информации на любые темы более чем достаточно, а вот как работать с ней - это большой вопрос)
@digital_train
@digital_train Месяц назад
Отличный вопрос! Постараюсь подготовить короткое видео на тему как лучшего всего подходить к поиску, фильтрации и работе с информацией и знанием
@digital_train
@digital_train Месяц назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@KartoplyanaHata
@KartoplyanaHata Месяц назад
Болел за экзаменуемого, как за любимую спортивную команду)
@digital_train
@digital_train Месяц назад
Показал хороший уровень 👍🏼
@ARaskolnikoff
@ARaskolnikoff Месяц назад
Думаю вы единственный человек, который смог передать многолетний опыт за час встречи настолько доступно и понятно 👍 Все строго по сути и делу - за час вы смогли сделать из полной каши в моей голове полное понимание «что, зачем и почему», которое возможно так бы и не сформировалось в дальнейшем за несколько лет работы автотестировщиком без вашей лекции, круто 🔥 Этот канал и весь ваш совокупный опыт в этой сфере очень ценны, продолжайте, супер полезно 🙂👍
@digital_train
@digital_train Месяц назад
Скоро выйдет продолжение про то как в ручную и автоматически тестировать контракты и сервисы если они соединены с Kafka / RabbitMq
@user-qu9tg8fd3y
@user-qu9tg8fd3y Месяц назад
Очень хорошее видео, видно, что от души делаете! Подрекламировать контент стоит, а то просмотров немного,знаю про ютифай, сразу дела быстрее пойдут.
@digital_train
@digital_train Месяц назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@digital_train
@digital_train Месяц назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@digital_train
@digital_train Месяц назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@digital_train
@digital_train Месяц назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@user-vx4fl1is2w
@user-vx4fl1is2w Месяц назад
вот бы меня бинарный поиск спросили на собесе
@digital_train
@digital_train Месяц назад
Бинарный поиск скорее как задача разогрев
@digital_train
@digital_train 2 месяца назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@digital_train
@digital_train 2 месяца назад
Подписывайтесь на канал 🚀 Еще больше полезных виде и информации для инженеров, тестировщиков и аналитиков! t.me/digital_train
@digital_train
@digital_train 2 месяца назад
Больше полезных материалов и видео на моем канале Telegram: t.me/digital_train
@digital_train
@digital_train 2 месяца назад
Больше полезных материалов и видео на моем канале, telegram: t.me/digital_train
@-maxxxeffect
@-maxxxeffect 2 месяца назад
спасибо! очень хорошая подача материала