Анализ программного обеспечения: обработка больших данных через API - PullRequest
0 голосов
/ 01 апреля 2020

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

Проблема является следующим:

  1. Выполнение Асинхронно более 100 запросов к различным API (с разными структурами, но с одинаковым типом информации) .
  2. Загрузка каждого ответа в общую структуру данных.
  3. Консолидация всех структур по собственным критериям.
  4. Показать результат для пользователя.

В данный момент я использую 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. Это правда? Это медлительность значительна во время выполнения?

Что вы думаете? Кто-нибудь должен был решить подобную проблему?

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

Спасибо.

Привет, Хосе.

...