ДжазТим — надежный технологический партнер

Agile разработка ПО на Java

Разработка сервиса по взаимодействию с платформами учёта энергоресурсов

Краткое описание проекта

Проект представляет собой разработку сервиса по взаимодействию с платформами учёта энергоресурсов, который обрабатывает показания с приборов учёта энергоресурсов (далее — ПУ) и предоставляет удалённый доступ к ним. С помощью разработанного сервиса пользователь платформы (например, оператор службы энергосбыта) может получать данные с ПУ, узнавать количество потреблённых энергоресурсов, отслеживать динамику расходов, производить удалённое управление оборудованием и изменять настройки ПУ.

Техническое описание проекта

Сервис представляет собой RESTful-систему, состоящую из набора микросервисов. Микросервисы представляют собой прослойку между конечными пользователями и ПУ. И таким образом позволяют получать данные, а также управлять ПУ по протоколам HTTPS, DLMS и IEC-104.

Все полученные данные от ПУ хранятся в базах данных PostgreSQL и TimescaleDB. Также для временного хранения некоторых типов данных используется Redis.

Параллельно с RESTful-системой был разработан UI компонент, позволяющий пользователям взаимодействовать с ПУ. Стоит отметить, что не все пользователи работают с UI компонентом. Часть из них используют собственное ПО, которое взаимодействуют с REST API напрямую.

Также для удобства разработки, в моменты, когда функциональность ещё недоступна в UI компоненте, на проекте применяется фреймворк Swagger, который позволяет использовать функциональность сервиса без привязки к UI и помогает ускорить разработку клиентского приложения. Благодаря Swagger разработчики, тестировщики и техподдержка могут видеть все API сервисов, доступные методы, а также дополнительные полезные данные (например: статус ответа, тип содержимого, список параметров).

Приборы учёта энергоресурсов могут использоваться в различных локациях и условиях. Случается, что по каким-либо причинам ПУ может быть недоступен (например: отсутствие у ПУ соединения с сервером сети в момент запроса) и данные от такого ПУ не передаются в систему. Для таких случаев был разработан компонент, который обеспечивает дополнительный сбор данных. Система фиксирует случаи отсутствия данных и периодически опрашивает ПУ. В момент, когда связь восстанавливается, ПУ получает запрос от системы и отдаёт ей данные.

Обязанности команды ДжазТим

  • Реализация микросервисной архитектуры в соответствии с техническими требованиями заказчика.
  • Разработка UI подсистемы и модуля по дополнительному сбору данных.
  • Реализация сервисов, которые взаимодействуют с ПУ по протоколам DLMS и IEC-104.
  • Подготовка и выпуск релизов (релиз менеджмент).
  • Проведение ручного регрессионного, интеграционного и смоук-тестирования системы.

Используемые технологии

Programming languages: Java 11, JS, Kaitai, Kotlin.

Infrastructure: Maven, Docker, Fabric8, TeamCity, Git, IntelliJ IDEA, Jira, Swagger, Grafana.

Test libraries: Junit 4, Mockito.

Other libraries: Spring, Hibernate, Kafka, Akka, Lombok.

DB: PostgreSQL, TimescaleDB, Redis.

Protocols: HTTPS, DLMS, IEC-104.

Особенности проекта

  • Активное участие команды в технической поддержке опытной инфраструктуры в любое время суток.
  • Активное вовлечение владельцев продукта в работу команды, что значительно увеличило скорость разработки.
  • Обработка данных и контроль разных типов ПУ с различными версиями ПО, что отразилось на архитектуре и сложности кода.
  • Разработка велась в географически распределённой команде.

Результат проекта

  • MVP (Minimum Viable Product, продукт с базовой функциональностью) выпустили в опытно-промышленную эксплуатацию в сжатые сроки. Это удалось благодаря тесной координации с представителями заказчика и фокусу на приоритетных задачах.
  • Параллельно с опытной эксплуатацией команда ДжазТим существенно расширила функциональные возможности продукта в соответствии с требованиями заказчика, а также потребностями конечных пользователей.
  • Реализовали мониторинг состояния сервисов за счёт внедрения Health Checks, что существенно снизило время простоя.
  • Настроена автоматическая сборка проекта после каждого коммита с прогоном всех Unit-тестов, что позволяет поддерживать стабильное качество кода на высоком уровне.
  • Покрытие разработанной кодовой базы Unit-тестами на уровне более 90%.

Достижения компании на проекте

  • В процессе реализации проекта команда ДжазТим предложила заказчику и применила значительные улучшения.
    Например, мы обеспечили стабильность работы системы при высоких нагрузках. В частности, оптимизировали процесс сохранения данных под условия с большим потоком входящей информации.
    Также применили подходы с кэшированием данных, тем самым уменьшив нагрузку на сервисы.
  • Команда совместно с менеджером со стороны ДжазТим предложила и организовала использование Jira на проекте. Причём всеми участниками проекта, включая владельцев продукта.
    Также внедрили полноценный Scrum со всеми присущими ему атрибутами: оценка задач, планирование спринта, ежедневный scrum, регулярная демонстрация реализованной функциональности, ретроспективы.
  • Внедрили процесс ручного регрессионного, интеграционного и смоук-тестирования системы.
  • Специалисты ДжазТим освоили новые узконаправленные технологии.

Скриншоты

Свяжитесь с нами, чтобы обсудить Ваш IT-проект

    Имя *

    Название компании

    Email *

    Телефон

    Чем мы можем Вам помочь? *

    * – Обязательные поля для заполнения