Металлургическая отрасль Украины сильно пострадала из-за войны, закрытия производств в районах боевых действий и блокирования привычных транспортных путей. Соотвественно, логистика, до сих пор, остается проблемным вопросом для большинства украинских экспортеров. Несвоевременная поставка продукции может привести к значительным убыткам как производителя, так и клиента.
Чтобы облегчить ситуацию и настроить устойчивую систему логистики, необходимо действительно надежное и эффективное технологическое решение.
Именно такие технологии мы стремились предоставить нашему клиенту - группе компаний ИНТЕРПАЙП, которая является глобальным игроком на рынке стальных труб и железнодорожных колес. Расскажем о кастомной разработке тендерной площадки для перевозок ИНТЕРПАЙП, которая решила ряд проблем в технических процессах компании.
Наш клиент
ИНТЕРПАЙП - украинская промышленная компания, мировой производитель стальных труб и железнодорожной продукции. Клиенты ИНТЕРПАЙП - ведущие мировые компании нефтегазовой отрасли, строительства, транспорта. Даже сегодня, несмотря на войну в Украине, продукция холдинга поставляется в 70 стран мира через сеть торговых офисов, размещенных на ключевых рынках Ближнего Востока, Северной Америки и Европы.
С какой проблемой столкнулся клиент
Чтобы определить проблему, надо немного рассказать о специфике бизнес-процессов клиента.
В организации своей логистики ИНТЕРПАЙП полагается на внутреннюю электронную тендерную площадку, где можно закупать услуги автоперевозок. Тендеры на этой платформе проводятся практически в непрерывном режиме, обновляясь по три-четыре раза в день. Перевозчик, который выигрывает в тендере, должен быть готовым отправиться в рейс без промедлений. Часто на подготовку к перевозке - не более суток.
В тендерах участвуют экспедиторы, которые стремятся получить контракт на перевозку продукции по Европе или Украине. Для этого им надо предложить лучшую цену и условия на тендерном конкурсе, который проводится в формате торгов. В каждых таких торгах могут участвовать десятки перевозчиков, которые жестко конкурируют по ценовым ставкам и условиям сервиса.
Задача электронной тендерной площадки заключается в том, чтобы автоматизировать эти торги и обеспечить равные условия для всех участников. Но с ростом нагрузки на нее – старая система потеряла эффективность. Платформа начала терять быстродействие и обрабатывала запросы с ошибками, или же отклоняла их. Наиболее критическими были последние 5-10 секунд до конца торгов. В этот момент десятки экспедиторов начинали интенсивно обновлять свои ценовые ставки, поэтому система теряла стабильность.
С точки зрения пользователя ставки выводились некорректно, или обновлялись не вовремя. Интерфейсы клиентской части приложения отображали информацию со значительным опозданием, или обратная связь с действиями экспедитора терялась полностью. Как результат, система не позволяла корректно определить на тендере единственного победителя. То есть, не могла выполнить свою основную функцию. Такой сценарий был недопустимым, ведь любые проблемы с тендером могут привести к простою, а затем и к потере времени и денег для бизнеса.
За решением этой проблемы команда ИНТЕРПАЙП обратилась в нашу компанию. Клиенту было необходимо новое решение - эффективное и надежное.
Решение проблемы
Клиент обратился к нам с существующей системой и старым техзаданием, которое использовалось для ее создания. Идея заключалась в том, чтобы повторить текущий функционал, но таким образом, чтобы соответствовать требованиям к быстродействию и отказоустойчивости.
Внесение изменений необходимо было провести на фундаментальном уровне, поэтому старая система клиента не подлежала обновлению или частичной доработке. Чтобы гарантировать платформе быстродействие и абсолютную точность, ее нужно было индивидуально разработать с нуля. Кроме того, ее дизайн и функционал надо было обновить до современных стандартов.
Поэтому цель проекта заключалась в разработке новой версии платформы тендерной площадки для проведения торгов на закупку автоперевозок. В системе необходимо было учесть все недостатки старого решения - обеспечить быстродействие, точное обновление данных и реакцию на действия пользователей в реальном времени.
Достижение этой цели требовало решения ряда задач:
-
реализовать функционал для проведения тендеров в формате веб-приложения (SPA);
-
обеспечить обновление тендерных данных на платформе в реальном времени. Чтобы все пользователи в рамках тендера могли видеть абсолютно идентичные данные с минимальной задержкой;
-
обеспечить платформе возможности точной обработки большого количества запросов в течение короткого промежутка времени, во время пиковых нагрузок;
-
реализовать современный UI/UX, который будет удобным и понятным для экспедиторов.
Какие технологии мы выбрали
Ключевыми характеристиками продукта должны были стать: скорость обновления, устойчивость к нагрузкам и возможность мгновенно обрабатывать множество запросов. Поэтому команда выбрала для проекта технологии, которыми владеет в совершенстве.
Для реализации клиентской части был использован фреймворк Next.js. В качестве СУБД была применена реляционная база данных PostgresSQL, а в качестве In-memory хранилища - Redis. Backend-часть разработана с применением языка PHP, а именно фреймворка Laravel. Взаимодействие между компонентами посредством API реализовано с использованием GraphQL.
Полный стек разработки выглядит так:
-
PHP 8;
-
Laravel 8 with octane (Swoole);
-
WS Server (Swoole engine);
-
PostgresSQL 14;
-
Redis (cache/queue);
-
GraphQL;
-
TypeScript;
-
React.js;
-
Next.js;
-
Apollo Client;
-
Ant Design.
Как мы построили работу
В целом проект состоял из двух этапов. Первый этап предусматривал разработку Proof-of-Concept. В рамках этой стадии команда изучила запрос клиента и подготовила ядро продукта под его технические требования, с учетом всей специфики будущего решения. Работу этого ядра мы продемонстрировали клиенту в тестовой симуляции на демо-серверах, проведя процедуру нагрузочного тестирования.
Так клиент имел возможность убедиться в том, что будущий продукт будет соответствовать требованиям быстродействия и отказоустойчивости. Только после этого мы согласовали скоуп работ.
Второй этап касался непосредственно разработки продукта: проработка и согласование UI/UX, программирование бэкэнда и фронтенда, реализация всех функциональных требований.
Сроки выполнения проекта были ограничены, поэтому команда тщательно детализировала и спланировала все задачи разработки. Важно было четко придерживаться плана и продвигаться к релизу максимально быстро.
К работе над проектом присоединилась опытная команда:
-
UX Designer
-
Business Analyst
-
Backend Developer
-
Frontend Developer
-
Project Manager
-
QA Engineer
-
DevOps Engineer
Отчетность и коммуникация
Клиент закрепил за проектом собственного менеджера, который мониторил ход разработки и предоставлял разработчикам всю необходимую обратную связь. Мы вели отчет для клиента о соблюдении тайминга проекта и прогрессе выполнения road-map.
Раз в две недели команда разработчиков проводила demo day для бизнес-заказчика и технического департамента ИНТЕРПАЙП, которые были лично заинтересованы в проекте. Мы подробно обсуждали наш прогресс и демонстрировали результаты работ. В целом разработка продвигалась без неожиданностей, поэтому команда вышла к релизу в запланированные сроки.
Что мы разработали
Результатом проекта стала надежная цифровая тендерная площадка для закупки транспортных услуг, реализованная в формате Single Page Application. Теперь клиент может быть уверен в том, что его ежедневные онлайн-тендеры на автомобильные перевозки проводятся без проблем, задержек и ошибок.
Рассмотрим, как работает новое решение.
1. Экспедитор авторизуется на корпоративном портале ИНТЕРПАЙП. Там он может перейти в раздел "Торги на перевозки" и попасть на платформу, разработанную нашей командой.
2. Здесь пользователь видит карточки доступных тендеров со всей необходимой информацией. Он может выбрать один или несколько из них для участия в торгах. Платформа предоставляет систему фильтров для отбора необходимых предложений. Их можно фильтровать по типам груза, транспорта, по направлению (экспорт, импорт), по специфическим разновидностям тендеров клиента (разовые, кольцевые, сгруппированные) и т.д.
3. Ключевой функцией платформы являются торги. Выбрав необходимые тендеры, экспедитор нажимает на кнопку "Торговать по выбранным" и попадает в новый экран. Здесь в карточках выбранных тендеров появляется таймер и поле для торговой ставки.
4. Цель экспедитора - выиграть тендер, предлагая самую выгодную цену. Он выставляет в карточке свою стартовую цену и шаг автоматического снижения ставки. Важным здесь является то, что таймер торгов и актуальные ставки обновляются через протокол WebSocket в реальном времени.
5. Когда таймер торгов истекает, тендер автоматически поступает на обработку. Логика определения победителя лежит за пределами платформы, на стороне ERP клиента. Но именно наша платформа гарантирует точность и сохранение правильной очередности подачи ставок от всех участников.
6. Результаты своих торгов экспедитор может увидеть во вкладке "неактивные тендеры". Там он может узнать, в каких тендерах он выиграл, а в каких - проиграл.
Важной частью проекта стал новый дизайн. Мы проработали UI/UX площадки таким образом, чтобы сделать ее максимально удобной и информативной для конечных пользователей. Команда также уделила особое внимание адаптивной верстке страниц, чтобы сделать их удобными на планшетах и смартфонах.
Какие вызовы мы преодолели
Один из главных вызовов, с которым столкнулась команда - обеспечение интерактивного взаимодействия с приложением в режиме реального времени. Важно было обеспечить синхронизацию отображаемой информации для значительного количества одновременных пользователей. Эту проблему необходимо было решить как в разрезе бэкэнд-разработки - обеспечив достаточный уровень быстродействия системы и поддержку значительного числа одновременных сессий, так и на стороне фронтенд-части приложения.
Команда столкнулась с особенностью работы современных фреймворков при рендеринге контента, особенностями работы браузеров на клиентских устройствах, и более специфическими проблемами - такими как дрифт системных таймеров времени, неравномерностью сетевых задержек и т.д. Дополнительную сложность в решение этой проблемы вносил значительный объем данных комплексной структуры, который необходимо было обрабатывать на стороне клиентов.
Поэтому наши специалисты разработали и применили ряд решений, которые позволили достичь результата и обеспечили соответствие приложения требованиям клиента.
Дополнительным вызовом было формирование архитектурной составляющей проекта, которая бы отвечала всем указанным выше требованиям. Основное из таких требований заключалось в обеспечении отказоустойчивости и масштабируемости системы путем автоматического горизонтального скейлинга.
Учитывая stateful-природу приложений с использованием веб-сокетов, необходимо было предложить решение, которое позволило бы сохранить stateless-подход в проектировании компонентов системы, и при этом организовать шеринг сессионных данных между репликами сервисов, и при этом не создать единую точку отказа.
Результаты проекта
Сейчас новая тендерная площадка стала частью повседневных операций ИНТЕРПАЙП. Ее функционал, быстродействие, стабильность и безопасность закрывает все потребности клиента. Сегодня команда разработки сосредоточилась на мелких улучшениях и апдейтах сервиса. Клиент уже собрал первый фидбек от конечных пользователей платформы и планирует изменения в дизайне для улучшения пользовательского опыта.
Следующим шагом в развитии площадки должна стать разработка полноценной работы через интерфейс ERP. Она упростит для компании загрузку тендеров и управление процессами торгов.
Переход к современному веб-приложению позволил команде ИНТЕРПАЙП оставить в прошлом жалобы и недоразумения, связанные с ошибками системы проведения тендеров. Новая платформа не допускает ситуаций, в которой победитель тендера определяется некорректно, либо не определяется вовсе. Это прямо влияет на непрерывность операций, минимизирует риски простоя и убытков из-за срыва торгов. Поэтому этот опыт можно считать полезным для любого производителя, любого перевозчика, любого логистического оператора.