четверг, 30 июля 2015 г.

Микросервисы глазами простого разработчика

Последние два-три года стало модно говорить о микросервисах. В твиттере и на профильных ресурсах слово "microservice" мелькает уж очень часто. Но...

В моём представлении микросервис по сути представляет собой самостоятельный компонент большой системы, выполняющий узкий круг задач. Кто-то превращает большие монолитные проекты в набор микросервисов, кто-то создаёт проекты сразу изначально в виде набора микросервисов. Наиболее важная на мой взгляд выгода в использовании микросервисов - достижение слабой связанности компонентов проекта. Плюс можно разделить микросервисы между командами разработчиков, что наверняка увеличит производительность труда.

Интересно, что микросервисы как подход к разработке можно было применять и пять лет назад и десять - этому ничего не мешало, просто не было такого тренда. Никто не мешал дробить крупные Java EE-проекты на большое количество маленьких WAR и JAR, разворачивать фермы Glassfish или JBoss и добиваться той же слабой связанности. Так же никто не мешал разрабатывать микросервисы в виде standalone-приложений. В целом этому способствовало и существование OSGi-контейнеров, которые, впрочем, в народе не особо прижились. Наиболее важной причиной увеличения популярности микросервисов на мой взгляд является популярность облачных сервисов: PaaS, IaaS и прочих XaaS.

Standalone или контейнеры?

В этом вопросе, на мой взгляд, удобнее standalone-микросервисы. Во-первых при обновлении библиотек любой контейнер прийдётся перезапускать вместе со всеми запущенными в нём приложениями. Это решается запуском нескольких инстансов контейнеров и фэйловер-конфигурацией, но... Во-вторых лучше много мелких инстансов JVM, чем несколько раздутых. Однако, если в микросервисах используется HTTP-контейнер, то для каждого инстанса понадобится свой порт, что не очень удобно.

Spring Boot и WildFly Swarm

На волне популярности микросервисов начали появляться фреймворки и проекты, упрощающие разработку микросервисов: к вышеупомянутым OSGi-контейнерам добавился Spring Boot, а так же ведётся разработка WildFly Swarm. Оба проекта предоставляют возможность разрабатывать микросервисы в виде standalone-приложений, минимизируя затрачиваемое время на конфигурирование компонента.

Стоит отметить, что Spring Boot уже является стабильным и достаточно успешным фреймворком, с помощью которого можно без лишней головной боли разрабатывать standalone-приложения, основанные на Spring Framework. Хотя далеко не все рекомендуют это делать, особенно приверженцы Java EE.

А вот с WildFly Swarm всё несколько хуже. Идея проекта заключается в интеграции Java EE в standalone-приложения. Смысл в этом есть, но сам проект ещё находится в разработке и до стабильного релиза, судя по всему, ещё очень далеко. Если при разработке простенького микросервиса с REST в случае со Spring Boot в итоге получается компактный jar на 5-10Мб, то в случае WildFly Swarm у вас в зависимостях будет добрая половина сервера приложений WildFly. Модульность Spring Framework взяла своё в данном случае.

Слово "микросервис" использовано в данном посте 20 раз.

Полезные ссылки

Комментариев нет:

Отправить комментарий