Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform Google云运行:错误:HTTP/2框架层中的流错误_Google Cloud Platform_Google Cloud Run - Fatal编程技术网

Google cloud platform Google云运行:错误:HTTP/2框架层中的流错误

Google cloud platform Google云运行:错误:HTTP/2框架层中的流错误,google-cloud-platform,google-cloud-run,Google Cloud Platform,Google Cloud Run,我用docker image python:3.7-slim-stretch创建了一个API,无论是在本地还是在AWS ECS上部署,一切都运行良好 但是当我尝试在Google Cloud Run上部署相同的应用程序时,我无法得到任何请求。 我可以通过根域上的浏览器访问服务器,但当我尝试访问/prediction url时,会收到响应错误,如错误:HTTP/2框架层中的流错误或服务不可用。尝试使用Java、javascript请求以及curl请求访问API。 奇怪的是,所有东西在AWS ECS上

我用docker image python:3.7-slim-stretch创建了一个API,无论是在本地还是在AWS ECS上部署,一切都运行良好

但是当我尝试在Google Cloud Run上部署相同的应用程序时,我无法得到任何请求。 我可以通过根域上的浏览器访问服务器,但当我尝试访问/prediction url时,会收到响应错误,如错误:HTTP/2框架层中的流错误或服务不可用。尝试使用Java、javascript请求以及curl请求访问API。 奇怪的是,所有东西在AWS ECS上都能100%工作,但我无法让它在Googl云上运行。 在部署到Google Cloud Run时,有什么需要考虑的具体问题吗

请求路由定义:

@app.route("/classify-url", methods=["GET"])
@requires("authenticated")
async def classify_url(request):
    img_bytes = await get_bytes(request.query_params["url"])
    return await predict_image_from_bytes(img_bytes)
服务器启动命令:

if __name__ == "__main__":
    if "serve" in sys.argv:
        # int(os.environ.get('PORT', 8080))
        uvicorn.run(app, host="0.0.0.0", port=8080, log_level="info")
dockerfile:

FROM python:3.7-slim-stretch

RUN apt-get update && apt-get install -y git python3-dev gcc \
    && rm -rf /var/lib/apt/lists/*

COPY requirements.txt .

RUN pip install --upgrade -r requirements.txt

COPY . .

EXPOSE 8080
EXPOSE 8000
EXPOSE 80
ENV LISTEN_PORT=8080

# Start the server
CMD ["gunicorn", "-w 1", "-k uvicorn.workers.UvicornWorker", "-b 0.0.0.0:8080", "-t 8", "main:app"]
正如您在中所看到的,完全管理的云运行不支持HTTP流。该团队正在进行研究,但目前还没有发布,也没有公布发布日期

如果您想使用流媒体,可以在GKE上使用Cloud Run,但管理和成本不一样。

正如您在中看到的,完全管理的Cloud Run不支持HTTP流媒体。该团队正在进行研究,但目前还没有发布,也没有公布发布日期


如果你想使用流媒体,你可以在GKE上使用Cloud Run,但是管理和成本不一样。

谢谢你的提示,我已经将gunicorn的超时时间更改为CMD[gunicorn,-w 1,-k uvicorn.workers.UvicornWorker,-b 0.0.0:8080,-t 30,main:app],现在它可以工作了。因此,我猜这个错误更多地与超时或响应问题有关,而不是连接或套接字问题。仍然会感兴趣的是,如何使用日志或更好地锁定位置和日志?@BenWhite-查看您所做的更改,以及是否应该使用workers。Cloud Run确实支持后台线程,但当HTTP请求返回时,CPU空闲为零,这意味着后台线程将因CPU不足而失败。@JohnHanley这是一个非常有趣的观点,我实际上从未想到过。我想我理解了你的观点,因为与请求-响应之间的正确设置相比,超时的增加可以防止线程CPU不足。请你详细说明一下,或者给我指出正确的方向,在那里我可以找到关于正确设置的更多信息。例如,我知道处理单个请求大约需要3秒钟,那么我如何确定正确的设置呢?提前谢谢@BenWhite-Cloud运行是一种HTTP请求/响应设计。这意味着处理在调用端点时开始,在端点返回时结束。如果您有一个复杂的设计多线程或长处理,云运行可能不是一个很好的匹配。我不建议对调用其他服务(如图像识别)的任务运行云计算。云运行应该是一种服务,而不是其他服务的代理。考虑到30秒的超时时间和定价,F1微型实例可能是一个更便宜、更好的选择。感谢您的提示,我已将gunicorn的超时时间更改为类似CMD[gunicorn,-w 1,-k uvicorn.workers.UvicornWorker,-b 0.0.0:8080,-t 30,main:app],现在它可以工作了。因此,我猜这个错误更多地与超时或响应问题有关,而不是连接或套接字问题。仍然会感兴趣的是,如何使用日志或更好地锁定位置和日志?@BenWhite-查看您所做的更改,以及是否应该使用workers。Cloud Run确实支持后台线程,但当HTTP请求返回时,CPU空闲为零,这意味着后台线程将因CPU不足而失败。@JohnHanley这是一个非常有趣的观点,我实际上从未想到过。我想我理解了你的观点,因为与请求-响应之间的正确设置相比,超时的增加可以防止线程CPU不足。请你详细说明一下,或者给我指出正确的方向,在那里我可以找到关于正确设置的更多信息。例如,我知道处理单个请求大约需要3秒钟,那么我如何确定正确的设置呢?提前谢谢@BenWhite-Cloud运行是一种HTTP请求/响应设计。这意味着处理在调用端点时开始,在端点返回时结束。如果您有一个复杂的设计多线程或长处理,云运行可能不是一个很好的匹配。我不建议对调用其他服务(如图像识别)的任务运行云计算。云运行应该是一种服务,而不是其他服务的代理。考虑到30秒超时和定价,F1微型实例可能是一个更便宜、更好的选择。