Эффективная разработка серверных приложений на Kotlin: истории разработчиков

Oksana Mandryka

Kotlin создавался как альтернатива Java, а значит, и область его применения в экосистеме JVM должна быть такой же, как у Java. Разработка серверных приложений не исключение.


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

Поделитесь своей историей!


В последние годы популярность Kotlin среди Android-разработчиков значительно выросла. В то же время язык все чаще используют и для серверной разработки. Компании, рассматривающие возможность перехода на Kotlin, часто спрашивают нас: «Кто еще использует Kotlin для серверной разработки?».

Выбирая технологию, разработчики хотят быть уверены в своем решении. Они ищут подтверждения тому, что другие компании успешно используют эту технологию для решения аналогичных задач.

В этом посте мы рассказываем о нескольких компаниях, которые выбрали Kotlin для серверной разработки. Надеемся, это поможет вам принять решение, если вы планируете использовать Kotlin для тех же целей.

Эта статья основана на материалах с онлайн-конференции Kotlin 1.4. Видео можно посмотреть на нашем YouTube-канале.

Почему Kotlin?

Мы регулярно общаемся с Kotlin-разработчиками и знаем довольно много компаний, больших и маленьких, в которых Kotlin используется для разработки на стороне сервера. Нам интересно узнавать, почему компании выбирают Kotlin и какие преимущества им это дает.

Пользователи, с которыми мы пообщались, больше всего оценили следующие особенности Kotlin:

  • Компактный синтаксис. Благодаря выразительности языка, Kotlin-код максимально лаконичен. Чем меньше кода вы пишете, тем меньше ошибок закрадывается в приложение и тем проще поддерживать окончательный код.
  • Null-безопасность. Это свойство особенно нравится разработчикам. Система типов в Kotlin нацелена на то, чтобы устранить опасность обращения к null-значениям, более известную как «ошибка на миллиард». Эта функция безопасности встроена в компилятор Kotlin, что уменьшает количество проблем с разыменованием нулевых значений.
  • Совместимость с Java позволяет работать значительно продуктивнее. Программируя на Kotlin, можно пользоваться всеми фреймворками и библиотеками экосистемы Java. Вы также можете постепенно внедрять Kotlin в существующий Java-проект без необходимости переписывать весь Java-код на Kotlin.
  • Корутины. Это простой способ писать асинхронный код в рамках модели императивного программирования. Корутины особенно полезны при разработкие высоконагруженных серверных приложений с большим количеством операций ввода-вывода, поскольку экономят много системных ресурсов. С появлением поддержки корутин в Spring Framework пользоваться ими в серверной разработке стало еще проще.
  • Kotlin Multiplatform. На Kotlin можно разрабатывать приложения под разные платформы: JVM, JavaScript, Android, iOS, а также нативные приложения. Возможность использовать общий код в приложениях, работающих на разных платформах, по мнению разработчиков, оказалась очень полезной.

Давайте посмотрим на примеры эффективного программирования на Kotlin.

JetBrains Space: масштабное переиспользование кода

Разумеется, в JetBrains мы много пишем на Kotlin, разрабатывая с его помощью не только инструменты, но и сервисы. JetBrains Space, платформа для командной работы, которую мы представили на KotlinConf 2019, построена на Kotlin и фреймворке Ktor. В Space все написано на Kotlin: серверные сервисы на JVM, Android и iOS-приложения, веб-приложение и плагин для IDE.

Благодаря Kotlin Multiplatform все эти приложения используют большой объем общего кода. Помимо общей модели данных в интерфейсе и на стороне сервера, в Space также используется общая модель представления, логика валидации и общие библиотеки. Однако UI-компоненты для каждой платформы свои, поэтому совместимость играет важную роль.

Kotlin Multiplatform

Чтобы у вас было представление о кросс-платформенной разработке на Kotlin, рассмотрим такой пример. Допустим, есть класс данных, который мы хотим использовать для нескольких платформ (JVM, JavaScript, iOS):

Класс String принадлежит стандартной библиотеке Kotlin, а LocalDate — нет. Мы можем указать, какой класс следует использовать в качестве LocalDate для каждой платформы. Для этого в общем модуле, который используется на разных платформах, мы объявляем класс LocalDate с помощью ключевого слова expect, предполагая, что разные модули обеспечат реальную реализацию. Ключевое слово actual указывает, какой тип следует использовать в платформенном коде:

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

Кросс-платформенные возможности Kotlin особенно популярны среди мобильных разработчиков, которые используют общий код в Android и iOS-приложениях. На сайте Kotlin Multiplatform Mobile можно подробнее узнать о технологии и о том, как ею пользуются в разных компаниях.

Jira Software: микросервисы с Kotlin и Spring Boot

Еще один интересный пример — Jira. Atlassian использует Kotlin для разработки облачных продуктов Jira Software.

Раньше Jira была автономным монолитным Java-приложением, которое пользователи устанавливали на свои серверы. Однако с появлением облачной версии возникла необходимость разделить приложение на несколько сервисов для лучшего масшибирования.

Переезд в облако был поводом обновить стек технологий, и тут не обошлось без Kotlin. Разработчики с удовольствием перешли на новый язык и оценили повышение производительности. Теперь они используют Kotlin и Spring Boot для реализации микросервисов, которые улучшают работу важных UX-аспектов. Kotlin и Spring используются во всем семействе облачных продуктов Jira — в Jira Software, Jira Service Desk и Jira Core.

Adobe: неблокирующее программирование с корутинами Kotlin для высоконагруженных сервисов

Команда Adobe Experience Platform рассказала, почему они предпочитают Kotlin для серверной разработки.

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

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

«На Kotlin мы можем писать код в „прямом стиле“, который выглядит почти как блокирующий императивный код».

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

Другие важные особенности Kotlin: классы данных, крепкая система типов, null-безопасность и поддержка функционального программирования. Гибкий синтаксис Kotlin позволяет с легкостью создавать собственные предметно-ориентированные языки. Этот аспект тоже оказался довольно полезен для инженеров Adobe. Почитайте, что они рассказывают о своем опыте.

Expedia Group: построение API GraphQL с помощью Kotlin

Expedia начала использовать Kotlin из-за гарантий null-безопасности, лаконичности языка и его полной совместимости с Java. Эта совместимость позволила постепенно интегрировать Kotlin в проекты без необходимости полностью переписывать приложения. Кроме того, Expedia удалось легко интегрировать Kotlin-приложения с Java-библиотеками и пользоваться существующей экосистемой JVM.

Корутины стали одной из главных причин популярности Kotlin. Они позволяют разработчикам писать полностью асинхронный код императивным способом — такой код легче читать и поддерживать. Разработчики Expedia активно пользуются Spring Framework, и, начиная с версии 5.2, в нем поддерживается совместимость между WebFlux и корутинами. Для инженеров Expedia это стало важным изменением, позволившим более эффективно использовать стек Spring и Reactive.

Недавно Expedia решила перейти на GraphQL и создать единый API-шлюз для работы всех клиентских приложений. Для этого они использовали библиотеку Kotlin для работы с рефлексией, чтобы создавать схемы GraphQL прямо из исходного кода. Полученный набор библиотек graphql-kotlin с открытым исходным кодом оказался весьма полезным. Теперь он размещен на GitHub.

На KotlinConf 2019 Дариуш Кук и Гийом Шайбель рассказали, как использовать возможности Spring Boot вместе с graphql-kotlin. Вот видео этого доклада:

Мы поделились примерами использования Kotlin для серверной разработки. В JetBrains, Adobe, Expedia и Atlassian на Kotlin написаны важные приложения, которые очень чувствительны к показателям производительности. Это говорит о том, что Kotlin — зрелый язык программирования, подходящий для разработки веб-приложений и сервисов.

Ваша команда Kotlin
The Drive to Develop