Написать пост

Инструменты, которыми пользуются Java-программисты в повседневной работе

Аватарка пользователя Александр Коженков

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

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

IntelliJ IDEA

IntelliJ IDEA — это основная IDE (Integrated Development Environment), которая используется Java-программистами для написания, запуска и отладки кода. В ней реализована отличная поддержка популярных фреймворков (Spring, Micronaut) и есть огромное количество плагинов, облегчающих разработку.

Хранилища данных

Редко какое backend-приложение может обойтись без базы данных. На каждом проекте она может быть своей — SQL (PostgreSQL, Oracle), NoSQL (MongoDB, Apache Cassandra) — или комбинацией из нескольких БД. Сюда же можно отнести очереди сообщений (Apache Kafka, RabbitMQ) и кэш (Redis, Hazelcast, Apache Ignite).

Docker

Docker — программная платформа, используемая backend-разработчиками на всех стадиях (разработка, тестирование, развёртывание), позволяющая быстро запускать любой софт в изолированной среде. Таким образом, при разработке и тестировании с помощью Docker можно запускать требуемое окружение (базы данных, серверы авторизации и т.д.), а при развёртывании с помощью него запускается само приложение.

Kubectl

Docker-контейнеры не поднимаются поодиночке. Для этого есть специальные оркестраторы, следящие за их состоянием, ограничивающие потребляемые ресурсы и перезапускающие контейнеры в случае необходимости. Основным используемым оркестратором сейчас является Kubernetes.

Kubectl — это консольная утилита, позволяющая подключаться к кластеру Kubernetes, в котором развёрнуты Docker-контейнеры со всеми сервисами проекта. Она используется при развёртывании приложений и дебаге в случае возникновения ошибки.

Jenkins / Teamcity

Jenkins и Teamcity — это инструменты создания CI/CD-конвейера для автоматического тестирования и развёртывания новых версий приложений. Как правило, в компании используется один из этих двух инструментов.

С помощью таких конвейеров можно, например, запускать прогоны тестов сразу после коммита, разворачивать новую версию приложения в окружении разработки, если все тесты прошли успешно, или отправить Slack-ботом сообщение в чат, если какие-то тесты упали.

Grafana + Prometheus

Это самые популярные средства мониторинга:

  • Prometheus — это key-value-хранилище, в которое складируют все метрики приложений и баз данных.
  • Grafana — средство визуализации метрик, в котором строят графики загрузки CPU, потребления RAM и многого другого, что помогает разобраться в проблемах приложений при аномальной нагрузке или, например, неожиданных перезапусках.

ELK (Elasticsearch + Logstash + Kibana)

Для хранения и просмотра логов редко в каких компаниях изобретают свои велосипеды. Стандартом де-факто сейчас является ELK-стек:

  • Logstash — средство для парсинга логов приложений и отправки их в Elasticsearch (для Kubernetes вместо Logstash может использоваться Fluentd).
  • Elasticsearch — база данных с богатой функциональностью по построению индексов полнотекстового поиска.
  • Kibana — средство визуализации логов и метрик, использующаяся, как правило, для поиска по логам.

Заключение

Не все из этих инструментов требуется понимать глубоко. Как правило, базы данных, Kubernetes, Jenkins/Teamcity, Grafana + Prometheus и ELK администрируются DevOps-специалистами. Тем не менее, любой Senior Java Engineer должен владеть ими хотя бы на уровне пользователя, чтобы быстро найти проблему, случившуюся в production- или staging-окружении.

Следите за новыми постами
Следите за новыми постами по любимым темам
8К открытий8К показов