REST API - пакетная обработка против нескольких вызовов - PullRequest
0 голосов
/ 29 мая 2018

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

Ввод:

{
    "inputs": [{
            "id": 1,
            "foo": "bar"
        },
        {
            "id": 2,
            "foo": "baz"
        }
    ]
}

Вывод:

{
    "outputs": [{
            "id": 1,
            "result": "bax"
        },
        {
            "id": 2,
            "result": "bar"
        }
    ]
}

Этот формат поддерживает как одиночные, так и множественные вызовы.Однако это означает, что API должен будет обрабатывать процессор и потоки, например, вызов API может содержать 100 входных данных, и обработка может занять некоторое время.Итак, мне нужны входные данные по следующим пунктам:

  • Если ответственность API заключается только в обработке ввода, то должна ли обработка ЦП / потока выполняться на уровне потребителя и использовать несколько вызовов для обработки нескольких входов?(т. е. один вход на вызов)
  • Если я переключусь на один вход на вызов, я могу в конечном итоге сделать несколько вызовов (возможно, с другой конечной точкой), будет ли это эффективно (с точки зрения сетевого трафика) против одногоназывать за скажем 100 входов?(т.е. установление жесткого лимита на запрос)
  • Является ли гибридный подход хорошей идеей?то есть, чтобы обработать пакет из 1000 входов, я могу разделить его на небольшие пакеты из 100 входов и сделать 10 вызовов
  • API будет написан на Python / R, и я не очень разбираюсь в том, как эти языки обрабатываютнесколько потоков.

Если этот вопрос больше подходит для Stack Exchange, я рад, что он будет перенесен.

1 Ответ

0 голосов
/ 13 декабря 2018

Настройте свой веб-сервер на прием HTTP2 и запись клиентских вызовов с помощью библиотеки с поддержкой HTTP2, которая может использовать мультиплексирование HTTP2.

В верхней части Google указано https://hyper.readthedocs.io/en/latest/

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

Это зависит от компромисса между ремонтопригодностью и производительностью.HTTP2 избавит вас от головной боли при управлении несколькими потоками.Предположительно, хотя несколько вызовов будут по-прежнему оказывать влияние на сеть по сравнению с пакетной обработкой, особенно если пакеты большие.

...