Модульность без микросервисов: почему она того стоит

Wait 5 sec.

Монолит пилят на микросервисы вводят ради четырёх обещаний: производительности, отказоустойчивости, чистых границ и независимых релизов. А потом оказывается, что команда одна, база одна, язык один, а сервисов больше, чем разработчиков, — и ни одно из обещаний толком не выполняется.Это не только моё впечатление. Инженеры Google во главе с Санджаем Гемаватом, соавтором MapReduce и Bigtable, разобрали, почему микросервисы не дают того, ради чего их вводят, и пришли к выводу, что некоторые их проблемы прямо противоречат обещанным выгодам. Для проверки они сложили в один процесс настоящий интернет-магазин из 11 микросервисов и получили в 9 раз меньше ядер и в 14 раз меньшую задержку.Я повторил опыт на самом простом примере, какой смог придумать, — функции, которая складывает два числа. Через HTTP и gRPC её вызов стоит в 3,5 раза больше CPU и памяти, чем прямой, через RabbitMQ — в 6,3 раза. Бизнес-логики там ноль: это цена одного только вызова.А потом проверил на настоящем .NET-приложении — eShop, эталонном микросервисном приложении Microsoft. После перевода на модули оно занимает в 4 раза меньше памяти, вместо десяти развёртываемых единиц стало три, RabbitMQ не понадобился, а кода стало на 39% меньше. По дороге нашлись несколько дефектов исходной версии, которые возникали из-за несогласованности кода сервисов.Ниже разберём каждое из четырёх обещаний и посмотрим, что происходит на практике. Читать далее