Size: a a a

Yandex Team Leader meetup

2019 May 16

AY

Anatoly Yumashev in Yandex Team Leader meetup
слабая связанность - да. но есть и другие архитектуры которые обеспечивают слабую связанность. например событийная архитектура и компонентные подходы.
источник

BZ

Bulat Ziganshin in Yandex Team Leader meetup
то что есть другие - не значит что м/с для этого нельзя применять
источник

СА

Сергей Аксёнов in Yandex Team Leader meetup
Коллеги, я сам проповедую принцип, что переходить на микросервисную архитектуру надо тогда, когда не перейти на неё уже нельзя. Если консолидированный ответ - нанять минимум по 2 человека на каждый микросервис, я бы откланялся)
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Anatoly Yumashev
слабая связанность - да. но есть и другие архитектуры которые обеспечивают слабую связанность. например событийная архитектура и компонентные подходы.
Тогда вопрос в терминологии и границ компонента/сервиса и микросервиса
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
Проблема bus factor решается плюс минус унификацией стека/фреймворка.

1. соблюдение Бритвы Оккама - не добавлять лишний компонент если можно не добавлять
2. не уходить в микросервисы пока на микросервис не образовалась команда в 5-10 чел.

если эти правила нарушены - велкам в bus factor )
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
Эти принципы работают как в управлении программистами, так и заводами по производству стеклотары или фабрике купальников.

Например у Ильяху Голдратта есть описание тех же принципов управления промышленными предприятиями. Когда завод строится так что на одних ресурсах можно производить продукцию разного типа.
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
Aleksey Melnikov
Уменьшение связанности компонентов? Горизонтальное масштабирование? Жёсткие требования по SLA и необходимость часто релизиться без простоя старых фич?
если продукт сделан так что вы получаете большую нагрузку, но при этом продукт не дает дохода для роста команды. то это ситуация когда волк продает 2 рубля за 1 рубль. а на вопрос где же прибыль? отвечает - пофиг прибыль, смотри какие обороты! это проблема экономики. Попытка продавать продукт за 1 рубль при себестоимости 2 рубля. По законам экономики такой продукт должен быть уничтожен. Либо должен быть найден способ продавать по 3 рубля или производить по 0,5 руб.
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Но ведь не для каждого нагружённого сервиса нужна большая команда. В том же Amazon разве разработчиков больше чем их микросервисов?
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
На сколько мне известно там из монолита переходить в микросервисы начали при размере в 1000 программистов. 1000 программистов делали 1 сервис. Затем 1 сервис начали пилить на микросервисы. Сомневаюсь что они сделали 1500 микросервисов )
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
На мой взгляд в реальных бизнесах пилят какой то шлак монолитный, который круто продается. И пилят так до упора. Пока совсем не станет плохо. А потом видя бутылочное горлышко (а оно всегда одно) - делают под нее микросервис. Вроде бы эта стратегия в ИТ называется "ложечка мороженого". Сделали. Потом берут следующее бутылочное горлышко. И так вокруг базового монолита образуется некий набор микросервисов.

В таких бизнесах обычно все хорошо с деньгами. И на микросервисы находятся бюджеты и оплата команд оптимального размера - 3-5 чел или 5-10 чел.
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Сергей Аксёнов
Коллеги, а как вы решаете проблему bus factor в условиях микросервисной архитектуры? Если для каждого микросервиса назначать мейнтейнера, то сложные продуктовые задачи, затрагивающие несколько микросервисов, становится тяжело планировать, поскольку непонятно, как именно в данный момент загружен мейнтейнер сервиса, сколько займёт времени тестирование и т.п. Также проблемы возникают, когда мейнтейнер уходит в отпуск или совсем.

С другой стороны, если установить политику "каждый боец может коммитить в любой микросервис", то быстро приходим к ситуации "у семи нянек дитя без глаза", когда за код никто не отвечает, работает он как попало, растёт техдолг ("надо быстро выкатить, потом отрефакторим"), и даже если в команде есть де-факто мейнтейнер, у которого за сервис душа болит,  он от этого всего только фрустрируется и аггрится на чужие коммиты.
Пока ехал в метро без связи перечитал исходный вопрос. В нем был акцент на bus факторе. Если вопрос именно в том как минимизировать боль ухода сотрудников...то мое первое сообщение эту проблему вообще не решало)) унификация технического стека, документирование архитектуры и дорожных карт... да и дробление сервисов на микросервисы может снизить риски, но повысит накладные расходы.
источник

AY

Anatoly Yumashev in Yandex Team Leader meetup
Одно из преимущество микросервисов - возможность использования разных стеков. Один стек на php, второй на nodejs, третий на go.
Все это круто работает если есть бюджет и под каждый микросервис хорошая команда.
А если бюджет на 3 человека, и решили разбить на микросервисы - то bus factor начнет зашкаливать и по закону Мерфи рано или поздно сильно долбанет по бизнесу.
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Достаточно мелко нашинкованные сервисы позволяют даже новым сотрудникам их быстро переписывать с нуля. Если картинка общая есть хотя бы у кого то в голове.
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Ну и да, тогда нет необходимости документировать сам микросервис (кроме api), использовать один стек и тд
источник

GO

Grigoriy Orlov in Yandex Team Leader meetup
Aleksey Melnikov
Пока ехал в метро без связи перечитал исходный вопрос. В нем был акцент на bus факторе. Если вопрос именно в том как минимизировать боль ухода сотрудников...то мое первое сообщение эту проблему вообще не решало)) унификация технического стека, документирование архитектуры и дорожных карт... да и дробление сервисов на микросервисы может снизить риски, но повысит накладные расходы.
А любая фиксация процессов означает накладные расходы на поддержку этой фиксации.  Но упорядочивание работы может нивелировать эти расходы за счёт снижения стоимости исключаемых лишних работ
источник

AM

Aleksey Melnikov in Yandex Team Leader meetup
Grigoriy Orlov
А любая фиксация процессов означает накладные расходы на поддержку этой фиксации.  Но упорядочивание работы может нивелировать эти расходы за счёт снижения стоимости исключаемых лишних работ
Да, вопрос баланса сложности проекта и уровня зрелости построенного процесса разработки. Что то можно успешно делать в хаосе, для каких то проектов нужны эволюционирующие процессы, дешевле выйдет :)
источник

BZ

Bulat Ziganshin in Yandex Team Leader meetup
уметь читать код гоарздо проще чем уметь писать. как и вообще читать код - гораздо проще чем его писать
источник

BZ

Bulat Ziganshin in Yandex Team Leader meetup
использовать разные языки можно кстати и при компонентном подходе
источник

BZ

Bulat Ziganshin in Yandex Team Leader meetup
я вообще разницы между компонентами и сервисами не вижу. главное - что у них есть чёткий api wall, дающий им независимость от внутренностей друг друга
источник

GO

Grigoriy Orlov in Yandex Team Leader meetup
Aleksey Melnikov
Да, вопрос баланса сложности проекта и уровня зрелости построенного процесса разработки. Что то можно успешно делать в хаосе, для каких то проектов нужны эволюционирующие процессы, дешевле выйдет :)
По своему опыту могу сказать,  что спецификации на фичи очень сильно помогают говорить на одном языке все участникам процесса и сохранить га будущее формально описание фичи. Это сильно помогает при уходе сотрудников и наименование новых. Да и тем кто работает тоже
источник