Проблема:
Крупная компания-заказчик, которая пользуется нашим коннектором Itgrix, принимает в среднем по 12 000 звонков в день, в пике — до 18 000. Коннектор посылает минимум 2 запроса в Битрикс24: на регистрацию и финиш звонка. Звонки зачастую составные, то есть, с переводами: для каждого сотрудника, на которого перевели звонок, требуется также послать запрос в Битрикс24 по смене ответственного, по показу и скрытию карточки звонка и т.д. Таким образом, количество запросов по одному звонку увеличивается в разы с каждой новой итерацией.
Проблема была в том, что Битрикс медленно обрабатывал отдельные запросы, чем сильно тормозил всю обработку. В итоге при большом количестве одновременных звонков, карточка звонка, например, показывалась только спустя 10 секунд, а в дни аварий время ожидания карточки увеличивалось до 10 минут.
Проблема с технической стороны:
Ранее даже 1000 звонков в час вызывали задержку в обработке событий, т.к. коннектор слал отдельные запросы с той скоростью, с которой может обработать REST Битрикс24. Ранее мы реализовали батчи (“пакеты”) с 50 запросами одновременно, чтобы снизить ожидание и отправляли их не по одному последовательно, а в параллель.
Но возникла другая проблема: следующий батч не отправляется, пока не выполнится предыдущий. Таким образом, в случае проблем на сервере или медленной его работы, они могли накапливаться в очереди.
Это значит, что если накапливалось 5 батчей по 50 запросов, последнему нужно дождаться, пока выполнятся 200 запросов из 4 предыдущих батчей, и только потом дождаться, когда выполнится пятый. Если время выполнения каждого батча будет по 100 секунд, то 5 батч выполнится только через 8 минут.
Результат:
Решение позволило сохранить большую часть пользовательского функционала, несмотря на нагрузку сервера. Теперь у пользователя CRM карточка звонка появляется сразу, что сохранило стабильную работу отдела продаж клиента даже в аварийные моменты.
Длительность выполнения запросов в нормальный день — около 10 секунд.
Длительность выполнения запроса при авариях на сетевом или серверном оборудовании — в пике до 1,5 минут
Дополнительная информация:
Эта доработка появится у всех пользователей в версии коннектора Itgrix для Битрикс24 3.12.
Также стоит отметить, что вскоре после запуска в работу данного решения, компания-заказчик провела работы в Базе данных в Битрикс24, что ухудшило время выполнения. Если бы не параллельные батчи, то таймаут был бы превышен, и запросы бы вовсе не срабатывали. Но фича ускорила процессы, и в итоге проблем у пользователей не возникло.