stdray: (Default)
[personal profile] stdray
Был хайп лет 5-6 назад, когда вся хабра была забита трактовками термина, размышлениями, опытами и прочими рекомендациями на этот счет. Я к этому относился скептически, считая, что моя работа над проектом с прогнозируемой нагрузкой, где во главу угла ставится «скорость доставки фич» («выкатывание новой функцинальности» - можно называть как угодно), при том, что все, что надо масштабировать уже сделано соответствующим образом (воркеры, слушающие очереди), не требует структурной реорганизации. А значит, можно не париться, по поводу очередного веяния.

 

Всё изменилось, когда я сменил работу. Попал в ситуацию, где соотношение сервисов к количеству разработчиков было 3-4 к 1. И, конечно, всё это называлось «сервисной» архитектурой, а при продумывание того, как нам делать новую функциональность люди ориентировались на непонятные мне каноны микросервисов и «облачную архитектуру».

 

Что вообще я знал про микросервисы из статеек в интернете:

  • Всегда есть противопоставление некоему «монолиту»
  • Есть понимание, что «монолит» - енто некий сервис с API, который крутит внутри себя кучу фоновых процессов
  • Выделяем фоновые процессы в самостоятельные сущности, получаем микросервисы
  • Разбиваем большое сложное API на логически связанные разделы, уносим в самостоятельные сущности, и вуаля микросервисы

 

Что я вообще понимал под термином «микросервис»:

  • Технически это сайт или служба/демон, который имеет простой и понятный API
  • Инкапсулирует в себе некую атомарную часть «бизнес-логики» (кавычки потому, что адепты микросервисов чому-то редко употребляют ентот термин)

 

Какие я видел плюсы подобного подхода:

  • Настоящее разграничение и изолированность (грабли в сервисе А, не долетают до всех от него зависимых, технически невозможно доступиться до условного синглтона)
  • Простота архитектуры и реализации (чем проще задача, тем меньше надо инфраструктурных наворотов)
  • Масштабируемость по людям (раз уж мы все сегментировали даже технически, то можно нагонять ораву)
  • Разнообразность технологий (если потребителям видно только API, то похуй как оно врутри сделано)
  • Простота тестирования (меньше логики и внутренних инфраструктурных сложностей – проще писать тесты)

 

Что на практике:

  • Пересечение логических зон ответственности нескольких микросервисов (самое страшное, имхо, тому что не понять, куда впиливать фичу)
  • Сложный и плохо формализуемый граф зависимостей (если в условном монолите, написанном на популярном языке, можно легко посмотреть граф, кто от кого зависит и пробежаться по конкретным примерам использования, то в миросервисах енто все крайне затруднено)
  • Дисбаланас функционалисти (один сервисы делаю дохуя, другие реально «микро»)
  • Дисбаланс нагрузки (следствие предыдущих 2 пунктов, то есть от одного сервиса зависят 100500 других и, значит, его будут  нагружать)
  • Невероятная сложность тестирования (из-за того, что зависимости стали «физическими», тк реально разные приложения работают, то находить несостыковки можно только интеграционными тестами, а они сами по себе в 1000 раз более долгие чем юнит-тесты, а «моки» на таком уровне – енто сложнее чем вся фича)
  • Замедление разработки (если фича требует поддержки от 2 или более сервисов, то надо общаться с людьми, а потом синхронизировать процесс деплоя и тестирования)
  • К любой вообще логике добавляется A/B тестирование (как следствие предыдущего пункта, тому что при количестве сервисов более определенного порога,  просто невозможно поднимать согласованное окружение на одной машине, а тестироваться полными окружениями в облаке ради 2-3 сервисов невероятно дорого).
  • Усложнение формальных процессов, тому что даже автотесты через A/B предполагают хотя бы наличие веток в разных репозитариях с единым названием (или любой подобный механизм согласования)
  • Невероятно сложные релизы, тому что заказчик хочет в проде «вон те 2 фичи», которые невероятно сложно отодрать от общего потока разработки

 

Резюмируя. Сам по себе переход на микросервисную архитектуру не решает ни одну проблему вообще. Максимум, что он дает – это много боли, через которую, можно дойти до достаточно удобной инфраструктуры управления всем ентим зверинцем. Те же самые выстраданные A/B-тесты -- большой профит. Да и то, это реально только в условиях ГОМОГЕННОЙ инфраструктуры, когда для одних и тех же вещей, используется одна и та же технология и общие библиотеки для них. В противном случае, можно весело смотреть, как при появлении нового микросервиса пишется клиент для него на первом ЯП, потом втором и так далее. Это все идиотская трата времени. При гетерогенной инфраструктуре теряется экспертиза, потому что вот эти все разговоры типо «вот тут у на MySql, а вот тут возьмем PostgreSQL, у нас же микросервисы», ведут лишь к снижению уровня требований по работе с каждой конкретной технологией. Кроме того, очень сильно падает уровень вовлеченности. Люди знают, что отвечают за свои 3.5 сервиса и им поебать, чо там происходит в остальных. Я могу допустить, что есть некий уровень сложности, где подобных подход решает, без него никак. Но если подобная дичь творицца лишь потому, что в интернетах зафорсили как «последнее слово техники», то нахуй нахуй.

Проектирование AI

Date: 2018-03-24 04:10 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
С точки зрения проектирования и разработки сверху вниз теория микросервисов работает как дети в школу... те недостатки которые вы написали в основном преодолеваются на стадии проектирования, но вот проблем сопровождения и развития это не решает и это действительно проблема... система получается настолько сложная и зависимости настолько запутанные, что сам черт ногу сломит... где же выход? AI и самообучающиеся системы, которые будут на основе архитектуры микросервисов мсами себе поддерживать и развивать генерируя и тестирую новые и старые микросервисы... открою маленький и грязный секрет, что архитектура микросервисов не для нас с вами, а для AI...
Edited Date: 2018-03-24 04:12 pm (UTC)

Re: Проектирование AI

Date: 2018-03-24 07:10 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
...конечно приемлемо на «ты»... просто с чуваком, которого интересуют такие темы надо говорить на «вы» и по имени отчеству, ради уважения или респекта как говорят сегодня...

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

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

Edited Date: 2018-03-24 07:13 pm (UTC)

Re: Проектирование AI

Date: 2018-03-24 08:54 pm (UTC)
paserbyp: (Default)
From: [personal profile] paserbyp
...AI появится тогда когда надо будет генерировать код и этот генератор исправлять... и это кстати, маленький и грязный секрет по поводу джоб секьюрити, зачем нужны генераторы кода и что с ними происходит когда разработчик увольняется и его необходимо переписывать...

(no subject)

Date: 2018-03-24 07:46 pm (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Ну да. Чудес не бывает.

Прелесть микросервисов в том и заключается, что за качество на макро-уровне никто не отвечает.

(no subject)

Date: 2018-03-24 08:28 pm (UTC)
vit_r: default (Default)
From: [personal profile] vit_r
Ха. Кто принимает решения стратегического уровня? Менеджмент и "вадущий архитектор".

Какая ситуация для них лучше: мы не можем построить сквозную архитектуру, потому что архитектор - остолоп, а менеджер нанял каких-то тупых козлов, или у нас не хватает ресурсов, нам нужны ещё люди для создания микросервисов. И ещё люди. И ещё люди. Ну и что, что не работает? "К пуговицам претензии есть?"

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags