Не все люди, выбирая язык программирования, понимают, с чем им придётся столкнуться и к чему готовиться, — пишет Алекс Коженков в своей статье на tproger.ru. — В этой статье я хочу описать инструменты, которые использую в повседневной работе. В каждой компании может быть своя специфика. Тем не менее, перечисленные здесь инструменты являются общими для львиной доли 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-окружении.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]