
給你一些背景資訊:
我有兩個運行相同應用程式的伺服器環境。第一個是我打算放棄的標準 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 引擎 - ?文章。
值得一提的重要事情是,很多取決於縮放類型。