Проект предназначен для создания промежуточного решения между несколькими API управления хранилищами и мобильным приложением.
- API имеют разную структуру
- API имеют разное качество документации
- API используют различные платёжные системы
Была настроена структура на основе фабричного паттерна, использующая разнородные реализации API-запросов. Каждая реализация предоставляет единый интерфейс запросов/ответов для мобильного приложения. Для некоторых API пришлось реализовать обходные решения для платёжных шлюзов, включая работу через веб-интерфейсы владельцев API на стороне бэкенда. Большой объём вспомогательных данных хранится локально на стороне бэкенда. На последующих этапах была добавлена административная панель для подключения различных клиентов, что потребовало миграции на микросервисную архитектуру для уменьшения дублирования данных и повышения стабильности кода.
Язык разработки: PHP Бэкенд-фреймворк: Laravel Фронтенд-фреймворк: Vue База данных: Maria DB Архитектура: Микросервисы
Масштабный устаревший проект — система управления продуктами для поставщиков. Система была реализована как монолит с преимущественно кастомным кодом. Фреймворк Yii2 использовался в минимальном объёме. Проект необходимо было адаптировать для работы в нескольких странах с минимальными изменениями.
- сжатые сроки
- ограниченный бюджет
- устаревший код
- нестандартная архитектура существующих решений
Было принято решение разделить архитектуру на 2 части: старый монолит и новое микросервисное решение. Монолит будет работать с несколькими базами данных — по одной на каждую страну. Подключение настраивается динамически, и учётные данные задаются при каждом запросе вместо использования одного окружения. Микросервисы выполняют 2 основные функции: предоставляют учётные данные для подключения к базам данных и позволяют пользователю подключаться к различным странам с одним логином и паролем. В будущем планируется создание распределённой системы с серверами приложений и базами данных в разных регионах, а также переход на чисто микросервисную архитектуру.
Язык разработки: PHP Бэкенд-фреймворк: Yii2 Фронтенд-фреймворк: React JS База данных: Microsoft SQL Server Архитектура: Монолит + Микросервисы
Проект с большим объёмом устаревшего кода требовал ускорения ежедневных процессов. Проект содержит целый прикладной слой в базе данных, который регулярно запускается десктопным приложением. Проблема возникла, когда скрипт слоя базы данных начал обрабатывать более 1000 баз данных подряд, и на каждую уходило около 20 минут.
- устаревший код
- проект находится в продакшне, и масштабные изменения сложно реализовать
В ходе расследования и отладки было обнаружено, что таблицы и запросы базы данных не оптимизированы для работы с большими объёмами данных. Проблема проявлялась при работе с датами и свободном поиске по полю datetime. В конечном счёте была проведена пересоздание структуры таблиц для ускорения запросов SELECT. Итоговая скорость обработки выросла до 16 секунд на одну базу данных.
Язык разработки: SQL, C# Бэкенд-фреймворк: Windows Forms Application База данных: Microsoft SQL Server
Многокомпонентный проект для встречи посетителей, входящих в здание. Изначально предполагалась работа с камерами в холле — для этой цели была разработана соответствующая система. Последующие изменения привели к интеграции системы видеонаблюдения. Главной задачей проекта стала привязка оповещений камер к системе видеозвонков переговорного зала и создание очереди менеджеров, готовых ответить на вызов.
- исходная система не была рассчитана на интеграцию очереди менеджеров и 2 внешних систем
- нестабильность внешних систем
В процессе проектирования было решено создать общую очередь для перехвата оповещений камер при появлении нового посетителя в здании, а также задать таймаут на новые оповещения для предотвращения ложных срабатываний. После этого система назначает наиболее подходящего менеджера для ответа на вызов и создаёт видеозвонок с переговорным залом здания при наличии свободного терминала (или ожидает освобождения терминала). Для лучшего пользовательского опыта и быстрой отладки был настроен доступ к терминалам по протоколу RDP, чтобы нетехнический персонал мог устранять нестабильность, вызванную внешними факторами.
Язык разработки: PHP, JavaScript Бэкенд-фреймворк: Symfony, Node.js База данных: PostgreSQL
Проект создан как промежуточное решение между конечным пользователем и внешним API, использующее сложные алгоритмы для сокращения обращений к API и экономии средств клиента. Нас привлекли для устранения нестабильности системы и недавно возросшего времени отклика.
- низкое качество кода, оставшегося от предыдущей команды
- отсутствие описания системы
Несмотря на то что подобного раньше не случалось, внешний API начал работать медленно. Диагностика ошибок с текущим решением была невозможна. Была реализована масштабная система логирования для перехвата всех входящих и исходящих запросов и составления карты ответов внешнего API. Было доказано, что причиной проблем является внешний API. Мы подготовили запрос со всей задокументированной информацией и помогли команде внешнего API устранить проблему на их стороне.
Язык разработки: JavaScript Бэкенд-фреймворк: Node.js
Сервис, который собирает специфическую статистику по отраслевым продуктам и сериализует её в машиночитаемый и поисковый формат.
- большое количество разнообразных внешних сервисов и платформ (не всегда работающих как сервисы)
- необходимость быстрого поиска с алгоритмами NLP
Часть агрегации данных была наибольшей по объёму, но наиболее прямолинейной. Список внешних источников включал несколько крупных отраслевых провайдеров, каждый из которых имел собственный подход к обмену данными. Для разделения логики разнородных платформ была настроена сеть микросервисов с функциональностью запросов. Промежуточная очередь обеспечивала сохранение полученных данных без конкурентного доступа. В качестве наиболее прямолинейного решения для хранения данных была выбрана база данных Microsoft SQL Server. Для обеспечения быстрого поиска с возможностями NLP был настроен ElasticSearch, который индексирует SQL-данные с заданными интервалами.
Язык разработки: Python Бэкенд-фреймворк: Flask База данных: Microsoft SQL Server Архитектура: Микросервисы
Веб-приложение для розничного магазина со встроенным кастомным аналитическим приложением.
- Интеграция AI API
- Создание веб-системы для более чем 100 000 пользователей в месяц
Основной задачей была интеграция системы искусственного интеллекта в существующий проект для снижения процента возвратов товаров. С помощью нейронной сети пользователи могли задавать вопросы о цветах одежды, трендах и цветовых сочетаниях, что позволяло им выбирать более подходящие цвета. В результате интеграции внешнего AI API нам удалось снизить количество возвратов на 15%. Кроме того, потребовалась миграция с громоздкого CMS-решения, использовавшегося на 20%, на быстрое кастомное микросервисное решение на основе фреймворка.
Язык разработки: PHP, JS Бэкенд-фреймворк: Laravel База данных: Microsoft SQL Server Архитектура: Микросервисы