Pub/Sub 측정항목을 확장 신호로 사용하기 위한 권장사항

Pub/Sub 측정항목을 파이프라인 자동 확장 신호로 사용하는 경우의 권장사항은 다음과 같습니다.

신호를 2개 이상 사용하여 파이프라인 자동 확장

Pub/Sub 측정항목만 사용하여 파이프라인을 자동 확장하지 마세요. 자동 확장 결정을 위한 단일 장애점이 있는 시나리오가 발생할 수 있습니다. 대신 신호를 조합하여 자동 확장을 트리거합니다. 추가 신호의 예시로는 클라이언트의 CPU 사용률 수준이 있습니다. 이 신호는 클라이언트 태스크가 태스크를 처리하고 있는지, 확장 시 클라이언트 태스크가 더 많은 태스크를 처리할 수 있는지 여부를 나타낼 수 있습니다. 파이프라인에 사용할 수 있는 다른 Cloud 제품의 신호 예시는 다음과 같습니다.

  • Compute Engine은 CPU 사용률 및 Monitoring 측정항목과 같은 신호에 따른 자동 확장을 지원합니다. 또한 Compute Engine은 신뢰성 향상을 위해 여러 측정항목과 여러 신호를 지원합니다.

    Monitoring 측정항목으로 확장에 대한 자세한 내용은 Monitoring 측정항목을 기준으로 확장을 참조하세요. CPU 사용률로 확장에 대한 자세한 내용은 CPU 사용률을 기준으로 확장을 참조하세요.

  • Google Kubernetes Engine 수평형 포드 자동 확장 (HPA)은 CPU 및 메모리 사용량과 같은 리소스 사용량, 커스텀 Kubernetes 측정항목, Pub/Sub의 Monitoring 측정항목과 같은 외부 측정항목을 기준으로 자동 확장을 지원합니다. 또한 여러 신호를 지원합니다.

    자세한 내용은 수평형 포드 자동 확장을 참조하세요.

전역 버전 대신 지역별 버전의 측정항목 사용

Pub/Sub는 일반적으로 자동 확장에 사용되는 각 측정항목의 두 가지 버전을 제공합니다. by_region 접미사가 있는 버전을 사용해야 합니다.

자동 확장이 단일 리전 중단에 탄력적으로 대응하도록 하려면 이러한 측정항목의 전역 버전을 사용하지 마세요. 이러한 측정항목의 전역 버전에서는 메시지가 있는 것으로 알려진 모든 지역에서 백로그를 계산해야 하므로 단일 지역에서 사용할 수 없으면 데이터 격차가 발생합니다. 반면 by_region 버전의 측정항목은 리전별로 백로그를 계산하고 보고합니다. 단일 지역에 대해 백로그를 계산할 수 없는 경우에도 측정항목은 다른 지역의 값을 계속 보고합니다.

구독자 측 처리량 측정항목을 사용하여 구독자를 자동 확장하지 않음

subscription/ack_message_count와 같은 구독자 측 처리량 측정항목을 사용하여 구독자 클라이언트를 자동 확장하지 마세요. 대신 앞에서 언급한 subscription/num_unacked_messages 또는 subscription/oldest_unacked_message_age과 같이 처리 대기 중인 메시지의 백로그를 직접 반영하는 측정항목을 사용하는 것이 좋습니다.

자동 확장에 구독자 측 처리량 측정항목 사용 시 발생하는 문제

이러한 측정항목은 Pub/Sub와 구독자 간의 트래픽 양을 나타내므로 문제를 일으킬 수 있습니다. 이러한 측정항목을 기반으로 확장하면 전송되거나 수신 확인된 메시지가 감소하여 클라이언트가 축소되는 자기 참조 루프가 발생할 수 있습니다. 예를 들어 트래픽이 일시적으로 감소하거나 구독자 중 한 명에게 문제가 있는 경우에 발생할 수 있습니다.

클라이언트가 0 또는 0에 가까운 값으로 축소되면 진행 중인 모든 구독 트래픽이 중지되고 새 메시지가 도착하더라도 구독자가 메시지를 처리하지 못할 수 있습니다. 이로 인해 상당한 수집 지연이 발생하고 구독자 클라이언트가 복구할 수 없는 상태가 될 수 있습니다.

측정항목 격차가 발생할 경우의 처리 방법

측정항목이 없다고 해서 처리할 메시지가 없다고 가정하지 마세요. 예를 들어 누락된 측정항목에 대한 응답으로 처리 태스크를 0으로 축소하면 이미 백로그에 있는 메시지나 이 시간 동안 게시된 메시지가 소비되지 않습니다. 이렇게 되면 엔드 투 엔드 지연 시간이 늘어납니다. 지연 시간을 최소화하려면 최신 Pub/Sub 측정항목이 빈 큐를 표시하더라도 항상 게시된 메시지를 처리할 준비가 될 수 있도록 최소 태스크 수를 0보다 크게 설정합니다.

Compute Engine 자동 확장 처리와 Google Kubernetes Engine HPA 모두 측정항목을 사용할 수 없을 때 현재 복제본 수를 유지하도록 설계되었습니다. 이렇게 하면 사용 가능한 측정항목이 없을 때 안전망 역할을 합니다.

또한 Pub/Sub 흐름 제어 메커니즘을 구현하여 누락된 측정항목으로 인해 의도치 않게 축소된 태스크가 과부하되지 않도록 방지할 수 있습니다.