Параллельные запросы в Битрикс24 для стабильной обработки большого количества звонков

Проблема:

Крупная компания-заказчик, которая пользуется нашим коннектором Itgrix, принимает в среднем по 12 000 звонков в день, в пике — до 18 000. Коннектор посылает минимум 2 запроса в Битрикс24: на регистрацию и финиш звонка. Звонки зачастую составные, то есть, с переводами: для каждого сотрудника, на которого перевели звонок, требуется также послать запрос в Битрикс24 по смене ответственного, по показу и скрытию карточки звонка и т.д. Таким образом, количество запросов по одному звонку увеличивается в разы с каждой новой итерацией.
Проблема была в том, что Битрикс медленно обрабатывал отдельные запросы, чем сильно тормозил всю обработку. В итоге при большом количестве одновременных звонков, карточка звонка, например, показывалась только спустя 10 секунд, а в дни аварий время ожидания карточки увеличивалось до 10 минут.

Проблема с технической стороны:

Ранее даже 1000 звонков в час вызывали задержку в обработке событий, т.к. коннектор слал отдельные запросы с той скоростью, с которой может обработать REST Битрикс24. Ранее мы реализовали батчи (“пакеты”) с 50 запросами одновременно, чтобы снизить ожидание и отправляли их не по одному последовательно, а в параллель.

Но возникла другая проблема: следующий батч не отправляется, пока не выполнится предыдущий. Таким образом, в случае проблем на сервере или медленной его работы, они могли накапливаться в очереди.

Это значит, что если накапливалось 5 батчей по 50 запросов, последнему нужно дождаться, пока выполнятся 200 запросов из 4 предыдущих батчей, и только потом дождаться, когда выполнится пятый. Если время выполнения каждого батча будет по 100 секунд, то 5 батч выполнится только через 8 минут.

Было.png

Результат:

Решение позволило сохранить большую часть пользовательского функционала, несмотря на нагрузку сервера. Теперь у пользователя CRM карточка звонка появляется сразу, что сохранило стабильную работу отдела продаж клиента даже в аварийные моменты.

Длительность выполнения запросов в нормальный день — около 10 секунд.

В обычный день.png

Длительность выполнения запроса при авариях на сетевом или серверном оборудовании — в пике до 1,5 минут


В пиковые ситуации.png

Дополнительная информация:

Эта доработка появится у всех пользователей в версии коннектора Itgrix для Битрикс24 3.12.

Также стоит отметить, что вскоре после запуска в работу данного решения, компания-заказчик провела работы в Базе данных в Битрикс24, что ухудшило время выполнения. Если бы не параллельные батчи, то таймаут был бы превышен, и запросы бы вовсе не срабатывали. Но фича ускорила процессы, и в итоге проблем у пользователей не возникло.

К списку статей