Какой язык выбрать для создания своих микросервисов?!

В мире IT существует бесконечное множество языков программирования. У каждого из них есть свои плюсы. Одни языки программирования накопили огромную кодовую базу, которая позволяет решить абсолютно любую задачу. Другие обладают уникальными характеристиками — быстродействие, нетребовательность к ресурсам, совместимость со множеством операционных систем и аппаратных платформ.

Исторически в нашей компании накоплен большой опыт разработки на Java. И, опираясь на него, для создания экосистемы цифровой трансформации Digital Q мы сделали выбор в пользу Spring Boot. Продукты, создаваемые на этой базе, имеют большое количество преимуществ:

  • легкость разработки
  • гибкость в используемом окружении
  • множество поддерживаемых технологий и т. д.

Но при всех преимуществах, были и недостатки:

  • повышенное потребление памяти контейнером
  • время старта приложения - десятки секунд

При условии, что в решении могут быть тысячи микросервисов, сильно повышаются требования к аппаратной составляющей проекта.

В качестве эксперимента, для снижения этих требований мы сделали альтернативную версию одного из наших сервисов на языке Golang. Мы постарались воспроизвести основной функционал, поддерживаемый в исходном сервисе: rest api, работу с Kafka, логирование в ELK, заложили возможность работы с разными СУБД и т. д.

И сравнили полученный сервис c исходным в одинаковом окружении, при выполнении одинаковых задач:

· время старта Go – менее 1 секунды против 70 для Spring Boot (сервер был слабенький, но на наглядность это не повлияло);

· оперативная память, используемая в работе контейнера, – 15 Мб против 815 Мб;

· быстродействие REST API и время обработки сообщения Kafka оказалось сравнимым: где-то GO чуть быстрее, где-то Java.

Полученный результат нас очень заинтересовал. Было решено двигаться в сторону внедрения Golang в производство, поддерживать его во всех производственных процессах. На текущий момент с его помощью мы реализуем различные вспомогательные сервисы, необходимые для работы продуктов.

Spring Boot – общепризнанный фреймворк на основе Java с открытым исходным кодом.

Go, или Golang, – компилируемый многопоточный язык программирования с открытым исходным кодом.

44
4 комментария

Так тоже пробовали, с GraalVM ситуация немного другая. С точки зрения характеристик - приложение стартует моментально, потребляет памяти на треть меньше от оригинала. Но время сборки проекта растет в 10 раз. Далеко не каждый сервис можно безболезненно перевести - самые проблемы возникают. Ключевое - в момент разработки для отладки удобней использовать обычную jdk, а на стенде же работает graalvm. Что потенциально может привести к неповторимым ошибкам.
Для себя решили - что graalVM можно будет использовать точечно, для конкретных сервисов, которые нужно будет масштабировать в десятки экземпляров.

2
Ответить