Одно из преимуществ микросервисной архитектуры — возможность сочетать несколько языков программирования в рамках одного приложения. Это позволяет подбирать наборы технологий под бизнес-задачи его конкретных компонентов.

Некоторые языки и фреймворки разработчики чаще выбирают в качестве основы для микросервисных приложений. Рассмотрим часть из них и выясним, почему они популярны.

Go

Golang (или Go) разрабатывали с учетом опыта языков C и C++. По своей эффективности он значительно их превосходит.

Вот основные особенности языка, делающие его привлекательным с точки зрения разработки микросервисов:

  • Высокая скорость работы. Те, кто переходят на Go, отмечают ускорение времени ответа по большинству операций в десятки раз. Язык отлично подходит для высоконагруженных приложений с большим трафиком.
  • Надежная поддержка параллелизма. Можно использовать горутины (Goroutines), чтобы приложение взаимодействовало с любым количеством сервисов, не блокируя веб-запросы. По сравнению с традиционными потоками, используемыми в других языках, горутины требуют меньше памяти и управляются не операционной системой, а средой выполнения Go. Это повышает эффективность использования нескольких ядер для параллельных задач.
  • Генерация небольших бинарных файлов. Бинарники Go отличаются маленьким размером и самодостаточностью: при сборке формируется единственный двоичный файл, в котором находится все необходимое. Это значительно ускоряет построение сборочных конвейеров.
  • Отличная поддержка тестирования. Быстрое время компиляции Go и инструменты для тестирования позволяют писать надежные тесты и легко встраивать их в рабочие процессы. В том числе запускать тесты как часть конвейеров сборки без специальной настройки.

Фреймворки Golang для микросервисов: какие стоит выбрать

Рассмотрим несколько из них:

  1. Gin  и  Echo

    Это микрофреймворки Go для разработки REST API. Их выбирают для проектов, требующих повышенной производительности. Оба фреймворка отличает легковесность, встроенный рендеринг и поддержка промежуточного ПО.

  2. Полнофункциональный RESTful-фреймворк для быстрой разработки Go-приложений. Спроектирован специально для модульной разработки. В основе его архитектуры несколько слабосвязанных модулей, которые можно использовать по мере необходимости, в том числе независимо от веб-разработки в Beego, например в сетевых играх. Beego подходит для любых приложений и способен обрабатывать большие объемы трафика. Однако для простых REST API стоит использовать легковесные микрофреймворки.

  3. GoMicro  и  GoKit

    Это наборы инструментов для создания микросервисов на Go, использующие RPC как основной шаблон обмена сообщениями.

    GoMicro входит в состав платформы для облачной разработки Micro, начиная с версии Micro v3. «Из коробки» есть обнаружение служб, балансировка нагрузки, встроенные возможности публикации/подписки и кодирование сообщений.

    В GoKit также много функций для разработки микросервисов или элегантных монолитов, включая аутентификацию, обнаружение сервисов и интеграцию с популярными инструментами трассировки и мониторинга. Однако если GoMicro позиционирует себя как платформу, то GoKit — скорее как решение, интегрируемое с платформой. По сравнению с GoMicro GoKit более гибок, но у него более высокий порог входа.

    В начале работы с экосистемой Go многие рекомендуют избегать RPC и использовать микрофреймворки (Gin, Echo), а к GoMicro и GoKit переходить позже, когда появится реальный опыт разработки на Go. Некоторые и вовсе советуют начинать с библиотеки Go net/http, а к сторонним фреймворкам обращаться только при появлении конкретных задач, которые не могут быть решены стандартными средствами.

Node.js

Node.js — это среда выполнения, использующая движок Google V8 для трансляции JavaScript в машинный код. Сейчас технологию часто используют для написания микросервисов, в том числе для онлайн-игр, чатов, видеоконференций, а также устройств и приложений IoT, работающих в режиме реального времени с интенсивным использованием данных.

Основных причин для этого несколько:

  • Производительное ядро, основанное на движке Google V8. Движок, используемый в реализации Node.js, изначально разработан для браузера Chrome.
  • Богатая экосистема, построенная на модульном принципе. Код Node.js разрабатывают в отдельных файлах, называемых модулями или пакетами. Это идеально соответствует концепции микросервисов. В NPM (Node Package Manager) можно легко найти стабильные, зрелые модули для конкретных нужд, которые используют тысячи других разработчиков. Их легко развертывать, и в них есть наборы тестов, обеспечивающие работоспособность.
  • Событийно-ориентированное и асинхронное программирование с неблокирующим вводом/выводом. Благодаря им приложения, написанные на Node.js, способны обрабатывать запросы с минимальным временем отклика.
  • Низкое потребление оперативной памяти. Это становится существенным преимуществом при большом числе микросервисов.
  • «Бесшовная» поддержка JSON. Хотя другие серверные технологии также применяют формат JSON, Node.js делает это без дополнительных преобразований, используя JavaScript. Это особенно удобно, когда вам нужно создать RESTful API для поддержки баз данных NoSQL, например MongoDB.

Фреймворки Node.js для микросервисов: какие подходят

Рассмотрим несколько фреймворков, подходящих для разработки микросервисов на Node.js:

  1. Express — это самый популярный веб-фреймворк для приложений Node.js. Он предоставляет обширный набор функций и имеет развитое сообщество. Express стабилен, гибок и безопасен.
  2. Koa — это усовершенствование Express. Он полностью использует новейшие функции Node.js, работает без обратных вызовов и имеет мощную систему обработки ошибок. Как и Express, Koa — микрофреймворк, но более легковесный и производительный.
  3. Nest — платформа для разработки масштабируемых приложений. Его используют, когда есть потребность в более функциональной среде по сравнению с Express и Koa. В микрофреймворках многие зависимости приходится устанавливать вручную: ведение журнала, аутентификацию, соединение с базой данных и многое другое. В Nest большинство этих функций идет «из коробки».
  4. LoopBack — это хорошо расширяемый фреймворк на основе Express. В 2019 году отмечен премией API-2019 как лучшее API Middleware-решение. Он будет хорошим выбором, если требуется быстро создать динамические сквозные REST API.

Java

Java создана в 1990-х годах и до сих пор остается одним из самых востребованных языков программирования, в том числе для разработки микросервисов, благодаря следующим особенностям:

  • Большое сообщество и богатая экосистема. Для работы с Java проще найти разработчиков программного обеспечения. Также для этого языка доступна, возможно, самая большая коллекция библиотек. Большинство из них переносимы на другие языки JVM.
  • Читабельность кода. Аннотации Java упрощают работу с микросервисами, особенно при использовании таких платформ, как Spring Boot.
  • Поддержка ООП. Java — объектно-ориентированный язык программирования (ООП), что делает его предпочтительным для повторного использования ресурсов.
  • Статическая проверка типов. Это повышает безопасность программ.
  • Поддержка нескольких языков в JVM. Использование Java позволяет разработчикам легко экспериментировать с другими языками и платформами в рамках одного приложения, что соответствует концепции микросервисной архитектуры. Есть большой выбор языков, работающих на JVM: Java, Kotlin, Groovy, Scala, Clojure.
  • Стандарты Java EE. Они хорошо подходят для реализации микросервисов, например: JAX-RS для API, JPA для обработки данных, CDI для внедрения зависимостей (Dependency Injection) и управления жизненным циклом.
  • Развитие языка. Язык все еще развивается, и новые функции появляются регулярно.

Многие при выборе языка для разработки микросервисов списывают Java со счетов, ссылаясь на высокое потребление памяти и медленный запуск из-за используемой виртуальной машины JVM. Однако Java продолжает развиваться. В 2019 году была представлена виртуальная машина GraalVM, предназначенная для сокращения времени запуска приложений на основе JVM и упрощения создания «многоязычных» приложений.

Фреймворки Java для микросервисов: несколько вариантов

В Java есть множество фреймворков, которые отлично подходят для микросервисов. Рассмотрим несколько из них:

  • Spring Boot — это самая зрелая и популярная на текущий момент среда Java для написания микросервисов. Здесь полный набор нужных инструментов, включая обнаружение сервисов, балансировку нагрузки, поддержку Cloud Native, безопасность, интеграцию с инструментами мониторинга и многое другое. Многие разработчики выбирают Spring Boot для микросервисов из-за его стабильности и большого сообщества.
  • Vert.x — это набор инструментов от Eclipse Foundation для создания реактивных микросервисов на основе JVM. Vert.x — полиглот, поддерживает множество языков: Java, Scala, Groovy, Kotlin и даже JavaScript. Он предлагает несколько моделей асинхронного программирования и позволяет обрабатывать больше запросов с меньшими ресурсами по сравнению с традиционными фреймворками, основанными на блокирующем вводе-выводе.
  • Micronaut, Qarqus, Helidon — это новое поколение фреймворков, созданных за последние три года и предназначенных для разработки высокопроизводительных микросервисов. Они используют GraalVM, поэтому быстро запускаются и потребляют меньше памяти по сравнению со Spring Boot.
  • Dropwizard — это полезный набор инструментов для создания веб-сервисов RESTful. Представляет собой нечто среднее между библиотекой и фреймворком. Он избавит от необходимости подключать и настраивать по отдельности каждую требующуюся библиотеку. Dropwizard по умолчанию поставляется с такими библиотеками, как Jetty, Jersey, Jackson, Metrics, Guava и многими другими.

Python

Python универсален и подходит для различных типов приложений: от простых системных скриптов до больших и сложных объектно-ориентированных приложений, которыми пользуются миллионы пользователей.

Рассмотрим, чем данный язык может быть полезен при разработке микросервисов.

  • Высокая скорость разработки. Python — интерпретируемый язык, поэтому можно быстро вносить изменения в код и запускать его. Неявная, но строгая типизация обеспечивает меньший объем кода по сравнению с другими языками. Это важно при частом выпуске обновлений и позволяет быстро дополнять приложения новыми функциями.
  • Большое сообщество и множество доступных инструментов. У Python множество зрелых фреймворков, библиотек и огромное сообщество, которое их поддерживает. Это избавляет от необходимости самостоятельно искать решения для уже известных проблем.
  • «Интерактивность» языка. Благодаря встроенному интерпретатору Python позволяет кодировать на лету. Это особенно актуально в системах машинного обучения и анализа данных (Data Science).

Некоторые разработчики критикуют язык за низкую скорость работы: приложения, написанные на Python, как правило, работают медленнее по сравнению с компилируемыми языками со статической типизацией. Но это справедливая плата за более быстрое развертывание приложений. Возможно, Python не будет лучшим выбором для высоконагруженных приложений с большим трафиком. Зато он хорошо подходит для web-приложений средней нагруженности и на этапе MVP.

Кроме этого, язык развивается, и существуют способы его ускорить, если вопрос скорости критичен для приложения. Например, можно использовать интерпретатор PyPy с поддержкой Just-In-Time (JIT) либо преобразовать часть кода в скомпилированный путем создания расширений C или использования Cython.

Фреймворки Python для микросервисов: несколько вариантов

Для Python существует огромное число фреймворков, рассмотрим те, что могут быть полезны для разработки микросервисов:

  1. Популярный полнофункциональный фреймворк для Python. Он зрелый, хорошо документированный, у него большое сообщество. Django подходит как для маленьких, так и для больших проектов, так как он хорошо масштабируется, безопасен и достаточно быстр. Однако если нужно лишь создать серверную часть REST API, Django может оказаться избыточным решением. Тогда можно обратиться к платформе Django REST Framework, которая использует Django в качестве основного движка: у нее более простой интерфейс для разработки REST API.

  2. Популярный микрофреймворк для микросервисов на Python. Он легковеснее и быстрее Django. Чаще всего это выбор по умолчанию для любого веб-проекта, которому по каким-то причинам не подходит Django. У Flask множество расширений для настройки вариантов хранения, взаимодействия с базой данных, аутентификации и авторизации, безопасности и многого другого. Конечно, на подобное конфигурирование потребуется время, но в результате в приложении не будет лишних библиотек. Существуют несколько оболочек поверх Flask, которые могут быть полезны при реализации микросервисного паттерна «Шасси» (Microservice chassis): PyMS, Eve.

  3. Микрофреймворк, ориентированный на производительность. Он работает на PyPy и поддерживает Cython на CPython. Здесь ограниченный набор функций, но выше скорость работы по сравнению с Django и Flask. Falcon может быть хорошим выбором для высокопроизводительных приложений.

  4. Асинхронные фреймворки

    Предназначены для повышения производительности в условиях большого количества одновременных подключений. Чаще всего в этой группе используют FastAPI и Sanic. У них схожий с Flask синтаксис и высокая скорость работы. Многие также рекомендуют Starlette, на базе которого строится FastAPI, за легковесность и возможность гибкого конфигурирования.

PHP

PHP — скриптовый язык для разработки веб-приложений. Назовем его важнейшие особенности с точки зрения микросервисов:

  1. Высокая скорость разработки и простота отладки. Как и Python, PHP — интерпретируемый язык, что сокращает время сборки приложений.
  2. Богатая экосистема и внушительное сообщество. Доступно большое количество стабильных фреймворков и библиотек для PHP. У большинства фреймворков открытый исходный код, поэтому их можно расширить либо разработать собственный фреймворк, отвечающий специфическим требованиям.
  3. Высокая производительность (начиная с версии PHP 7). В прошлом PHP был недостаточно быстрым, но ситуация изменилась с появлением версии PHP 7, основанной на проекте PHP Next-Gen (PHPNG). Прирост производительности может варьироваться от 25% до 70% только за счет изменения версии PHP.

Фреймворки PHP для микросервисов: какие выбрать

Рассмотрим несколько фреймворков, которые могут быть использованы для разработки микросервисов на PHP:

  1. Laravel. Laravel по праву считается одним из самых популярных фреймворков для PHP. Он универсален, надежен и безопасен. Однако это довольно тяжелый фреймворк из-за большого количества функций, которые делают его медленнее по сравнению с альтернативами. Его не советуют применять в небольших проектах, в которых, например, не планируются графические интерфейсы.
  2. Phalcon. Хороший выбор, если для проекта важна производительность. У этого фреймворка высокая скорость работы, так как он поставляется как C-расширение и использует компиляцию кода, а не интерпретацию.
  3. Slim — это микрофреймворк PHP, который помогает быстро писать простые, но мощные веб-приложения и API. В отличие от полнофункциональных платформ, предлагает минимальный набор инструментов, здесь низкий порог входа. По сути, Slim — диспетчер, который получает HTTP-запрос, вызывает соответствующую процедуру обратного вызова и возвращает HTTP-ответ. Подходит для разработки простых приложений, особенно если нет опыта работы с другими фреймворками PHP.
  4. Lumen — микрофреймворк, облегченная версия Laravel, специально предназначенная для разработки микросервисов и API. Его советуют применять, когда есть опыт работы с Laravel, но нужно более быстрое и компактное решение. Если сложность проекта вырастет, его можно легко перенести в Laravel и продолжить работу уже в полнофункциональном фреймворке. Это преимущество часто становится ключевым в выборе между Lumen и Slim.

Идеальный микросервисный язык программирования: какой он?

Микросервисы — это в первую очередь архитектурный подход. Он не ограничивает в выборе инструментов. Практически любой язык можно использовать для разработки как монолитного, так и микросервисного приложения. Конечный выбор языка и фреймворка зависит от требований проекта и квалификации команды.

Однако советуем придерживаться следующих рекомендаций по выбору языка программирования:

  • Не стоит использовать больше 2–3 языков программирования в проекте без видимых причин. Множество языков усложняет взаимодействие между разработчиками.
  • Когда в приоритете высокая скорость, лучше не применять языки на основе виртуальных машин, так как они медленнее запускаются и требуют больше памяти.
  • Предпочтительны языки, позволяющие создавать статические двоичные файлы. Это уменьшает размер образов в контейнерах Docker с микросервисами и значительно ускоряет процессы CI/CD.

При выборе фреймворка важно учесть:

  • Если архитектура будущего проекта известна и в ней множество стандартных компонентов, подходят полнофункциональные платформы, предлагающие нужные функции «из коробки».
  • Если требуется детально контролировать дизайн и разработку приложений, лучше выбрать микрофреймворки. Они хорошо подходят для небольших проектов, требующих простоты, низких накладных расходов и быстрого развертывания, а также для сложных решений, где свобода выбора инструментов приоритетнее, чем скорость разработки.

Микросервисы — это больше, чем язык или платформа. Нет нужды резко переходить на новые языки. Можно смело использовать то, с чем лучше знакома команда проекта, и рассмотреть использование других языков там, где это уместно.