​​Внезапно прошла волна репостов статьи «Microservices considered harmful». Ссылка ниже.



Первая мысль из статьи

>>Если у вас спагетти в монолите, то при делении вы получите «spaghetti over HTTP».



Все правильно, только при чем тут микросервисы? Не устаю повторять две вещи:

1. «Выбирайте микросервисы за их преимущества, а не потому, что код монолита ужасен»

2. «Не нарезайте монолит AS IS, проведите моделирование с самого начала, постройте корректную модель предметной области, выделите независимые модули/пакеты внутри монолита и затем выносите микросервисы»



Вторая мысль из статьи

>>Производительность хуже, потому что пакеты бегают по сети.

Сравниваем время обработки сообщений и время на передачу данных. Потеряли на передаче 5 секунд, выиграли на параллельной обработке 10 минут. Так это работает.



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

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



А вот вывод отличный: «keep in mind that almost all technical challenges (code modularity, scalability, single point of failure…) will not be magically solved by using microservices». Все по делу.



———

Микросервисы — не панацея, они сложны, но у них есть существенные преимущества. Эти преимущества не нужны всем, выбор микросервисов должен быть очень прагматичным выбором. Монолит может быть качественно и модульно написан. Микросервисы нужны тогда, когда требуется независимая поставка/независимая замена/независимое развитие/независимое масштабирование/независимый выбор технологий и это действительно дает серьезное конкуретное преимущество. А не ради хайпа 🙂