給你一些背景資訊:

給你一些背景資訊:

給你一些背景資訊:

我有兩個運行相同應用程式的伺服器環境。第一個是我打算放棄的標準 Google App Engine 環境,它有許多限制。第二個是使用 Gunicorn 運行我的 Python 應用程式的 Google Kubernetes 叢集。

並發性

在第一台伺服器上,我可以向應用程式發送多個請求,它會同時回答多個請求。我在兩個環境上對應用程式同時運行兩批請求。在 Google App Engine 中,第一批和第二批同時回應,且第一批不會阻止第二批。

在 Kubernetes 中,伺服器僅同時回應 6 個,第一批會阻塞第二批。我讀過一些關於如何使用 gevent 或多線程實現 Gunicorn 並發的文章,他們都說我需要有 CPU 核心,但問題是無論我投入多少 cpu,限制仍然存在。我嘗試過Google節點從1VCPU到8VCPU,變化不大。

你們能給我一些關於我可能缺少的東西的想法嗎?也許 Google Cluster 節點有限制?

Kubernetes 回應瀑布

正如您所注意到的,第二批僅在第一批開始完成後才開始回應。

在此輸入影像描述

App Engine 回應瀑布

在此輸入影像描述

槍獸配置

我已經嘗試過使用建議設定的標準類別: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。你可以在那個開關上進行實驗。

看起來,就像他的GKE集群中的 OP 使用的羥丙酸CPU集群自動伸縮中所述的類似解決方案應用程式引擎 Flex || Kubernetes 引擎 - ?文章。

值得一提的重要事情是,很多取決於縮放類型

相關內容