REST API - 批处理与多个调用

时间:2018-05-29 09:15:18

标签: python r api batch-processing flask-restful

我正在编写API以接受POST请求并提供输出。用例是,我应该能够支持单个和输入。所以,我提出了这样的结构:

输入:

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

输出:

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

此格式既支持单个也支持多个呼叫。但是,这意味着API必须处理CPU和线程,例如API调用可能包含100个输入,处理这些输入可能需要一段时间。所以,我需要以下几点的输入:

  • 如果API的责任只是处理输入,那么CPU /线程处理是否应该在消费者级别完成并使用多个调用来处理多个输入? (即每次通话输入一次)
  • 如果我每次呼叫切换到一个输入,我可能最终会进行多次呼叫(可能使用不同的端点),这对于每次拨打一次呼叫是否有效(就网络流量而言)100个输入? (即按要求设置硬限额)
  • 混合方法好主意吗?即要处理一批1000个输入,我可以将它分成小批量的100个输入并进行10次调用
  • API将用Python / R编写,我对这些语言如何处理多个线程没有太多了解。

如果这个问题更适合Stack Exchange,那么我很高兴它能够被移动。

1 个答案:

答案 0 :(得分:1)

设置您的Web服务器以接受HTTP2,并使用可以使用HTTP2多路复用的HTTP2感知库编写客户端调用。

Google顶部是https://hyper.readthedocs.io/en/latest/

这使您无需批处理即可恢复为纯REST,在此情况下,HTTP2连接多路复用可减少多个调用对网络的影响-即,仅在客户端和服务器之间创建一个连接。

这取决于可维护性和性能之间的权衡。 HTTP2将使您免于管理多个线程的麻烦。大概与批处理相比,多个呼叫仍然会对网络产生影响,尤其是在批处理较大的情况下。