Кратко
Микросервис - это отдельное приложение, как правило, очень небольшое, которое поддерживает ограниченную функциональность. С помощью программного интерфейса (API) такое приложение встраивается практически в любой продукт и может работать в составе разных продуктов одновременно. Микросервисы часто противопоставляют монолитам, крупным приложениям, которые полностью реализуют большой набор функций. Особенностью монолитов является глубокое зацепление разных частей приложения и, как следствие, худшие характеристики масштабируемости в сравнении с микросервисами.
Например, приложение, которое рассылает письма по списку адресов электронной почты, или приложение, которое проводит аутентификацию пользователей, или приложение, которое отслеживает активность пользователей в сервисе, - отличные кандидаты, чтобы стать микросервисами. Можно повторять разработку похожего набора функций для нового продукта, а можно реализовать и отладить микросервис или несколько микросервисов, которые будут работать корректно для любого приложения.
Как понять
Традиционно существовала концепция приложения, которое полностью решает все задачи программного продукта - монолит. В эпоху быстрого развития рынка IT стало важным уменьшить показатель time-to-market - время доведения до потребителя новой функциональности или продукта. Схематично работу монолита можно изобразить так:
Практика разбиения программ на модули, которые можно переиспользовать в других программах, оказалась успешной. Сначала на стороне сервера (бэкенд), потом и на стороне клиента (фронтенд), части приложения стали выносить не только в отдельные модули, но и в отдельные самостоятельные программы. Это позволило переиспользовать прошедшую проверку временем функциональность в новых продуктах. Так и пришли к новому понятию - микросервис. А так работает веб-приложение, построенное на микросервисах:
Критерий минимальной функциональности микросервиса прост - логика работы микросервиса должна уместиться в голове одного человека.
Плюсы микросервисов:
Минусы микросервисов:
Чтобы автоматизировать часть задач и избежать проблем, связанных с недостатками использования микросервисов, используют современные инструменты CI/CD. Наиболее популярные решения:
Когда применять
Нужно держать высокую нагрузку. Проблемы пикового трафика легко решаются с помощью микросервисов, существуют готовые решения и облачные сервисы, которые обеспечивают автомасштабирование приложения. Сервисы добавляют ресурсы нагруженным микросервисам или создают копии.
Выросла команда разработки. Команда уже больше 10-15 человек и постоянно растёт, новичков становится сложнее погружать во все тонкости разработки. Микросервисы могут упростить командную работу и привести к единому набору стандартов разработки.
В приложении появилось много модулей. Модулей уже несколько десятков, они достаточно автономны, перевод их в микросервисы позволит легче масштабировать приложение в будущем или переиспользовать при разработке новых продуктов.
Стало очень много кода. Если приложение становится очень большим, то разбиение на микросервисы упростит его поддержку и развитие.
Нужно загружать приложение быстрее. Если приложение запускается несколько минут, микросервисы позволят оптимизировать загрузку и применить масштабирование для непроизводительных или высоконагруженных частей программы. Кроме этого, разработчики тоже не будут ждать длительной сборки приложения и его загрузки на этапе отладки.
Нужно использовать ресурсы компьютера оптимально. Модули могут обращаться к сети, к памяти или к процессору неравномерно. Применение микросервисов позволит оптимизировать этот компонент в работе приложения.
Нужно быстро выводить новые продукты на рынок. Нужно обеспечить минимальное время выхода на рынок новых продуктов и новых функций для уже существующих, микросервисы обеспечат максимальную скорость развёртывания.