몇 가지 맥락을 설명하자면 다음과 같습니다.

몇 가지 맥락을 설명하자면 다음과 같습니다.

몇 가지 맥락을 설명하자면 다음과 같습니다.

동일한 앱을 실행하는 두 개의 서버 환경이 있습니다. 제가 포기하려고 하는 첫 번째는 많은 제한이 있는 표준 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를 실행할 수 있습니다. 해당 스위치를 실험해 볼 수 있습니다.

GKE그의 클러스터 에서 OP가 사용된 것처럼 보입니다.HPACPU클러스터 자동 확장설명된 유사한 솔루션App Engine Flex || 쿠버네티스 엔진 — ?기사.

언급할 가치가 있는 중요한 점은 많은 사람들이 의존한다는 것입니다.확장 유형.

관련 정보