Микросервисы. Почему так популярны?

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

Есть 3 типа микросервисов: ⭐️Предметно-ориентированные: они обеспечивают слабую связанность, независимое развертывание и использование единого языка для моделирования бизнес-логики (например все про вакансии (поиск, фильтры, рекомендации), они слабо связаны, чтобы не зависеть друг от друга) ⭐️Интеграционные: обеспечивают взаимодействие между несвязанными приложениями (например твой сервис с внешними API ) ⭐️Элементарных операций: выполняют отдельные функции, вроде проверки аутентификации или обработки платежей

Они общаются через API (REST, gRPC или GraphQL), разработчики могут заглядывать в код других сервисов, но не трогать их напрямую тк все реализуется через контракты (соглашение между сервисами о формате данных для их взаимодействия)

++Так почему же все переходят на них?: ++⚡️Отказоустойчивость: один сервис упал, зато остальные живые. В монолите если что-то упало, то все -привет, даунтайм на час (например в Сетке сломается чат, но посты мы все равно будем видеть) ⚡️Agile: маленькие сервисы разрабатывать, тестировать и деплоить проще. Команда из 5 человек может обновить рекомендации за день, без риска сломать весь проект ⚡️Технологическое разнообразие: для чата - Node.js (тк быстро для реал-тайма), для рекомендаций - Python с ML. Тут мы не привязаны к одному стеку, как в монолите ⚡️Легкое обслуживание: тестируем только один сервис - ошибки локальные, фикс быстрый, нет того “большого шара” кода, где все связано ⚡️Масштабирование: если нагрузка на один сервис вырастет, то мы можем масштабировать только его, не весь кластер

//Судя по статистике - команды на микросервисах релизят в 2-3 раза чаще, а downtime снижается на 40%

Это все конечно круто, но есть и свои минусы: 💥Логи разбросаны: каждый сервис генерит свои логи - собирать в одном месте (типа ELK) нужно вручную 💥Мониторинг усложняется: сотни сервисов и за всеми надо следить (CPU, память, трафик). Важно настроить грамотный мониторинг с алертами при проблемах 💥Тестирование и отладка: нет единой IDE, дебаггинг через сервисы как головоломка, интеграционные тесты становятся ночным кошмаром

Монолит это когда все в одном - база кода огромная, обновление несет риск для всего. До 2013 года все так делали, но когда приложение разрастается, то монолит уже может не вывозить Микросервисы распределенные - каждый блок независимый, обновляешь один, остальное не трогаешь. Скорость разработки растет, масштабирование проще. Но монолит все еще хорош для маленьких проектов тк проще стартовать, меньше overhead Когда команда уже >10 человек, а приложение сложное (финтех, e-com), или нужно быстро масштабироваться - то смотрим в сторону микросервисов

Микросервисы. Почему так популярны? | Сетка — социальная сеть от hh.ru