Григорий Петров. Сложность, убивающая микросервисы

Последние несколько лет в сети появляются осторожные статьи о том, что микросервисы — не серебряная пуля. Amazon и Uber пробуют мигрировать проекты на монолитную архитектуру, а в команде Instagram почему-то всего 12 программистов.

В теории за каждый микросервис отвечает своя команда, они хорошо документированные и пользоваться ими не сложнее, чем сторонним API. А на практике — слак разрывает от постоянных коммуникаций и всем приходится знать всё. Почему так? Где нас обманули?

Расскажу о том, как мы осознаём код и что именно делает проект «простым» или «сложным». И покажу, что микросервисы не упрощают наши проекты, а делают их более сложными. Это «другая» сложность, с которой мы умеем бороться гораздо хуже, чем с легаси-монолитами в несколько миллионов строк кода.

Таймкоды

00:06 Введение в аутстафф

  • Компания нанимает и обучает разработчиков для помощи клиентам.
  • Клиенты часто предлагают разделить монолитные приложения на микросервисы.
  • Разработчики сталкиваются с трудностями в объяснении, почему это не всегда проще.

00:43 История микросервисов

  • Микросервисы существуют уже много лет, начиная с середины 90-х.
  • Они были вынужденной мерой для больших распределенных систем.
  • В начале 2000-х автор использовал распределенные системы, но не был доволен результатом.

02:28 Критика микросервисов

  • В последние годы микросервисная архитектура подвергается критике.
  • Примеры: Amazon Prime, Instagram, WhatsApp.
  • Микросервисы требуют больших команд для поддержки.

03:32 Простота и сложность микросервисов

  • Микросервисы просты в использовании, но могут быть сложными.
  • Автор хочет научиться быстро обучать разработчиков.
  • В прошлом обучение разработчиков занимало три года, а работа — полтора.

04:50 Нейрофизиология и сознание

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

05:48 Кошелек Миллера

  • Кошелек Миллера объясняет, как мы удерживаем смыслы в кратковременной памяти.
  • Пример с именами: внимание переключается между смыслами, и они быстро затухают.
  • Исследования показывают, что мы можем удерживать в памяти не более пяти смыслов.

07:24 Долговременная и кратковременная память

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

10:08 Осознание кода

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

12:02 Удержание деталей в памяти

  • Рабочая память удерживает мелкие детали, периферия внимания — более крупные.
  • Система подкрепления удерживает более сложные детали, которые описывают структуру проекта.
  • Долговременная память хранит большие структурные детали, которые можно активировать для осознания кода.

16:12 Сложность микросервисов

  • В микросервисной архитектуре нет фреймворков и туллинга, как в монолитах.
  • Для ориентирования в микросервисах нужно знать карту микросервисов и команды, поддерживающей их.
  • Разработка реалистичных фич требует общения с другими командами, что усложняет процесс.

18:07 Сложности работы с кодом в микросервисах

  • Написание кода в микросервисах требует абстракций и связей, которые формируются годами.
  • Фреймворки и опыт работы на проектах помогают формировать устойчивые конструкции.
  • Для микросервисов нет готовых фреймворков, что усложняет работу.

19:49 Пример с гиппокампом

  • Пример с пациентом, которому удалили гиппокамп, показывает, что долговременная память формируется годами.
  • Для микросервисов требуется время, чтобы разработчики освоили новые платформы.
  • Известные веб-фреймворки, такие как Django и Rails, формируют одинаковые детали у разработчиков.

22:46 Проблемы с микросервисами

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

27:01 Преимущества и недостатки микросервисов

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

30:47 Заключение и обсуждение

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

32:56 Архитектурные границы в монолитах

  • Обсуждение культуры микросервисов и их архитектурных границ.
  • Критика идеи использования сетки между микросервисами для упрощения.
  • Вопрос о критериях разделения функционала на микросервисы и монолиты.

33:28 Сложность и когнитивная сложность

  • Сложность выделения каждой функции в микросервис.
  • Пример с цитаделью и аутпостами.
  • Важность когнитивной сложности для команды.

35:08 Тактика распила монолитов

  • Обсуждение тактических аспектов распила монолитов.
  • Важность обсуждения в кулуарах.

35:34 Сравнение монолитов и микросервисов

  • Вопрос о сложности онбординга в монолитах и микросервисах.
  • Пример с монолитом, где все разложено по слоям, и микросервисами с четкими функциями.
  • Важность правильного распила монолитов для микросервисов.

37:13 Проблемы когнитивной сложности

  • Проблемы, возникающие у программистов при работе с микросервисами.
  • Пример с проектом на Rails и его сложностью.
  • Проблемы с когнитивной сложностью для микросервисов.

38:54 Будущее микросервисов

  • Проблемы с когнитивной сложностью для микросервисов в ближайшие годы.
  • Необходимость создания фреймворков для микросервисов.
  • Обсуждение в кулуарах для уточнения деталей.

40:12 Код-ревью и синхронизация

  • Важность код-ревью для синхронизации смыслов в команде.
  • Влияние стандартов кодирования на синхронизацию.
  • Рекомендация использовать стандарты кодирования.

Таймкоды сделаны при помощи Нейросети YandexGPT

Расшифровка видео

0:07
Всем привет Мы в еврон делаем аутстаф мы
0:12
нанимаем разработчиков обучаем разработчиков и эти разработчики помогают нашим клиентам и вот иногда
0:19
Клиенты приходят нам и говорят что давайте возьмём этот замечательный Монолит на питон и распи его на
0:26
микросервисы на Гоше круто же будет будет проще и тут нашим го разработчикам
0:34
приходится объединяться с нашими Python разработчиками и объяснить что нет проще
0:40
не будет И сегодня я хочу поговорить как же так случается что простые
0:47
микросервисы могут быть сложнее чем монолиты и я начну этот рассказ с того
0:55
откуда вообще пошли микросервисы им на самом деле много лет примерно в середине
1:03
девяностых Когда ещё только учился писать код Это был Ирлан это была
1:09
телефония это были большие распределённые системы и это была скорее
1:15
вынужденная мера потому что сервера тогда были большие там хьюлетт пакард
1:21
супердом и они были в основном вертикально масштабируемые а связь между
1:27
этими серверами была не то чтобы очень быстрое разработка отладка плой таких
1:35
систем была сложная во многом за счёт того что приходилось это всё как-то
1:42
упиваться в вертикально масштабируемые сервера и вот такие распределённые
1:48
системы использовали как крайнюю меру когда все другие способы сделать большую
1:57
систему были исчерпаны Я использовал распределённые системы
2:03
правда не в девяностых А в начале нулевых и мне это не понравилось и вот
2:11
сейчас мы можем последние год-полтора видеть такую осторожную критику
2:17
микросервисной архитектуры Я думаю Некоторые из вас видели эту статью
2:23
Андрея которая несколько месяцев назад наделала довольно-таки много шуму и
2:29
почитав эту статью Я как раз понял что неплохо бы объединить то что написал
2:36
Андрей с тем что я знаю про
2:41
нейрофизиология А какие свидетельства того что микросервисы критикуют мы
2:48
сейчас видим Ну например Amazon Prime огромный сервис по видео
2:53
стриминга мигрирует с микросервисов интересно на что команда Instagram всего
3:01
12 инженеров Это явно мало для того чтобы поддерживать микросервисы WhatsApp
3:06
ну чуть побольше 50 инженеров но всё равно это вот не то одиа в сотни тысячи
3:13
человек для по настоящему микросервисной архитектуры к которой мы привыкли аудиты
3:20
стартапа ссылочка на слайды Внизу там всё кликабельно говорит что чем проще тем лучше но стоп ведь микросервис
3:30
это просто сама идеология микросервисов заключается в том что за каждый
3:37
микросервис отвечает своя команда API хорошо
3:43
документировать их не сложнее чем использовать сторонние API Что может
3:50
пойти не так предыдущий спи спрашивал
3:59
на самом деле И если спросить меня чего я хочу на самом деле то я наверное Хочу
4:06
научиться быстро обучать разработчиков 20 лет назад когда я занимался
4:12
разработкой redm Это огромный плюсовые проект у меня была маленькая проблемка
4:18
мне удавалось обучить разработчика до нужного мне уровня примерно за 3 года а
4:23
работу они меняли примерно за полтора кредит чудовищно не сходился дебетом и
4:30
лет 5-6 назад я начал изучать нейрофизиология читать учебники общаться
4:36
с нейрофизиолог чтобы понять А как вообще наш мозг может осознавать код и
4:42
что именно делает код сложным давайте я за несколько минут это пересказу
4:50
современная нейрофизиология не знает как работает наше сознание но подозревает
4:56
что Сознание — это память долговременная память Где находятся сотни тысяч смыслов
5:04
академик Анохин называет их когнито Мом и связями между ними а вот осознаём
5:11
Окружающий мир Вот вот как я сейчас осознаю что передо мной активируя эти выжженные в долговременной
5:19
памяти смыслы несколько сотен или даже тысяч смыслов единовременно активированы
5:26
и рисуют мне картинку мысли ощущения и всё прочее что я сейчас осознаю но
5:35
смыслы не активированы вечно и смысл на который не направлено внимание и у
5:40
которого нету сильных связей с другими смыслами он деактивировали за несколько секунд и вот
5:48
наша кратковременная память — это те смыслы которые активированы сейчас уже
5:56
много лет выступая на конференциях Я люблю сказывать про кошелёк Миллера вот
6:02
известный художник комиксист ерёмин мне даже его так нарисовал правило 7 п МИД
6:09
что мы можем держать в рабочей памяти какое-то ограниченное количество смыслов
6:14
и это ограничение довольно-таки низенько вот как предположительно работает
6:21
кошелёк Миллера что мы хотим осознать какие-то новые непонятные штуки Вот
6:26
например люди мне представляются Васи Петя Коля человек представился привет Я
6:32
Вася я направил внимание на имя Вася которое сейчас ни с чем не связано но
6:37
смысл активирован потому что на него направлено внимание следующий человек встаёт и говорит А я Коля внимание
6:44
переключается на Колю А смысл связанный с Васей начинает со страшной скоростью
6:52
затухання поэтому А поздоровавшись с Колей я срочно переключаю внимание
6:58
обратно на Васю потом обратно на Колю потом обратно на Васю и вот так вот циклично переключая внимание между
7:06
смыслами я действительно могу удерживать в кратковременной памяти не очень много айтемов
7:12
современные исследования функционально магнитная резонансная томография показывает что там даже не 7 плю МИД там
7:20
в лучшем случае п а в среднем случае и первый такой важный
7:27
промежуточный итог который я хочу то что долговременная память и кратковременная
7:33
память в нашем мозгу устроены совершенно по-разному Мы не компьютер Это не как
7:39
оперативка и жёсткий диск примерно одно и то же но что-то побыстрее что-то помедленнее нет долговременная память —
7:47
это выжженные смыслы сформированные нейрональный ансамбли А кратковременная
7:52
память это то как они включаются и выключаются и они там должны уже быть и
7:58
сформироваться для того чтобы включиться или выключиться и вот на основании этой
8:04
простенько гипотезы Как работает наше сознание можно предположить а как мы
8:09
осознаём код и Откуда эти смыслы берутся в долговременной памяти смыслы берутся
8:16
во-первых из синтаксиса языка который мы выучили и вот для какого-то тривиально
8:21
Python кода мы осознаём не текст мы осознаём какие-то смыслы вот у нас коту
8:29
какие-то параметры смыслы берутся из опыта использования фреймворка если
8:35
человек некоторое время месяц года использовал какой-то фреймворк то взглянув на этот пановский код дн он
8:44
видит что Ага это модель там пара полей как они отображаются в админке Всё ясно понятно смыслы берутся из опыта
8:51
использования библиотек если человек долго использует панос библиотеку най то
8:57
при виде вот такого вот неня у человека осознаётся какой-то кусочек
9:03
матрицы смыслы берутся из идиомы стека опытный питани который несколько лет
9:09
пишет код и встретит вот такую вот странную конструкцию Что за не Почему
9:15
Нан кто это вообще писал что за эльфийский Ага всё понятно но берём
9:20
первого админа если он там есть смысл из каких-то обх идиом программирования кой
9:29
вот ка вот такую конструкцию он понимает Ага ну это ж пролог мы в начале токен
9:34
проверили Если нет токена то ушли и Баста Карапузики А вот если есть токен
9:40
если есть Хорошо то продолжаем ну и наконец смыслы берутся из имён
9:45
идентификаторов можно использовать вот такие смыслы совершенно никакого никак не помогают осмысленные имена
9:52
идентификаторов которые люди уже запомнили с годами они помогают рассказать какую-то
10:00
историю второй важный момент который я хочу подчеркнуть — это то что синтаксис
10:06
языка программирования — это очень-очень маленький кусочек для того чтобы у
10:13
программиста был действительно большой ассортимент вот этих вот смыслов деталях
10:18
Lego которыми он или она сможет осознать код Там кроме синтаксиса языка
10:24
программирования должно быть до фиги ещё всего и вот эти милые книжки что освоите
10:30
программирование за 24 часа за 8 часов зачеты кто меньше это но такое себе и
10:39
наше сознание оно ну для меня по крайней мере очень похоже на кусок графа А
10:47
который с одной стороны постоянно активирует смысл то что мы видим то что
10:52
мы слышим то о чём мы думаем то что мы ощущаем а с другой стороны эти смыслы
11:00
постоянно затухают такой граф который с одной стороны достраивается в Реал тайме
11:05
а с другой стороны разрушается в Реал тайме и смысл должен уже быть в
11:11
долговременной памяти для того чтобы его можно было активировать мы складываем
11:17
нашу реальность из тех деталек лега которые выучили новых деталей лега в ран
11:23
тайме мы построить не можем нужны месяцы и годы чтобы они
11:29
и вот как мы складываем из этих смыслов код какого-то большого проекта который
11:36
мы осознаём предположительно вот эти смыслы они активируются в каком-то
11:42
диапазоне вот самый кратковременный диапазон секунды — это та самая Рабочая
11:48
память под ручным управлением внимания из самых мелких деталях мы складываем
11:55
осознание того вот что мы видим прямо сейчас 1 2Т
12:01
строчки минуты — это Периферия внимания там уже Мы тоже можем использовать
12:07
мелкие детальки которые как-то друг за друга зацепились это то что мы читали в
12:13
функции минуту две назад то какой мы класс посмотрели какой-то модуль
12:18
какой-то текущий контекст вот дальше уже идёт интереснее
12:25
то что мы делали час назад назад 3 часа назад это уже ни вниманием
12:33
ни периферии внимания не удержишь и честно говоря вот для меня сейчас одна
12:39
из самых больших загадок Что именно удерживает эти штуки которые между
12:45
несколькими минутами и несколькими днями месяцами годами Ну есть название reward
12:52
System система подкрепления если бы ещё кроме названия что-нибудь про неё было
12:57
известно Ну вот что-то удерживает эти уже более сложные детали составленные из
13:05
мелких которые описывают уже вот такую черновую структуру какую-то части
13:11
проекта который мы сейчас осознаём вот то над чем мы работаем последние дни
13:19
какая-то большая задача какой-то фича которую мы пилим прямо сейчас это уже
13:25
дни это то что начало переходить в Долго время память это уже какие-то структурные
13:32
детали и наконец месяце проект который мы сейчас пишем то над чем мы сейчас
13:40
работаем наш пед проект это уже большие структурные детали которые оседают в
13:46
долговременной памяти которые там должны быть и которые мы можем активировать для
13:53
того чтобы построить большую конструкцию в Нашей памяти и наконец то чем мы
13:59
работаем годы старожилы проекта все Вот наши общие архитектурные знания это
14:08
несущие конструкции огромные сложные детали которые позволяют нам осознать
14:15
код и вот нам нужны все эти детали для того чтобы осознавать код и получается
14:23
что в мозгу в принципе есть механизмы для того чтобы осознать проект и тысячи
14:31
активированных смыслов где часть из них это небольшие детальки для того что мы
14:36
сейчас видим часть из них сцепились детальки чуть побольше для того что мы
14:42
видели несколько минут назад и всё большее большие детали которые позволяют
14:49
осознать наш проект вот с помощью таких обобщений и абстракций на пределе с
14:56
помощью тысяч активированных смы мы таки можем ворочить проектом размером с в
15:04
миллион строчек кода благо мозг Это одна большая
15:10
обобщая к фронтальной коре всё больше и больше абстрагируясь
15:30
целиком для зрительной коры есть такой механизм А вот для кода такого механизма
15:37
нету и программист не может отойти на шаг назад и посмотреть сверху на те
15:43
тысячи строчек которые он или она написали за последнюю неделю и Soft
15:49
complexity — это то с чем мы боремся как программисты Оно просто
15:55
убивает проекты если как-то с ней не махаться и вот мой главный
16:02
вопрос с которым я сегодня пришёл А насколько хорошо мы умеем махаться со
16:09
сложностью в микросервисах Давайте посмотрим на разные типы сложности я
16:15
начну со сложности ориентирования в проектах вот мы разработчик У нас есть
16:21
какая-то микросервисная архитектуру мы утром приходим На работу берём новую
16:26
фичу из бэклога и нам нужно понять А где Какой код менять для монолитов у нас
16:34
есть фреймворк и Тулин Тулин который мы привыкли за годы для которого у нас есть
16:41
смыслы фреймворк там дженг или рельс или СН или что-нибудь ещё к которому мы тоже
16:48
привыкли за годы для которого есть смыслы которые мы можем осознавать строить большие конструкции в нашем
16:57
сознании для сервиса никакого особого фреймворка и тунга нету и каждая
17:04
компании например Spotify вынуждены делать свои велосипеды вот Spotify
17:10
сделала Эй для того чтобы ориентироваться в больших
17:17
проектах нужно знать нужно знать карту микросервисов
17:25
для того чтобы понять хотим что-то менять И что самое
17:32
неприятное нужно знать карту команды которая поддерживает эти
17:38
микросервисы Потому что несмотря на это вот идеальное что каждый
17:44
микросервис — это сторонний API как только мы начинаем разрабатывать реалистичные фичи которые касаются
17:51
нескольких микросервисов нам приходится общаться с другими командами Извините
17:58
фрейм для этого не предусмотрены и Тулин тоже вот в в начале в confl чтобы понять
18:05
кто это А потом в жиру Ну окей возможно сложность работы с кодом
18:13
непосредственно написания кода в микросервисах хорошо Возможно у нас
18:19
легко писать код Вот как я уже сказал Осознание кода оно ограничено теми
18:26
деталька которые на рвались с годами непосредственно вниманием на ручнике мы
18:34
можем активировать ничтожно Малое количество смыслов и нам нужны связи и
18:41
абстракции которые уже должны быть в долговременной памяти чтобы сформировать
18:47
устойчивую конструкцию из нескольких сотен тысяч смыслов чтобы думать о
18:53
большом проекте мы полагаемся на фреймворки общие подходы опыт работы на
19:00
каком-то проекте месяцами годами вырабатываем эти связи и потом сел
19:06
открыл аналитик и нам Ясно понятно а для микросервисов нет никаких фреймворков
19:13
Они же микро сторонники микросервисов часто мне говорят что как как Гриш Ну ты
19:20
на самом деле передёргивает ты обманываешь вот у нас есть Это же фреймворк для микросервисов
19:27
но тут на мой взгляд немножечко не так потому что kubernetes
19:33

это замечательная сетевая операционная система это замечательный язык для описания инфраструктуры Но именно
19:41
инфраструктуры а не сотен тысячи и миллионов строк кода которые программисты пишут для того чтобы
19:48
реализовывать бизнес-задачи и вот в каждой большой компании в результате
19:53
возникает эта внутренняя дев платформа которую они делают А тут есть история
20:02
про разработчика про которого я на самом деле забыл рассказать и которую я расскажу
20:09
сейчас почему я говорил что самая долговременная память Личность — это 10
20:15
лет а потому что был такой пациент много-много лет назад которому в целях
20:21
борьбы с эпилепсии удалили гиппокамп тогда ещё не очень хорошо понимали Какая
20:27
часть мозга что отвечает и оказалось что гиппокамп как раз отвечает за
20:33
формирование долговременной памяти Ну или по крайней мере активно В этом участвует и у человека во-первых исчезла
20:41
возможность формировать долговременную память То есть он помнил несколько секунд если направлял внимание несколько
20:48
минут и всё и дальше Вот доктору который с ним общался приходилось раз в несколько минут заново представляться
20:55
потому что человек Отвлёкся и Привет Ты кто Отвлёкся Привет ты кто И А у этого
21:02
человека отрезала память примерно на 10 лет в прошлое то есть что было дольше 10
21:10
лет в прошлое он помнил хорошо а дальше Всё больше больше больше тумана и вот
21:15
где-то начиная с 7ми лет в прошлое он уже ничего не помнил и новые Воспоминания не формировались и вот
21:23
тут-то нейрофизиология что долговременная память всё-таки формируется годами а не
21:30
месяцами а для микросервисов никаких фреймворков нету иде в платформа которую мы
21:37
разрабатываем потребуются месяцы и годы для того чтобы разработчики навыки
21:43
работы с этим платформы перенесли в долговременный память многие компании azone Авито рассказывают про их дев
21:51
платформы которые они сделали для микросервисов и это круто Это позволяет
21:57
получать от микросервисов огромную пользу Но какой ценой нужны годы для
22:03
того чтобы у разработчиков сформировались вот эти вот детали Lego в долговременной памяти чтобы им стало
22:10
комфортно и быстро работать с этой платформой потому что известные веб
22:16
фреймворки такие как Джен рельсы они формируют у разработчиков одинаковые
22:23
детали и программист который 3-4 года работал с дн он приходит в в другой
22:29
проект там тоже работают с Джен и это значит что те программисты которые там
22:35
писали код они осознавали этот код примерно с используемом одинаковых
22:40
деталек Lego и у человека примерно такие же детальки он может думать об этом коде
22:46
а дев платформы У всех разные и требуется время на то чтобы их освоить
22:53
плюс вот эти вот все замечательные бойлер лейты для крое коры просто
23:01
убивают и требуют инвестиций для постоянного онбординга но ещё как
23:08
человек который одновременно занимается и Python и ru ещё немножко плюсами и
23:13
Гошка и два скриптом я не могу не пожаловаться что культура микросервисов
23:19
она на самом деле провоцирует созданию зоопарка из технологий ведь у нас
23:25
микросервисы каждый микросервис маленький поддерживается своей небольшой командой значит вот пришёл человек
23:31
который хочет писать на кристалле Но ведь не будет ничего плохого если он напишет микросервис на кристалле А мы
23:38
потом если что перепишем и в результате для каждого из этих микросервисов компании Нужно настраивать в icd права
23:46
доступа конфиг качество кода ревью этого кода правила контроля версии мониторинг
23:52
обсер бити тесты и всё прочее и оно неожиданно перестаёт быть
23:58
про Ну окей с написанием кода как-то тоже не фонтан возможно тесты возможно
24:04
этот код очень легко тестировать он очень надёжный вот там-то там-то у микросервисов всё хорошо а тут я
24:13
наверное согласен с автором статьи которую я показывал в начале что
24:20
микросервис — это распределённые системы и сделать хороший интеграционный тест
24:26
для распределённой системы чески невозможно просто потому что она
24:33
распределённая компании пишут свои вот эти дев платформы пишут свои уровни
24:39
абстракции там системы моковский
24:58
также это требует обучения и инвестиций у нас почему-то есть такая иллюзия что
25:05
если программист это человек который с высшим образованием который вот вроде
25:10
как умный То любой новый трюк ему или ей вот рассказали на Часовой лекции Как
25:16
делать обсер бити и всё Давайте побежали делать обсер бити но к сожалению
25:22
нейрофизиология говорит что это не так мы можем думать только те мысли которые у нас есть в головах для которых
25:29
сформировались вот эти смыслы детали Lego они там годами формируются и
25:35
человек который до этого делал монолиты отлаживать монолиты другим образом и
25:40
сейчас ему говорят А вот смотри у нас тут обсер бити мы тут сделали дев
25:46
платформу вот у нас тут Егерь сейчас мы тебе всё быстро покажем Вики и завтра
25:52
побежали у него месяцы потребуются на то чтобы с этим хоть как разобраться и годы
25:59
на то чтобы научиться с этим работать комфортно А ещ по моему опыту и опыту
26:05
моих коллег вот распределённые системы Они в отличие от Монолита каких-то вещей
26:11
не прощают они не прощают плохие архитектурные решения они не прощают
26:18
плохой контроль ошибок они не прощают Хаки А как Мы все знаем иногда приходит
26:24
бизнес говорит вот мешок денег надо сделать очень надо а потом технический
26:30
долг мы вернём вот Честное слово И если в монолите вот мы можем накопить
26:36
Некоторое количество технического долга то с микросервисной архитектурой но
26:42
буквально через пару недель просто перестаёт работать то есть у нас вот этот вот взрыв комбинаторный и время
26:50
отклика увеличивается со 100 миллисекунд до 10 секунд и как бы ВС я не то чтобы
26:58
критикую микросервисы микросервисы — это на самом деле круто для изготовления
27:04
надёжных и масштабируемых проектов проектов которые держат миллионы РПС
27:10
проектов которые переживают отказ дата центра проекта который Mission Critical
27:17
ценой огромных инвестиций в процессы Линг и обучение людей это вот та самая
27:27
сложность про которую я сегодня рассказываю она не в самом коде она в
27:33
том как мы с этим кодом будем работать и они очень хорошо себя зарекомендовали в
27:40
Гугле в Яндексе В Авито В азоне в огромных компаниях но когда к нам
27:48
приходят и говорят А давай распиле Монолит потому что будет
27:54
проще нет отвечаем Мыт и вот Судя по тому что я знаю понимаю у
28:01
нас там потом будет долгое обсуждение возможно кто-то из вас сможет меня переубедить микросервисы не могут быть
28:09
заменой монолитов просто потому что добавляют совершенно новый уровень
28:14
сложности к которому Как я вижу мы не готовы и с Монолита на самом деле можно
28:21
жить в Монолита можно проводить архитектурные границы вот как часто продают микросервис приходят и говорят
28:27
Смотри вот Монолит вот пришёл Вася он в одном месте на говнокод А посыпалась в
28:33
совершенно другом месте Ну как так можно жить это сонно непредсказуемо нельзя
28:38
фичи по одной релизинг
28:44
сеес вот поменял и оно изолировано от других микросервисов Да но нет а в
28:52
Монолита можно использовать литеры например для архитектурных границ которые просто стоит Астра
28:58
синтаксическое дерево всего кода сверяют с правилами которые заложил архитектор и
29:04
как только разработчик пытается поменять и внести какую-нибудь зависимость и вызвать откуда не положено ему линтер
29:11
говорит что нет Дэвид хамар хейсон автор фреймворка Руби ons он сейчас
29:18
пропагандирует такую архитектуру как Цитадель когда мы в центре устанавливаем
29:24
Маджестик Монолит где кор бизнес логика а вокруг делаем несколько астов микросервисов
29:31
которые заведут теми задачами где вот нужны прямо число дробилки которые
29:36
должны быть быстрые которые должны быть
29:42
изолирует что современные компы достаточно быстрые Вот у него есть фокус
29:47
когда он берёт Руби Это если что язык в четыре раза меньше чем медленнее чем
29:53
Python которую в свою очередь в 100 раз медленнее чем c+ Берт ru берёт свой любимый рейк rubi
30:00
on Rails Который он сделал ставит это всё на Достаточно мощный сервер использует Site В качестве базы данных
30:08
локальной в качестве кша и получает 50.000 пользователей Он правда не
30:15
говорит Как это коррелирует с rps Но от прямых от прямых вопросов уходит но
30:22
говорит что эти пользователи постоянно пишут и читают в базу поэтому там какие
30:28
сравнимые цифры и это На одном сервере Я хочу завершить свой доклад ещё одной
30:37
картинкой которую тоже нарисовал ерёмин по моей просьбе это
30:43
Software проблема сложности программного обеспечения то с чем мы боремся и когда
30:51
мы выбираем архитектуры языки фреймворки
30:56
тунги Вот я считаю что это всё совершенно не бесплатно потому что наши
31:02
мозги — это замечательный инструмент Но им нужно время повторение и обучение для
31:10
того чтобы научиться думать о больших штуках и если не заботиться о том коде
31:16
который мы пишем а просто его писать вот как художник который пишет масками то
31:24
художник то он может отойти на шаг и понять что фигня получилась А мы не
31:30
можем Я предлагаю это сейчас обсудить 10 минут а потом в кулуарах
31:39
Ну и сканируйте QR кодик выставляйте ваш
31:45
рейтинг всеми вашими комментариями потом со мной поделится мне это очень важно
31:50
Для того чтобы улучшать будущие доклады Я оставил нам 10 минут чтобы ответить на
31:55
ваши вопросы в зале когда мне буду убежать со сцены и спасибо за доклад А у
32:01
меня Ну такое вот постоянно складывалось ощущение А может быть вот примеры которые приводились они Потому что люди
32:08
не умеют готовить и они просто пытаются сделать распределённый Монолит Ну есть куча фреймворков там ддд инсорсинг Когда
32:16
у нас монолиты между собой взаимодействуют асинхронно и мы эти монолиты которые Ну как бы монолиты они
32:23
собственно говоря решают конкретную задачу и они пользуются всеми теми же бонусами которыми пользуется обычный
32:29
Монолит потому что на самом деле Ну вот когда говорят монолит это по большому счёту Ну как бы ложь и уже давно Но у
32:36
нас всё равно есть база данных у нас всё равно есть какие-то кэши у нас всё равно есть код который выполняется у нас всё
32:42
равно есть какие-то системы которые внешне там бухгалтерия какие-то интеграции Ну у нас нет монолитов уже
32:48
там 150 млн лет у нас всё распределённые системы поэтому может быть Ну научиться
32:54
готовить и всё хорошо будет и архитектурные границы которые можно проводить в Монолита то о чём я сегодня
33:02
рассказывал это вот та культура микросервисов которая у нас есть сейчас
33:08
Давайте напишем несколько сотен А лучше тысяч маленьких микросервисов на Гоше и
33:13
в качестве архитектурных границ будем использовать просто сетку между ними и
33:19
мы автоматически получим простоту Нет не получим сюрприз Следующий вопрос
33:25
пожалуйста Спасибо за доклад в соответствии с этим вопрос А
33:32
что является определяющим критерием Когда мы можем отделить
33:38
какой-то функционал микросервис А что-то лучше оставить условном монолите потому что в случае с микросервисами если мы
33:45
начнём каждую функцию выделять микросервис у нас растёт инфраструктурная и архитектурная
33:51
сложность А монолит мы долго пилить не сможем и станет Больно очень очень после
33:59
А ну вот Дэвид Хани Мар хэнсон даёт одну абстракцию что ставим Цитадель
34:06
посередине и в аутпост вносим то что не может жить в цитаделе например по
34:13
нагрузке или по каким-то ещё соображениям но тут смотри очень трудно
34:18
придумать кулинарный рецепт наверное по той же причине почему ни один Web
34:23
Framework не даёт а чего-то для просто потому что у каждой компании
34:30
бизнес логика своя и Также нельзя сказать что вот специальная пила со
34:36
специальными кривыми зубьями ей пилить и Монолит Нет я не думаю что оно так будет
34:42
работать и вот когда меня спрашивают Гриша А как писать код я отвечаю пишите
34:48
код так чтобы он рассказывал историю и желательно без вас в роли суфлёра как
34:55
распиливать монолиты распиливать монолиты так чтобы когнитивная сложность
35:00
получившегося была по силам в вашей команде и она потом смогла с этим
35:07
махаться как это делать тактически что выносить куда Каким образом опыты Тим
35:15
Лиды Тим Лиды опыт и архитекторы в ларах можно будет обсудить поподробнее Давайте
35:21
следующего Давайте Да теперь справа А вот молодой человек давно тянет руку Чуть подальше
35:28
сейчас я до вас
35:33
добегу Григорий Спасибо вопрос как раз вот по когнитивной сложности и сравнению
35:39
по сложности там например онбординга в Монолит и в микросервисы вот на мой
35:45
взгляд в докладе получилось немного однобоко сравнивал Монолит в котором есть архитектурные границы проложены Да
35:53
что всё хорошо приходит н да мы ему показываем анолит в котором
36:00
там всё по слоям всё разложено он всё понимает при этом мы ему показываем кучу микросервисов на Гош которые распиле
36:06
непонятно как непонятно как взаимодействуют Да там сложно вот но бывает же ситуация абсолютно обратная
36:12
бывает Монолит в котором там по намешано куча Непонятно чего то есть он открывает код на миллион строк и не понимает как
36:18
тут что где пилить и при этом бывает ситуация что у него есть 10 микросервисов которых чётко описаны
36:25
функции у каждого что е тебе нужна аутентификация Это здесь там оплаты Это здесь всё он понимает что ему нужно
36:32
понять один маленький микросервис то есть не всегда монолиты это просто А микросервис — это сложно и
36:39
всё это упирается как раз вот в ту ошибку которую ты указывал в докладе что
36:44
есть ошибка которую не прощают распределённые системы Да это архитектурные ошибки То есть если распилили неправильно да будет очень
36:50
грустно вот Но если распилить правильно то с микросервисами но оче хорошее
36:56
замечание попытаюсь за минуту примерно сформулировать и прожим и продолжим в
37:01
ларах Окей значит я понятное дело рассказываю не про джунов у нас в еврон
37:08
вообще нет джунов мы Аста у нас там midle midle П И когда я рассказываю про когнитивную
37:16
сложность естественно я рассказываю про те ситуации где у нас случаются проблемы
37:23
То есть когда программист приходит на работу начинает писать код и что он не
37:28
понимает где именно этот код менять в каком модуле Как тестировать и так далее
37:36
конечно такие проблемы не возникнут когда у тебя там 10 микросервисов они не
37:42
возникнут когда проект на 1.000 строчек кода и поэтому вот Если сравнивать друг
37:49
с другом то мы можем взять проект например на рельсах в несколько сотен
37:54
тысяч строк кода где уже сложность приходит и говорит ням и вот приходит
38:00
midle п разработчик 5 п лет работы с Руби Real сами у него в голове есть все
38:07
необходимые детали Lego Он точно знает как устроен Типовой рельсовый проект и
38:13
буквально за несколько дней он или она вот примеры как бы у наших клиентов
38:18
способна в этом проекте ориентироваться за счёт имеющихся несущих смыслов быстро
38:26
осознать сложные ции проекта и начать фигачит фичи сравнимый проект — это
38:32
будут сотни микросервисов и Ключевое на чём я сегодня заострил Внимание — это то
38:39
что для сотен микросервисов у человека не будет вот этими годами наработанных
38:47
смыслов как их правильно готовить в этом одна из
38:53
главных проблем и безусловно эту проблему она со временем решается со
38:59
временем мы придумаем для микросервисов какие-то фреймворки Best practices и
39:05
человек будет приходить и также брать Тысячи микросервисов как-то их у тебя в
39:10
голове раскладывать и комфортно с ними работать но я хочу рассказать про сейчас
39:17
вот ко мне сейчас приходят люди и говорят А давайте руб Монолит или Python
39:23
Монолит или Монолит на пых распи на гоч миксе и будет проще А вот нет сейчас и
39:32
ближайшие несколько лет проще не будет потому что для пайтона пых Руби человек
39:40
годами 10 лет копил вот эти смыслы и может построить в графе осознания Устрой
39:48
вю конструкцию из сотен смыслов удержать в голове кусочек большого сложного
39:54
проекта а для микросервисов сейчас нечем
40:00
А детали Обсудим в Кулаев там много нюансов на самом деле у нас ещё пару
40:05
минут есть Давайте последний вопрос и дальше Давайте последний вопрос и дальше в кулары А да Григорий Привет а можно
40:14
вот опять вернуться в сторону от монолитов к нейрофизиологии Ну вообще
40:20
исторически считается Да причина возникновения сознания это вот общение
40:25
какие-то социальные связи а в it Ну есть такая эзотерическая практика проникновения в чужое сознание которая
40:32
называется код review Вот ты рассматривал историю нейрофизиологии применительно к этому процессу А код
40:39
review позволяет офигительно синхронизировать эти самые детали то есть Несмотря на то что язык
40:46
программирования фреймворки а они задают вот эти вот общие конструкции есть ещё
40:53
куча вещей которые нигде не написаны и как раз делая друг другу код ревью
41:00
команда позволяет синхронизировать Вот эту вот терминологию на уровне смыслов
41:06
Так что через нескольких месяцев и Через несколько лет они начинают писать код
41:12
более-менее оперируя одними и теми же смыслами и поэтому им становится фундаментально
41:19
проще поддерживать код друг друга этому ещё очень хорошо помогает стандарт
41:26
кодирования ели Кто из вас ещё только раздумывает делать или не делать стандарт
41:32
кодирования так вот делать

Поделиться: