Леонид Терехов - Java-разработчик

  • Middle
  • Москва, Россия
  • 200 000 ₽ (руб/мес)
  • Полная занятость
  • Готов(а) к удаленной работе
  • Готов(а) к релокации
  • Обновлено 17 часов назад
Photo

Навыки

  • Docker
  • GitLab
  • Hibernate
  • Java
  • JOOQ
  • JUnit
  • Kafka
  • Kubernetes
  • Postgres
  • RabbitMQ
  • S3
  • Spring

Опыт работы

Бриз+

Java-разработчик - Ноябрь 2021 — Февраль 2022

РМИС (Региональная Медицинская Информационная система)

Имелось монолитное приложение с 20 модулями, разделенным по функциям медицинских учреждений региона. Нужно было добавить функционал для поддержки родовых сертификатов в разных мед учреждениях региона.
Был написан новый модуль и изменены некоторые апи и функционал существующих модулей. В новом модуле была добавлена интеграция по soap с фсс, написаны api запросы, система валидации, тесты. Модуль был написан и доведен до пользователей за 2 месяца.

Стэк — Spring(mvc, data)/Postgres/Maven/Apache CXF/ Junit4/Gitlab

ООО МКСКОМ

Java-разработчик - Февраль 2022 — Май 2024

Cистема сбора отчетности в Министерство сельского хозяйства для фермеров

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

Для ряда решения проблем, по моей инициативе была собрана команда из 2 человек — junior-разработчик и devOps, где я управлял процессом, занимался распределением задач, а также непосредственным их решением. Я написал несколько сервисов с нуля и внедрил некоторые современные практики разработки.

Некоторые примеры проблем, решенных мной:

1. Для отображения списков отчетов вышестоящей организации необходимы были данные от подведомственных. Для этого нужно было обходить граф организаций на уровне бд.Задача была выполнена в срок без претензий от стейкхолдеров. Для решения задачи мной было проведено исследование и т.к. согласно ценностям компании предпочтение отдавалось “новым” инструментам, были испробованы графовые базы — neo4j и arangodb. В итоге neo4j не подошла из-за недостаточной поддержки acid. А у arangodb не было достаточного количества встроенных констрейнтов. В итоге все было перепиcано на postgres c обходом графа иерархии организаций через рекурсивные cte. В итоге кроме acid и констрейнтов появилась схема на уровне бд.

2. В ходе разработки и увеличения функционала системы увеличивалось количество сбоев, которые происходили в среднем 1-2 раза в неделю. Расследование инцидентов проводилось бессистемно и медленно, анализа ключевых причин проблем не было проведено, разработчики занимались исключительно “тушением пожаров”. Мной было предложено использование практик observability для повышения стабильности работы системы. Была собрана команда и с исследованием альтернативных технологий итеративно добавлен весь функционал за 4 спринта. Время расследований инцидентов не только стало меньше и системнее, но и количество сбоев уменьшилось на 25%.

Нюансы технического решения: логи (Filebeat+Elasticsearch+Kibana), метрики (spring-boot actuator+Prometheus+Grafana), трассировка — в логи были добавлены traceId и userId (Spring Cloud Sleuth+Logback). Изначально логи отправлялись в elk в plain text, и поиск работал нестабильно и медленно. В итоге был написан appender для logback который структурировал лог в формате json, а на уровне filebeat каждый контур начинал записыватся в отдельный индекс эластика.

3. При добавлении нового функционала, затрагивающего несколько микросервисов возникали проблемы с взаимодействием между сервисами — внесение изменений сопровождалось появлением критических ошибок в части из сервисов-клиентов. Также у новых разработчиков, пришедших на проект были проблемы с пониманием функционала сервисов из-за отсутствия необходимой документации. Командой из меня и младшего разработчика была написана и внедрена библиотека документирования связи микросервисов через генерацию схем PlantUml-C4. В итоге, после получения схемы связи микросервисов и обновления их в автоматическом режиме, при интеграции падение сервисов-клиентов примерно на 30%, как и время онбординга новых разработчиков на проект.

Стэк — Java-17/Spring(boot,mvc,security,kafka)/Microservices/Kafka/Postgres/Jooq/Maven/Keycloak/
Minio/ELK/Junit-5/Docker/Gitlab-CI

==============================================================================

Шина-маршрутизатор для интеграции информационных систем Министерства сельского хозяйства со СМЭВ-3

Целью проекта было упростить и ускорить работу с Системой Межведомственного Электронного Взаимодействия(смэв-3) на уровне всего ведомства. До этого команды каждой подсистемы для многих проектов Министерства Сельского Хозяйства отдельно писала свой клиент для интеграции в разнородном виде и отдельно регистрировала их в Минцифры России через долгую административную процедуру.
Для решения проблемы было решено написать единый сервис для интеграции всех подсистем Министерства Сельского Хозяйства с Системой Межведомственного Электронного Взаимодействия на java.

На этом проекте я:

— Занимался, помимо разработки, выявлением, сбором и формулированием требований от стейкхолдеров, а также постановкой и делегированием задач.
— Проектировал архитектуру реализации.
— Распределял задачи между собой и младшим разработчиком
— Ставил задачи devops по поднятию и настройке инфраструктуры
— Писал документацию проекта
— Занимался сбором обратной связи с уточнением требований и доработкой проекта.
— Писал код и ci реализации сервиса.

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

На этапе проектирования расписывал элементы системы(бд, очереди сообщений, обращения во внешние системы и связь их с сервисом) в Miro. Так же была разработана спецификация апи по методологии api-first. Согласовывал со стейкхолдерами(разработчики, руководство, девопс) архитектуру и инфраструктуру для нее. И api c внутренними пользователями. Была написана документация апи и пользовательская документация.

В ходе реализации была написана унифицированная шина-маршрутизатор для интеграции со смэв-3, работающая с внутренними подсистемами через rest/amqp клиент, чтобы они обращались по единой шине с маршрутизацией сообщений по отдельным видам сведений. На этапе маршрутизации сообщения частично парсились из формата xml через xpath для обработки идентификаторов и прочих метаданных.

В итоге каждому сервису минсельхоза не нужно было регистрироваться в Системе Межведомственного Электронного Взаимодействия и были разработаны общие правила на уровне организации по взаимодействию со этой внешней системой.

Стэк — Spring(mvc, security, amqp)/XPath/RabbitMq/Postgres/Jooq/Docker/Maven/Junit-5/Gitlab-Ci/Miro/ClickUp

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

Иннотех, Группа компаний

Java-разработчик - Сентябрь 2024 — Сентябрь 2025

Система кредитования физических лиц

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

Ключевые результаты:

— Создал систему гарантированной доставки данных для регуляторов на основе Kafka, что полностью исключило риск многомиллионных штрафов ЦБ и потерю финансовой информации.

— Сократил время онбординга новых разработчиков с 3 недель до 1 за счет систематизации процессов разработки и деплоя в Kubernetes, одновременно уменьшив количество инцидентов при релизах.

— Снизил количество багов на проде на 25% и сэкономил команде 5-7 часов в неделю, организовав выделенный стенд для автотестов и устранив простои.

Стэк: Spring Boot(boot, mvc, kafka, data), Kafka, Maven, PostgreSQL, Hibernate, Redis, Kubernetes, JUnit, WireMock, Jenkins, Prometheus, ELK

Образование

Финансы и кредит

Тамбовский государственный университет им. Г.Р. Державина, Тамбов
2013

Обо мне

Backend-разработчик с опытом построения высоконагруженных и отказоустойчивых систем и интеграций. Специализируюсь на Java и Spring. Умею решать сложные задачи в условиях частых изменений и взаимодействия с большим количеством смежных команд.

Приложение GeekLink

Установить
×
36 / 0,449 / 46.18mb