Как мы вернули в работу два веб-сервиса после переезда кода, переписали тяжёлый импорт данных участников из AmoCRM и сделали массовую рассылку в Telegram
Заказчик это закрытый клуб предпринимателей. Главный рабочий инструмент участников это мобильное приложение на Flutter. В нём они записываются на онлайн- и офлайн-мероприятия, обмениваются опытом и ищут деловые знакомства.
У платформы несколько сценариев. В разделе «Запросы» участник описывает задачу, а другие участники клуба отвечают своей экспертизой. Random Coffee случайно составляет пары для деловых встреч. Есть поиск наставника. Права в системе зависят от того, на каком этапе участник: например, «гостевой месяц» открывает одно, а полноценное членство другое.
Внутри это несколько сервисов. Основной бэкенд написан на PHP (Laravel и Symfony), часть сервисов и чат-бот на .NET 8 с фреймворком ABP, данные в PostgreSQL и Redis. Всё работает в Kubernetes в Yandex Cloud, сборка в GitLab. Разработчик Фортех подключился к проекту в декабре 2024 года и работал в бэкенд-команде заказчика.
Данные участников идут по длинной цепочке: AmoCRM, хранилище данных, сервис на ASP.NET и только потом основной бэкенд на PHP. Ошибка на любом шаге превращается в жалобу пользователя, поэтому импорт нельзя было просто выключить и переписать заново.
Код импорта разросся и был написан неаккуратно. Перед правками нужно было понять, что он делает на самом деле.
Команде не хватало людей: DevOps-инженер работал сразу на несколько проектов, CI/CD был настроен не для всех сервисов.
Сервисы после переезда. Приложение запросов это небольшое SPA, которое не перенесли вместе с остальным кодом, и оно перестало работать. Разработчик Фортех развернул его в Kubernetes, в тестовом и рабочем кластерах. С приложением авторизации было похоже: на проде стояла старая версия. Её исправили и написали конфигурации, чтобы одну и ту же сборку можно было разворачивать и на тестовом стенде, и на проде.
План рефакторинга импорта. Импорт разобрали целиком, составили план работ и разбили его на этапы. План согласовали с заказчиком. Первый этап касался самого проблемного участка, передачи данных из сервиса на ASP.NET в основной бэкенд на PHP.
Тяжёлые запросы. Основная работа была в оптимизации SQL. Запросы UPDATE и DELETE вынесли из циклов, а множественные UPDATE заменили одной операцией MERGE. Все SELECT вынесли из транзакций, а несколько транзакций объединили в одну. Код импорта разнесли по отдельным методам, чтобы его можно было читать и тестировать по частям.
Рассылка в Telegram. Старый механизм уведомлений убрали. Вместо него разработчик написал алгоритм массовой рассылки сообщений пользователям в Telegram.
После этого по плану идут сценарии тестирования и само тестирование нового импорта.
Приложение запросов и приложение авторизации снова работают и разворачиваются в Kubernetes одинаково на тестовом стенде и на проде.
У импорта из AmoCRM есть согласованный с заказчиком план по этапам. Первый, самый проблемный участок переписан: запросы больше не крутятся в циклах, транзакций стало меньше, код разделён на понятные методы.
Уведомления участникам клуба уходят через новый механизм массовой рассылки в Telegram.
Почему при импорте из CRM у пользователей сбиваются данные?
Чаще всего из-за того, что импорт обновляет записи по одной в цикле и в нескольких разных транзакциях. Если что-то падает посередине, часть данных уже записана, а часть нет. Помогают массовые операции вроде MERGE и одна транзакция на весь пакет.
Можно ли переписать импорт, не останавливая его?
Да, если идти по этапам. Здесь сначала составили и согласовали план, а потом взялись за самый проблемный участок цепочки, не трогая остальные.
Что делать, если после смены подрядчика перестали работать сервисы?
Проверить, всё ли перенесли, и какие версии развёрнуты на каждом стенде. В этом проекте одно приложение просто забыли перенести, а у другого на проде осталась старая версия.
Работает ли Фортех с проектами на нескольких языках сразу?
Да. Здесь бэкенд состоит из сервисов на PHP и .NET, и разработчик Фортех работал как раз на стыке между ними.

Как мы с нуля сделали микросервисы, которые принимают документы из внутренних систем, отправляют их на подпись в Диадок, следят за статусами и хранят архив

Как бэкенд-разработчик Фортех 1 год и 3 месяца работал в одной из двадцати команд автодилера: интеграции, общий NPM-пакет, новая авторизация и наблюдаемость

Доработали бэкенд системы колл-центра: статистика по операторам, темам и времени ожидания, отчёты по COVID-19 для госорганов в Excel и PDF

Как мы перевели авторизацию на Keycloak, подготовили продукт к поставке без внешних интеграций и добавили новые виды ремонтов и отчётов