Я расскажу вам о проблеме, которую я пытался решить разными способами, но ни одно из реализованных мной решений не является оптимальным с точки зрения скорости ответа .
Проблема является следующим:
- Выполнение Асинхронно более 100 запросов к различным API (с разными структурами, но с одинаковым типом информации) .
- Загрузка каждого ответа в общую структуру данных.
- Консолидация всех структур по собственным критериям.
- Показать результат для пользователя.
В данный момент я использую PHP 7.2 . Я делаю запросы асинхронно (не последовательно) с multi-cURL, и это занимает совсем немного времени, кроме того, что требует более медленный API. Проблема заключается в обработке ответов каждого API. Каждый API возвращает значительный объем данных (ответ до 32 МБ) , а функция, которая интерпретирует и загружает ответ в модель данных, может занять до 1 секунды на ответ. Последовательная загрузка 100 запросов (один за другим) невозможна, пользователь должен подождать более 100 секунд, чтобы получить ответ.
Один из моих первых вариантов был одновременный программирование . При PHP это возможно при использовании PThreads , но библиотека позволяет запускать потоки обработки только для консольных приложений (CLI) , а мое приложение - веб.
Другой вариант заключался в использовании очередей сообщений AMQP (под RabbitMQ RP C) , но объем данных таков, что для сериализации ответа API требуется много времени, отправьте его в очередь, запустите процесс очереди, сериализуйте результат обработки и отправьте исходный сценарий для продолжения выполнения, поэтому после нескольких дней тестирования я отклонил эту опцию.
Я также попытался React PHP, кто-то мне сказал, что при асинхронном выполнении запросов к API и работе с обещаниями загрузка ответов в модель данных не будет последовательной, но после тестирования React PHP не работает сюда. Выполнение сценария занимает много времени.
В качестве последнего варианта я думаю о миграции приложения на Python и использовании пула потоков для всего этого, но я читал, что Python медленнее на уровне выполнения, чем PHP 7.2. Это правда? Это медлительность значительна во время выполнения?
Что вы думаете? Кто-нибудь должен был решить подобную проблему?
Я открыт для любой идеи, не имеет значения, какой язык программирования и аппаратные ресурсы использовать, все, что я рассмотрел.
Спасибо.
Привет, Хосе.