以下是一些背景信息:

以下是一些背景信息:

以下是一些背景信息:

我有两个运行相同应用程序的服务器环境。第一个环境是我打算放弃的,它是一个标准的 Google App Engine 环境,它有很多限制。第二个环境是一个使用 Gunicorn 运行我的 Python 应用程序的 Google Kubernetes 集群。

并发

在第一台服务器上,我可以向应用程序发送多个请求,它会同时响应多个请求。我在两种环境中同时对应用程序运行两批请求。在 Google App Engine 上,第一批和第二批请求同时得到响应,并且第一批请求不会阻止第二批请求。

在 Kubernetes 上,服务器仅同时响应 6 个,第一批会阻塞第二批。我读过一些关于如何使用 gevent 或多线程实现 Gunicorn 并发的帖子,它们都说我需要有 CPU 核心,但问题是无论我投入多少 CPU,限制仍然存在。我尝试过从 1VCPU 到 8VCPU 的 Google 节点,但变化不大。

你们能告诉我我可能遗漏了什么吗?也许是 Google 集群节点限制?

Kubernetes 响应瀑布

您可以注意到,第二批是在第一批开始完成后才开始得到响应。

在此处输入图片描述

App Engine 响应瀑布

在此处输入图片描述

Gunicorn 配置

我已经尝试使用标准类和推荐的设置:2 * 核心 + 1 和 12 个线程。

我也尝试过使用 gevent --worker-connections 2000

两者都没什么不同。响应时间非常相似。

我的 kubernetes 文件容器部分:

    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      containers:
      - name:  python-gunicorn
        image:  gcr.io/project-name/webapp:1.0
        command:
          - /env/bin/gunicorn
          - --bind
          - 0.0.0.0:8000
          - main:app
          - --chdir
          - /deploy/app
          #- --error-logfile
          #- "-"
          - --timeout
          - "7200"
          - -w
          - "3"
          - --threads
          - "8"
          #- -k
          #- gevent
          #- --worker-connections
          #- "2000"

答案1

发布此信息Community Wiki是为了让社区更好地了解情况。

不幸的是,我没有全部信息来准确重现此场景(应用程序设计、测试执行方式、环境等)。但是,根据 OP 的评论:

事实证明,使用 Kubernetes,多任务处理是在 Pod 级别进行的。您可以运行许多较小的 Pod,而不是使用一个包含许多线程的大 Pod。您可以尝试这种切换。

看起来,OP 在他的GKE集群中使用了羟脯氨酸CPU集群自动扩缩类似的解决方案App Engine Flex || Kubernetes Engine —?文章。

值得一提的是,许多取决于缩放类型

相关内容