Compute Engine을 기반으로 한 웹 서비스의 전역적 자동 확장


이 튜토리얼에서는 용량 요건에 따라 자동 확장되는 리전 Compute Engine 관리형 인스턴스 그룹과 함께 전 세계에서 사용 가능한 웹 서비스를 설정하는 방법에 대해서 설명합니다. 이 가이드에서 언급하는 기법을 사용하면 Compute Engine을 기반으로 전 세계 분산 및 확장이 가능한 프로젝트를 구현할 수 있습니다.

목표

  • 자동 확장을 사용 설정하여 다수의 리전 Compute Engine 관리형 인스턴스 그룹을 배포합니다.
  • 리전 간 부하 분산기를 만듭니다.
  • 전 세계 여러 리전에서 테스트 트래픽을 생성합니다.
  • Google Cloud Console을 사용하여 부하 분산기의 요청을 라우팅하는 방법과 수요에 맞게 인스턴스 그룹을 자동 확장하는 방법을 시각화합니다.

비용

이 튜토리얼에서는 다음과 같이 비용이 청구될 수 있는 Google Cloud 구성요소를 사용합니다.

  • Compute Engine

시작하기 전에

  1. Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  3. Compute Engine API 사용 설정

    API 사용 설정

애플리케이션 아키텍처

애플리케이션에는 다음과 같은 Compute Engine 구성요소가 포함됩니다.

  1. 인스턴스 템플릿: 인스턴스 그룹의 각 인스턴스를 만들 때 사용하는 템플릿
  2. 인스턴스 그룹: 수신되는 트래픽에 따라 자동 확장되는 다수의 인스턴스 그룹
  3. 부하 분산기: 인스턴스 그룹 간에 트래픽을 분산하는 HTTP 부하 분산기
  4. 인스턴스: 전 세계 여러 지역에서 테스트 트래픽을 생성하는 다수의 테스트 인스턴스

여러 리전 인스턴스 그룹과 함께 부하 분산기를 표시하는 시스템 아키텍처 다이어그램

웹 서비스 설정

인스턴스 그룹 만들기

Console

  1. 인스턴스 그룹 네트워크를 만듭니다.

    1. Google Cloud Console에서 VPC 네트워크 페이지로 이동합니다.

      VPC 네트워크로 이동

    2. VPC 네트워크 만들기를 클릭합니다.

    3. 이름fortressnet로 설정합니다.

    4. 서브넷 생성 모드자동으로 설정합니다.

    5. 페이지 하단에 있는 만들기를 클릭합니다.

  2. 네트워크의 방화벽 규칙을 만듭니다. 이 규칙은 인스턴스에 보내는 모든 HTTP 요청을 허용합니다.

    1. Google Cloud Console에서 방화벽 규칙 페이지로 이동합니다.

      방화벽 규칙으로 이동

    2. 방화벽 규칙 만들기를 클릭합니다.

    3. 이름fortressnet-allow-http로 설정합니다.

    4. 네트워크에서 fortressnet을 선택합니다.

    5. 타겟에서 All instances in the network를 선택합니다.

    6. 소스 IPv4 범위0.0.0.0/0으로 설정합니다.

    7. 프로토콜 및 포트에서 지정된 프로토콜 및 포트를 선택한 다음 tcp 체크박스를 선택하고 80을 입력합니다.

    8. 만들기를 클릭합니다.

  3. 인스턴스 템플릿을 만듭니다. 이때 인스턴스마다 간단한 Apache 웹 서버를 시작하는 시작 스크립트를 추가합니다.

    1. Google Cloud Console에서 인스턴스 템플릿 페이지로 이동합니다.

      인스턴스 템플릿으로 이동

    2. 인스턴스 템플릿 만들기를 클릭합니다.

    3. 이름fort-template로 설정합니다.

    4. 머신 구성에서 e2-micro(vCPU 2개, 1GB 메모리)를 선택합니다.

    5. 고급 옵션 섹션에서 네트워킹을 펼친 후 다음을 수행합니다.

      1. 네트워크 인터페이스 섹션에서 네트워크 인터페이스를 펼쳐 수정합니다.
      2. 네트워크에서 fortressnet를 선택합니다.
    6. 관리 섹션에서 자동화에 다음 시작 스크립트를 입력합니다.

      apt update && apt -y install apache2
      

    7. 만들기를 클릭합니다.

  4. 인스턴스 템플릿을 사용해 다수의 리전 관리형 인스턴스 그룹을 만듭니다. 이때 각 인스턴스 그룹에 자동 확장을 설정합니다.

    1. Google Cloud Console에서 인스턴스 그룹 페이지로 이동합니다.

      인스턴스 그룹으로 이동

    2. 인스턴스 그룹 만들기를 클릭하여 새 관리형 인스턴스 그룹을 만듭니다.

    3. 새 관리형 인스턴스 그룹(스테이트리스(Stateless))을 선택합니다.

    4. 이름us-central1-pool로 설정합니다.

    5. 인스턴스 템플릿에서 fort-template을 선택합니다.

    6. 위치에서 다중 영역을 선택합니다.

    7. 리전에서 us-central1를 선택합니다. 영역의 경우 사전 정의된 값을 선택한 상태로 둡니다.

    8. 자동 확장 모드에서 사용: 그룹에 인스턴스 추가 및 삭제를 선택합니다.

    9. 최소 인스턴스 수1로 설정합니다.

    10. 최대 인스턴스 수5로 설정합니다.

    11. 자동 확장 신호에서 기본 선택 항목(CPU 사용률)을 수정하고 신호 유형HTTP 부하 분산 사용률로 설정합니다.

    12. 목표 HTTP 부하 분산 사용률80으로 설정합니다.

    13. 완료를 클릭합니다.

    14. 만들기를 클릭합니다. 인스턴스 그룹을 HTTP 부하 분산기의 백엔드 서비스에도 할당해야 한다는 메시지가 대화상자에 표시됩니다.

    15. 확인 대화상자에서 확인을 클릭합니다. 모든 인스턴스 그룹을 만든 후 부하 분산기를 구성할 수 있습니다.

    16. 위 단계를 반복하면서 다음과 같이 변경하여 인스턴스 그룹을 2개 더 만듭니다.

      • 이름europe-west1-pool이고 리전europe-west1인 그룹을 만듭니다.
      • 이름asia-east1-pool이고 리전asia-east1인 그룹을 만듭니다.
  5. (선택사항) 인스턴스가 정상인지, 그리고 HTTP 트래픽을 처리하고 있는지 확인합니다. 인스턴스 1개 이상의 외부 IP 주소를 테스트하세요. 인스턴스가 시작 프로세스를 마칠 때까지 1분 정도 기다려야 할 수도 있습니다.

    1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스로 이동

    2. 실행 중인 인스턴스마다 인스턴스 그룹 이름 옆의 상태 열에 녹색 체크표시가 있는지 확인합니다.

    3. 인스턴스의 외부 IP를 복사하여 웹브라우저에 붙여넣습니다.

    'Apache2 Debian 기본 페이지' 웹페이지가 나타납니다.

    그렇지 않을 경우 잠시만 기다려주세요.

gcloud

  1. 인스턴스 그룹 네트워크를 만듭니다.

    gcloud compute networks create fortressnet --subnet-mode auto
    
  2. 네트워크의 방화벽 규칙을 만듭니다. 이 규칙은 인스턴스에 보내는 모든 HTTP 요청을 허용합니다.

    gcloud compute firewall-rules create fortressnet-allow-http \
        --network fortressnet \
        --allow tcp:80
    
  3. 인스턴스 템플릿을 만듭니다. 이때 인스턴스마다 간단한 Apache 웹 서버를 시작하는 시작 스크립트를 추가합니다.

    gcloud compute instance-templates create fort-template \
        --machine-type e2-micro \
        --network fortressnet \
        --metadata startup-script='apt update && apt -y install apache2'
    
  4. 인스턴스 템플릿을 사용해 다수의 리전 관리형 인스턴스 그룹을 만듭니다. 이때 각 인스턴스 그룹에 자동 확장을 설정합니다.

    gcloud compute instance-groups managed create us-central1-pool \
        --region us-central1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling us-central1-pool \
        --region us-central1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create europe-west1-pool \
        --region europe-west1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling europe-west1-pool \
        --region europe-west1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
    gcloud compute instance-groups managed create asia-east1-pool \
        --region asia-east1 \
        --template fort-template \
        --size 1
    gcloud compute instance-groups managed set-autoscaling asia-east1-pool \
        --region asia-east1 \
        --min-num-replicas 1 \
        --max-num-replicas 5 \
        --scale-based-on-load-balancing \
        --target-load-balancing-utilization .8
    
  5. (선택사항) 인스턴스가 정상인지, 그리고 HTTP 트래픽을 처리하고 있는지 확인합니다. 인스턴스 1개 이상의 외부 IP 주소를 테스트하세요. 인스턴스가 시작 프로세스를 마칠 때까지 1분 정도 기다려야 할 수도 있습니다.

    1. 인스턴스를 나열합니다.

      gcloud compute instances list
      

    2. STATUS 열 아래에서 인스턴스 상태가 RUNNING인지 확인합니다.

    3. EXTERNAL_IP 열 아래 있는 IP 주소를 쿼리하여 인스턴스를 확인합니다.

      curl http://EXTERNAL_IP | head
      

    <title>Apache2 Debian Default Page: It works</title> 행이 포함된 HTML 텍스트가 표시될 것입니다.

    그렇지 않을 경우 잠시만 기다려주세요.

부하 분산기 구성

부하 분산기는 클라이언트 요청을 다수의 백엔드로 분산시킵니다.

Console

부하 분산기 구성 시작

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. 부하 분산기 만들기를 클릭합니다.

  3. 애플리케이션 부하 분산기(HTTP/S)에서 구성 시작을 클릭합니다.

  4. 이름fortressnet-balancer로 설정합니다.

백엔드 구성

  1. 전역 외부 애플리케이션 부하 분산기 만들기 페이지에서 백엔드 구성을 클릭합니다.
  2. 백엔드 서비스 및 백엔드 버킷 만들기 또는 선택 풀다운 메뉴에서 백엔드 서비스, 백엔드 서비스 만들기를 차례로 선택합니다. 백엔드 서비스 만들기 대화상자가 나타납니다.
  3. 백엔드 서비스의 이름fortressnet-backend-service로 설정합니다.
  4. 새 백엔드 대화상자에서 인스턴스 그룹asia-east1-pool로 설정합니다.
  5. 분산 모드에서 속도를 선택합니다.
  6. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  7. 완료를 클릭합니다.
  8. 백엔드 추가를 클릭합니다.
  9. 새 백엔드 대화상자에서 인스턴스 그룹europe-west1-pool로 설정합니다.
  10. 분산 모드에서 속도를 선택합니다.
  11. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  12. 완료를 클릭합니다.
  13. 백엔드 추가를 클릭합니다.
  14. 새 백엔드 대화상자에서 인스턴스 그룹us-central1-pool로 설정합니다.
  15. 분산 모드에서 속도를 선택합니다.
  16. 최대 RPS를 인스턴스당 100 RPS로 설정합니다.
  17. 완료를 클릭합니다.
  18. 상태 확인에서 상태 확인 만들기를 선택합니다.
  19. 이름http-basic-check로 설정합니다.
  20. 프로토콜에서 HTTP를 선택합니다.
  21. 포트80으로 설정합니다.
  22. 저장 후 계속을 클릭합니다.
  23. 만들기를 클릭합니다.

호스트 및 경로 규칙

  1. 전역 외부 애플리케이션 부하 분산기 만들기 페이지의 왼쪽 패널에서 호스트 및 경로 규칙을 클릭합니다.
    이 예시에서는 모든 트래픽에 기본 규칙이 적용되므로 호스트나 경로 규칙을 구성할 필요가 없습니다. 따라서 미리 채워진 기본값을 그대로 적용할 수 있습니다.

프런트엔드 구성

  1. 전역 외부 애플리케이션 부하 분산기 만들기 페이지의 왼쪽 패널에서 프런트엔드 구성을 클릭합니다.
  2. 이름fortressnet-http-rule으로 설정합니다.
  3. IP 버전에서 IPv4를 선택합니다.
  4. IP 주소에서 IP 주소 만들기를 선택합니다.
  5. 새 고정 IP 예약 대화상자에서 이름fortressnet-ip로 설정합니다.
  6. 예약을 클릭하고 잠시 기다립니다.
  7. 새 프런트엔드 IP 및 포트 대화상자 하단에 있는 완료를 클릭합니다.
  8. 프런트엔드 IP 및 포트 추가를 클릭합니다.
  9. 이름fortressnet-http-ipv6-rule으로 설정합니다.
  10. IP 버전에서 IPv6을 선택합니다.
  11. IP 주소에서 IP 주소 만들기를 선택합니다.
  12. 대화상자에서 이름fortressnet-ipv6으로 설정합니다.
  13. 예약을 클릭하고 잠시 기다립니다.
  14. 새 프런트엔드 IP 및 포트 대화상자 하단에 있는 완료를 클릭합니다.

검토 및 완료

  1. 전역 외부 애플리케이션 부하 분산기 만들기 페이지의 왼쪽 패널에서 검토 및 완료를 클릭합니다.
  2. 만들려던 설정과 현재 설정을 비교합니다.
  3. 설정이 올바르면 왼쪽 패널 하단에 있는 만들기를 클릭합니다. 부하 분산 화면으로 돌아갑니다. 부하 분산기가 만들어지면 옆에 녹색 체크표시가 표시되어 실행 중임을 나타냅니다.

gcloud

백엔드 구성

  1. 기본 상태 확인을 만듭니다. 여기에서는 부하 분산기 백엔드가 HTTP 요청에 응답하고 있는지 확인합니다.

    gcloud compute health-checks create http http-basic-check
    
  2. 전역 백엔드 서비스를 만듭니다. 이 백엔드 서비스는 부하 분산기에서 HTTP 트래픽을 수신합니다.

    gcloud compute backend-services create fortressnet-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
  3. 인스턴스 그룹을 백엔드 서비스의 리전 백엔드로 추가합니다. 이 구성은 인스턴스별 최대 초당 요청 수(RPS)를 기준으로 백엔드 간에 트래픽을 분산합니다.

    gcloud compute backend-services add-backend fortressnet-backend-service \
        --balancing-mode RATE \
        --max-rate-per-instance 100 \
        --instance-group us-central1-pool \
        --instance-group-region us-central1 \
        --global
    gcloud compute backend-services add-backend fortressnet-backend-service \
        --balancing-mode RATE \
        --max-rate-per-instance 100 \
        --instance-group europe-west1-pool \
        --instance-group-region europe-west1 \
        --global
    gcloud compute backend-services add-backend fortressnet-backend-service \
        --balancing-mode RATE \
        --max-rate-per-instance 100 \
        --instance-group asia-east1-pool \
        --instance-group-region asia-east1 \
        --global
    

호스트 및 경로 규칙

  1. URL 맵을 정의합니다. URL 맵은 서로 다른 URL을 서로 다른 백엔드 서비스로 라우팅합니다. 여기에서는 백엔드 서비스가 하나뿐이므로 해당 백엔드 서비스를 모든 URL의 기본 서비스로 설정합니다.

    gcloud compute url-maps create fortressnet-balancer \
        --default-service fortressnet-backend-service
    
  2. HTTP 프록시 경로를 만듭니다. HTTP 프록시 경로는 HTTP 요청을 수신한 후 URL 맵에 따라 라우팅합니다. 여기에서는 모든 요청을 단일 백엔드 서비스로 보냅니다.

    gcloud compute target-http-proxies create fortressnet-http-proxy \
        --url-map fortressnet-balancer
    

프런트엔드 구성

  1. 전역 고정 외부 IP 주소를 두 개 만듭니다. 하나는 IPv4, 다른 하나는 IPv6입니다. 이러한 주소가 부하 분산기의 전역 외부 IP 주소가 됩니다.

    gcloud compute addresses create fortressnet-ip \
        --ip-version IPV4 \
        --network-tier=PREMIUM \
        --global
    gcloud compute addresses create fortressnet-ipv6 \
        --ip-version IPV6 \
        --network-tier=PREMIUM \
        --global
    
  2. 부하 분산기의 외부 IP 주소를 조회합니다.

    gcloud compute addresses list
    
  3. 외부 IP 주소의 전역 전달 규칙을 만듭니다. IPv4 및 IPv6 HTTP 요청 모두 이 규칙에 따라 HTTP 프록시로 전달됩니다.

    gcloud compute forwarding-rules create fortressnet-http-rule \
        --load-balancing-scheme=EXTERNAL \
        --network-tier=PREMIUM \
        --global \
        --target-http-proxy fortressnet-http-proxy \
        --ports 80 \
        --address LOAD_BALANCER_IP_ADDRESS
    
    gcloud compute forwarding-rules create fortressnet-http-ipv6-rule \
        --load-balancing-scheme=EXTERNAL \
        --network-tier=PREMIUM \
        --global \
        --target-http-proxy fortressnet-http-proxy \
        --ports 80 \
        --address LOAD_BALANCER_IPV6_ADDRESS
    

(선택사항) 부하 분산기가 작동하는지 확인합니다. 확인하려면 1~3분 기다려야 할 수도 있습니다.

Console

  1. Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. fortressnet-balancer에서 백엔드 열 아래 녹색 체크표시가 나타날 때까지 기다립니다.

  3. fortressnet-balancer를 클릭합니다.

  4. 프런트엔드에서 IP:포트 열 아래 있는 IPv4 주소를 복사합니다. (IPv4 주소는 www.xxx.yyy.zzz 형식입니다. 후행 포트 번호인 :nn은 필요하지 않습니다.)프런트엔드 섹션이 보이지 않으면 잠시 기다렸다가 웹페이지를 새로고침하세요.

  5. IP 주소를 웹브라우저에 입력합니다.

'Apache2 Debian 기본 페이지' 웹페이지가 나타납니다.

만약 'Error 404 (Not Found)' 웹페이지가 나타나면 몇 분 더 기다리세요.

gcloud

  1. 부하 분산기의 외부 IP 주소를 조회합니다.

    gcloud compute addresses list
    
  2. IPv4 주소를 쿼리합니다. (IPv4 주소는 www.xxx.yyy.zzz 형식입니다.)

    curl http://LOAD_BALANCER_IP_ADDRESS | head
    

<title>Apache2 Debian Default Page: It works</title> 행이 포함된 HTML 텍스트가 표시될 것입니다.

대신 <title>Error 404 (Not Found)!!1</title>이 표시되면 몇 분 더 기다리세요.

권장사항: 부하 분산기와 상태 확인에서 수신되는 내부 트래픽만 허용하도록 보안 방화벽을 만드세요. 그런 다음 모든 HTTP 요청을 허용했던 원래 방화벽을 삭제하세요. 그러면 외부 클라이언트가 각 인스턴스에 액세스하지 못하도록 차단할 수 있습니다.

Console

  1. 부하 분산기와 상태 확인에서 수신되는 트래픽만 허용하도록 새로운 방화벽을 만듭니다.

    1. Google Cloud Console에서 방화벽 규칙 페이지로 이동합니다.

      방화벽 규칙으로 이동

    2. 방화벽 규칙 만들기를 클릭합니다.

    3. 이름fortressnet-allow-load-balancer로 설정합니다.

    4. 네트워크에서 fortressnet을 선택합니다.

    5. 타겟에서 All instances in the network를 선택합니다.

    6. 소스 IP 범위130.211.0.0/22를 입력하고 Enter 키를 누른 후 35.191.0.0/16을 입력하고 다시 Enter 키를 누릅니다.

    7. 프로토콜 및 포트에서 tcp를 선택한 후 80을 입력합니다.

    8. 만들기를 클릭합니다.

  2. 이전에 모든 요청을 허용했던 방화벽을 삭제합니다.

    1. fortressnet-allow-http 옆에 있는 체크표시를 선택합니다.
    2. 페이지 상단에 있는 삭제를 클릭합니다.
    3. 대화상자에서 삭제를 클릭합니다.

gcloud

  1. 부하 분산기와 상태 확인에서 수신되는 트래픽만 허용하도록 새로운 방화벽을 만듭니다.

    gcloud compute firewall-rules create fortressnet-allow-load-balancer \
        --network fortressnet \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --allow tcp:80
    
  2. 이전에 모든 요청을 허용했던 방화벽을 삭제합니다.

    gcloud compute firewall-rules delete fortressnet-allow-http -q
    

(선택사항) 자동 확장 및 부하 분산의 작동 여부 확인

테스트 트래픽 생성

지금은 유럽의 아침이고, 갑자기 인터넷에서 웹서비스가 큰 인기를 끌기 시작했다고 가정하겠습니다. 이제 유럽에서 엄청나게 발생하는 클라이언트 요청을 한 번에 모두 생성해 봅시다.

Console

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 만듭니다.

    1. Google Cloud Console에서 인스턴스 만들기 페이지로 이동합니다.

      인스턴스 만들기로 이동

    2. 이름europe-loadtest로 설정합니다.

    3. 리전에서 europe-west1을 선택합니다.

    4. 고급 설정의 경우 네트워킹, 디스크, 보안, 관리, 단독 테넌시 섹션을 펼치고 다음을 수행합니다.

      1. 관리 섹션을 펼칩니다.
      2. 자동화 필드에 다음 시작 스크립트를 입력합니다.
        apt -y install siege
        
    5. 만들기를 클릭하여 VM을 만듭니다.

  2. 부하 분산기의 IPv4 주소를 가져옵니다.

    1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

      부하 분산으로 이동

    2. fortressnet-balancer를 클릭합니다.

    3. 프런트엔드에서 IP:포트 열 아래 있는 IPv4 주소를 복사합니다. (IPv4 주소는 www.xxx.yyy.zzz 형식입니다.)

  3. SSH로 부하 테스트 인스턴스에 연결합니다.

    1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스로 이동

    2. europe-loadtest 인스턴스에서 이름 열 아래 녹색 체크표시가 나타날 때까지 기다립니다.

    3. europe-loadtest에서 연결 열 아래 있는 SSH를 클릭합니다.

  4. Siege를 시작합니다. 대상을 부하 분산기의 IPv4 주소로 지정합니다.

    siege -c150 http://LOAD_BALANCER_IP_ADDRESS
    

gcloud

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 만듭니다.

    gcloud compute instances create europe-loadtest \
        --network default \
        --zone europe-west1-c \
        --metadata startup-script='apt -y install siege'
    
  2. 부하 분산기의 IPv4 주소를 가져옵니다.

    gcloud compute addresses list
    
  3. gcloud 명령어를 사용할 수 있는 셸 세션을 새로 엽니다.

    1. 새로운 셸 세션에서 SSH로 부하 테스트 인스턴스에 연결합니다.

      gcloud compute ssh --zone europe-west1-c europe-loadtest
      
    2. Siege를 시작합니다. 대상을 부하 분산기의 IPv4 주소로 지정합니다.

      siege -c150 http://LOAD_BALANCER_IP_ADDRESS
      

siege 명령어를 실행하면 The server is now under siege...를 선언하는 출력 화면이 나타납니다.

[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.0.2
** Preparing 150 concurrent users for battle.
The server is now under siege...

부하 분산 및 자동 확장 모니터링

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산으로 이동

  2. fortressnet-balancer라는 부하 분산기를 클릭합니다.

  3. 모니터링 탭을 클릭합니다.

  4. 백엔드 드롭다운에서 fortressnet-backend-service를 선택합니다.

데이터를 충분히 표시하려면 최대 10분까지 걸릴 수 있습니다. 얼마 후 다음과 비슷한 화면이 표시됩니다.

유럽에서 발생하는 요청이 백엔드 3개로 균등하게 분산됨을 보여주는 Google Cloud Console의 모니터링 화면

어떤 상황인가요?

  1. 엄청난 양의 트래픽을 모두 한 번에 전송하면서 부하 테스트가 시작됩니다. 처음에는 부하 분산기가 백엔드 3개에 요청을 균등하게 분산합니다. 요청 수가 자동 확장 한도를 빠르게 초과하기 때문에 서버가 Backend 5xx errors를 반환하고 모니터링 화면에 나타날 수도 있습니다. 자동 확장 처리가 필요에 따라 인스턴스를 추가로 가동하기 시작합니다.

  2. 자동 확장을 통해 용량이 필요한 만큼 늘어납니다. Compute Engine 부하 분산기는 요청 지연 시간을 최소화하기 위해 클라이언트와 가장 가까운 백엔드로 요청을 라우팅하려고 시도합니다. 여기에서는 부하 테스트 트래픽이 유럽에서 시작되었으므로 부하 분산기가 더 많은 요청을 유럽 백엔드로 라우팅합니다. 결과적으로 자동 확장은 늘어나는 요청을 처리하기 위해 유럽 백엔드에 위치한 인스턴스를 추가로 가동할 수 있습니다.

다른 곳에 테스트 트래픽 생성

아시아에서도 오후부터 인터넷 혼잡이 발생하면서 웹서비스가 큰 인기를 끌고 있다고 가정합니다. 아시아에서 엄청나게 발생하는 요청을 생성해 봅시다.

Console

  1. 부하 테스트 도구인 Siege가 설치된 인스턴스를 하나 더 만듭니다.

    1. Google Cloud Console에서 VM 인스턴스 페이지로 이동합니다.

      VM 인스턴스로 이동

    2. 인스턴스 만들기를 클릭합니다.

    3. 이름asia-loadtest로 설정합니다.

    4. 리전에서 asia-east1을 선택합니다.

    5. 네트워킹, 디스크, 보안, 관리, 단독 테넌시를 클릭하여 고급 설정을 확인합니다.

    6. 관리 탭을 클릭합니다.

    7. 자동화에서 다음 시작 스크립트를 입력합니다.

      apt -y install siege
      

    8. 페이지 하단에 있는 만들기를 클릭합니다.

  2. 부하 분산기의 IP 주소를 가져옵니다.

    1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

      부하 분산으로 이동

    2. fortressnet-balancer를 클릭합니다.

    3. 프런트엔드에서 IP:포트 열 아래 있는 IPv4 주소를 복사합니다. (IPv4 주소는 www.xxx.yyy.zzz 형식입니다.)

  3. SSH로 부하 테스트 인스턴스에 연결합니다.

    1. asia-loadtest 인스턴스에서 이름 열 아래 녹색 체크표시가 나타날 때까지 기다립니다.
    2. asia-loadtest에서 연결 열 아래 있는 SSH를 클릭합니다.
  4. Siege를 시작합니다. 대상을 부하 분산기의 IPv4 주소로 지정합니다.

    siege -c150 http://LOAD_BALANCER_IP_ADDRESS
    

gcloud

  1. 원래 셸 세션에서 부하 테스트 도구인 Siege가 설치된 인스턴스를 하나 더 만듭니다.

    gcloud compute instances create asia-loadtest \
        --network default \
        --zone asia-east1-c \
        --metadata startup-script='apt -y install siege'
    
  2. 부하 분산기의 IPv4 주소를 가져옵니다.

    gcloud compute addresses list
    
  3. gcloud 명령어를 사용할 수 있는 셸 세션을 새로 엽니다.

    1. 새로운 셸 세션에서 SSH로 부하 테스트 인스턴스에 연결합니다.

      gcloud compute ssh --zone asia-east1-c asia-loadtest
      
    2. Siege를 시작합니다. 대상을 부하 분산기의 IPv4 주소로 지정합니다.

      siege -c150 http://LOAD_BALANCER_IP_ADDRESS
      

다시 한 번 The server is now under siege...를 선언하는 출력 화면이 나타납니다.

[alert] Zip encoding disabled; siege requires zlib support to enable it
** SIEGE 4.0.2
** Preparing 150 concurrent users for battle.
The server is now under siege...

부하 분산 및 자동 확장 모니터링

앞서 확인했던 부하 분산 모니터링 화면으로 다시 이동합니다. 새로운 데이터를 충분히 표시하려면 최대 10분까지 걸릴 수 있습니다. 얼마 후 다음과 비슷한 화면이 표시됩니다.

유럽과 아시아에서 발생하는 요청이 백엔드 3개로 분산됨을 보여주는 Google Cloud Console의 모니터링 화면

어떤 상황인가요?

  1. 이번에도 부하 테스트가 엄청난 양의 요청을 한꺼번에 전송합니다. 처음에는 부하 분산기가 기존 백엔드 3개에 요청을 균등하게 분산합니다. 요청 수가 자동 확장 한도를 초과하면서 자동 확장 처리가 필요에 따라 인스턴스를 추가로 가동하기 시작합니다.

  2. 자동 확장을 통해 용량이 새로 필요한 만큼 늘어납니다. 부하 분산기는 여전히 가장 가까우며 사용 가능한 백엔드로 요청을 라우팅하려고 합니다. 결과적으로 아시아 백엔드는 아시아에서 주로 요청을 수신하고, 유럽 백엔드는 유럽에서 주로 요청을 수신하고, US 백엔드는 나머지 요청을 모두 수신합니다.

정리

튜토리얼을 완료한 후에는 만든 리소스를 삭제하여 할당량 사용을 중지하고 요금이 청구되지 않도록 할 수 있습니다. 다음 섹션은 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 튜토리얼에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

인스턴스 삭제

Compute Engine 인스턴스를 삭제하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 삭제할 인스턴스.
  3. 인스턴스를 삭제하려면 추가 작업을 클릭하고, 삭제를 클릭한 후 안내를 따르세요.

다음 단계