이 문서에서는 사용자가 Pub/Sub 주제를 구독하고 구독자 클라이언트에서 메시지를 수신하는 프로세스에 이미 익숙하다고 가정합니다.
Pub/Sub를 처음 사용하는 경우 빠른 시작 가이드 중 하나를 참조하고 콘솔, Google Cloud CLI, 클라이언트 라이브러리를 사용하여 Pub/Sub를 실행하는 방법을 알아보세요.
적합한 구독 선택하기
Pub/Sub는 push 및 pull 구독과 같은 표준 구독을 제공합니다. 표준 구독 외에도 Pub/Sub는 Dataflow를 중개자로 사용하지 않고도 메시지를Cloud de Confiance by S3NS 리소스에 직접 저장할 수 있는 내보내기 구독도 제공합니다. 예를 들어 BigQuery 구독은 BigQuery 테이블에 메시지를 저장합니다.
push 구독은 다음과 같은 시나리오에서 권장됩니다.
클라이언트 라이브러리를 종속 항목으로 가져오는 코드를 구독자 애플리케이션에 포함할 수 없습니다.
구독자 클라이언트가 발신 요청을 할 수 없습니다.
구독자 클라이언트가 구독 목록을 모르는 상황에서 동일한 인스턴스를 사용하여 서로 다른 주제 및 구독의 메시지를 처리하려고 합니다.
일반적인 경우에는 상위 수준 클라이언트 라이브러리를 사용하는 것이 좋습니다. 대신 단항 가져오기를 사용하는 경우 returnImmediately를 true로 설정하지 마세요. true로 설정하면 가져오기 성능에 부정적인 영향을 미칩니다.
returnImmediately 필드가 지원 중단되었습니다.
모든 구독 유형을 비교하고 비즈니스 요구사항에 가장 적합한 구독 유형을 선택하려면 Pub/Sub 구독 비교 표를 참조하세요.
내보내기 구독의 이점에 대한 자세한 내용은 내보내기 구독을 사용해야 하는 경우를 참조하세요.
메시지를 확인하기 전에 처리
기본적으로 Pub/Sub는 메시지가 확인된 후 구독에서 메시지를 삭제합니다. 확인을 전송하기 전에 메시지를 처리하지 않고 처리가 실패하면 서비스에서 메시지를 다시 전송하지 않습니다. 확인된 메시지 보관 또는 주제 보관을 구성하고 탐색 작업을 수행하는 경우는 예외입니다.
지연 시간이 긴 구독자가 있는 경우 흐름 제어 및 임대 관리에 커스텀 값을 설정해야 할 수 있습니다.
메시지 ID 보존
문제 해결을 더 쉽게 하려면 게시자와 구독자가 게시된 메시지의 메시지 ID를 보존해야 합니다. 게시된 각 메시지의 ID를 저장하거나 필요에 따라 메시지 ID 로깅을 사용 설정할 수 있습니다. 메시지 ID를 유지하면 중복 메시지, 재전송, 데이터 손실, 기타 일반적인 문제를 더 쉽게 해결할 수 있습니다. 자세한 내용은 중복 처리를 참조하세요.
일시적인 트래픽 급증에 대한 구독자 흐름 제어 구성
구독자 측의 흐름 제어를 사용하면 트래픽 급증으로 인해 구독자가 과부하되는 것을 방지할 수 있습니다. 자동 확장 메커니즘이 증가된 부하에 응답할 시간을 허용하거나 부하 처리를 더 긴 기간에 걸쳐 분산할 수 있습니다. 전자의 경우 지연 시간이 절약되고 후자의 경우 비용이 절약됩니다.
흐름 제어를 구성하려면 maximum outstanding messages 및 total outstanding message bytes에 적절한 값을 설정해야 합니다. 이러한 흐름 제어 변수의 기본값과 변수 이름은 클라이언트 라이브러리마다 다를 수 있습니다.
최대 미해결 메시지는 Pub/Sub에서 확인 또는 부정 확인을 수신하지 못한 클라이언트에 전송된 최대 메시지 수를 정의합니다.
총 미해결 메시지 바이트는 Pub/Sub에서 확인이나 부정 확인을 수신하지 못한 경우 클라이언트에 전송된 메시지의 최대 총 크기를 정의합니다.
이러한 옵션 중 하나의 한도가 초과되면 구독자 클라이언트에서 더 이상 메시지를 가져오지 않습니다. 이 동작은 이미 가져온 메시지가 확인되거나 부정적으로 확인될 때까지 계속됩니다. 이렇게 하면 처리량과 더 많은 구독자를 실행하는 데 관련된 비용 사이에 균형을 맞출 수 있습니다.
중복 전송 처리
기본적으로 Pub/Sub는 구독자에게 최소 1회 메시지 전송을 제공합니다. 즉, 메시지가 확인된 경우에도 여러 번 전송될 수 있습니다. 다음 섹션에서는 일반적인 재전송 시나리오를 해결하는 방법을 설명합니다.
많은 메시지의 일관된 재전송
많은 메시지가 항상 다시 전송되는 경우 구독자가 과부하 상태이거나 기한이 만료되기 전에 메시지를 확인하지 않는 것입니다.
pull 구독을 사용하는 경우 흐름 제어 값에 커스텀 값을 설정하거나 리스 관리를 사용하여 리스 연장 기간을 늘려야 할 수 있습니다.
push 구독을 사용하는 경우 확인 마감일 설정을 늘려야 할 수 있습니다. 정상 구독 유지 방법에 관한 권장사항을 따를 수도 있습니다.
메시지 재전송
확인 기한이 지나기 전이나 메시지가 몇 초 이내에 확인된 후에 메시지가 다시 전송되면 Pub/Sub가 예상대로 작동하는 것입니다. 이러한 재전송 급증은 자주 발생하지 않지만 재전송이 발생하면 여러 메시지에서 동시에 발생할 수 있습니다. 시스템은 이러한 가끔 발생하는 중복을 허용하도록 빌드되어야 합니다.
몇 개의 메시지가 반복적으로 다시 전송됨
소수의 메시지가 여러 번 전송되는 경우 먼저 메시지를 확인하고 있는지 확인합니다. 그렇지 않은 경우 구독자가 메시지를 제대로 처리하지 않는 이유를 파악합니다. 추가 재전송을 방지하기 위해 데드 레터 주제를 구성할 수 있습니다. 메시지를 확인하는 경우 Pub/Sub가 계속 예상대로 작동할 수 있습니다. 매우 드물지만 내부 네트워크 또는 하드웨어 중단이 있는 경우 소수의 메시지가 여러 번 전송될 수 있습니다. 이러한 경우 서비스는 자가 복구를 시도하지만 해결 방법이 활성화되는 데 몇 분 정도 걸릴 수 있습니다.
시스템은 재전송을 허용해야 합니다. 메시지를 최대한 빨리 처리하고 확인하면 중복 가능성을 줄일 수 있습니다.
애플리케이션에서 중복을 허용할 수 없는 경우 1회만 전송을 사용 설정할 수 있습니다. 이 기능은 pull 구독에만 사용할 수 있으며 게시-구독 지연 시간도 길어집니다. 이 기능을 사용 설정하기 전에 지연 시간이 길어지는 단점이 사용 사례에 적합한지 평가하세요.
구독의 순서가 지정된 메시징 권장사항
메시지 순서를 사용하는 경우 다음 사항을 확인합니다.
StreamingPull 또는 Pull 구독을 선택합니다. push 구독의 경우 Pub/Sub는 각 순서 키에 대해 한 번에 하나의 미해결 메시지만 지원합니다. 이러한 시나리오에서 동시 push 요청을 보내는 것은 동일한 순서 키에 대해 여러 개의 메시지 배치를 동시에 보내 구독자를 동시에 가져오는 것과 유사합니다. 따라서 push 구독은 같은 순서 키로 여러 메시지가 자주 게시되거나 지연 시간이 매우 중요한 주제에는 권장되지 않습니다.
구독에서 메시지 순서를 사용 설정합니다. 게시자 측에서 순서 키를 사용하여 동일한 리전에서 메시지를 전송하는 경우 이러한 메시지를 순서대로 수신하도록 구독자를 구성할 수 있습니다. 구독자 측에서 순서가 지정된 메시지를 수신하려는 구독에 대해서만 메시지 순서 속성을 사용 설정합니다. 속성 상태에 따라 주제에 연결된 각 구독은 서로 영향을 주지 않고 순서가 지정된 전송이 필요한지 여부를 결정할 수 있습니다.
메시지를 순서대로 확인합니다. 순서가 지정된 전송을 사용하는 경우 이전 메시지에 대한 확인이 순서 키별로 처리될 때까지 이후 메시지 확인이 처리되지 않습니다. 예를 들어 순서 키가 동일한 메시지 1, 2, 3이 있는데 메시지를 모두 수신하고 메시지 3만 확인한다면 이 서비스는 메시지 2, 3이 확인될 때까지 메시지 3을 확인한 것으로 간주하지 않습니다. 메시지 1과 2에 대한 확인이 수신되지 않으면 메시지 1, 2, 3이 모두 다시 전송됩니다.
권장사항 요약
다음 표에서는 이 문서에 설명된 권장사항을 요약해서 보여줍니다.
| 주제 | 태스크 |
|---|---|
| 구독 유형 선택 | 비즈니스 요구사항에 맞는 구독 유형을 선택합니다. 구독에서 지원하는 경우 상위 수준 클라이언트 라이브러리도 사용합니다. |
| 확인된 메시지 재생 | 메시지를 확인하기 전에 처리합니다. 또는 확인된 메시지가 손실되지 않도록 탐색 작업을 구성합니다. |
| 흐름 제어 | 자동 확장이 시작되거나 시간이 경과할 때까지 구독자가 과부하되지 않도록 구독자 설정에서 흐름 제어를 구성합니다. |
| 중복 전송 처리 및 메시지 ID 보존 | 수신된 messageId의 로깅을 보존하거나 사용 설정하여 중복, 재전송, 누락된 메시지 문제 해결을 간소화합니다. |
| 메시지 순서 지정 | 순서가 지정된 메시지를 사용할 때는 StreamingPull 또는 Pull을 선택하고, 구독에서 메시지 순서를 사용 설정하고, 메시지를 순서대로 확인합니다. |