Endless letter
Сайт социального проекта к 75-летию Победы, погружающий в архивы военных лет
Как backend, frontend-разработчики, DevOps-инженеры и QA-инженеры внутри нашей команды создавали высоконагруженный сервис для таможенного оформления
Разработать систему сервисов для автоматизации внешнеэкономической деятельности, открытую для масштабирования. Обеспечить высокое качество и безопасность, надежность и отказоустойчивость.
«Таможенная карта»
Логистика
2021
Аналитика и прототипирование
Дорожная карта продукта
Микросервисная архитектура
Дизайн интерфейса
Frontend-разработка
Backend-разработка
QA
Поддержка и развитие проекта
Для технической реализации нами был выбран микросервисный подход к построению архитектуры. Это отличный вариант для разработки сложных систем — он обладает неоспоримыми преимуществами в сравнении с монолитными архитектурами.
Вся система состоит из независимых компонентов, каждый из которых выполняет свою функцию и связан легковесными механизмами. Это позволяет обновлять части системы и добиваться большей отказоустойчивости: каждый микросервис имеет несколько реплик. В случае проблем с одним из них, нагрузка динамически перераспределяется между остальными компонентами.
Кроме того, такой подход динамичен: мы можем регулировать элементы системы по мере роста нагрузки на отдельные ее части. Микросервисы завязаны на ключевые бизнес-процессы и позволяют масштабировать систему поэтапно.
Технологический стек
Система сервисов построена в соответствии с мировыми стандартами в разработке и микросервисах. Backend-часть реализована на стеке Java и Spring Boot. Для нас было особенно важно то, что Java имеет множество библиотек для криптографии — наше решение подразумевало создание и проверку цифровых подписей документов электронного обмена. Frontend-часть написана на React, что дает доступ ко множеству готовых библиотек и компонентный подход к построению интерфейсов.
В системе мы применили распространенные микросервисные паттерны — готовые решения для оптимального решения задач. Сейчас расскажем, какие.
Единая точка входа
Паттерн API Gateway предоставляет единую точку входа для внешних клиентов (SPA-приложений). Сервис производит предварительную проверку аутентификации, маршрутизирует трафик на микросервисы и осуществляет балансировку нагрузки между элементами системы.
Исключение ошибок
Паттерн Circuit Breaker не позволяет перегружать отдельные компоненты системы в случае возникновения ошибок, обеспечивая временную управляемую деградацию функционала.
Еще немного паттернов
В качестве Service Discovery — протоколов для обнаружения сервисов — и централизованного управления конфигурациями мы используем решение на базе Consul, которое обеспечивает удобную конфигурацию всех настроек в одном месте.
Инфраструктура включает сервер SSO для аутентификации и авторизации, который используется всеми модулями системы. Нами было выбрано решение на основе сервера Keycloak, который гарантирует нам широкие возможности по настройке и кастомизации сервиса.
Сокращение Time-to-market
Для управления репозиториями и обеспечения быстрого релизного цикла мы применили методологию Trunk Based Development, адаптированную под требования безопасности и инфраструктурные ограничения.
Trunk Based Development — модель управления ветками кода, при которой существует только одна долгоживущая ветвь. Для разработки это значит выигрыш по времени для внесения изменений без проигрыша в качестве.
С помощью A/B тестов нам удалось оперативно проверять гипотезы, а решение Feature Toggles позволило нам реализовать динамическое управление новыми функциями на сервисах.
Оптимизация процессов тестирования
Мы использовали комбинацию из двух, на первый взгляд, взаимоисключающих подходов к тестированию.
Shift Left Testing — подход к тестированию на более раннем этапе жизненного цикла продукта — еще на уровне аналитики и написания документации. С таким подходом выявляем возможные ошибки до их реализации.
Shift Right Testing — подход к тестированию на более позднем этапе жизненного цикла продукта после деплоя. Подход дает нам уверенность в том, что новые изменения обратно совместимы с различным программным обеспечением.
Такая комбинация подходов позволяет добиться высокого качества сложного продукта и сократить усилия на ручное тестирование.
Масштабирование команды и процессов
В процессе разработки наш клиент решил выходить на рынок со значительно большим объемом функционала, чем планировалось изначально — пора наращивать команду. Нам удалось не только значительно вырасти, но и оперативно адаптировать процессы для более эффективного управления.
Мы разбили команду на несколько более мелких команд и построили иерархичную структуру управления, применив подходы Agile at Scale и Scrum of Scrums. Это позволило распараллелить разработку и сохранить преимущества гибких методологий.
В процессе нам удалось не только вырасти в масштабах, но и в качестве — повысили стабильность и уровень работы команд. А что теперь? Продолжаем работать над тамо • ОС.
Мы используем куки и с помощью анонимной статистики делаем сайт ещё лучше