Go에서 pull 큐 사용

이 페이지는 App Engine 표준 환경의 pull 큐를 간단히 소개합니다.

Push 큐 태스크는 큐의 구성에 따라 작업자 서비스로 전달됩니다. Pull 큐에서는 작업자 서비스가 큐에 작업을 요청해야 합니다. 큐는 작업자가 특정 기간 동안 태스크를 처리하도록 고유한 액세스를 허용하여 응답하며, 이를 임대라고 합니다.

애플리케이션이 태스크 큐 서비스에 태스크를 이전하면 작업자가 태스크 큐 서비스에서 태스크를 임대합니다.

또한 pull 큐를 사용하면 관련된 태스크를 태그로 그룹화하고 작업자가 특정 태그가 있는 여러 태스크를 한 번에 가져오도록 구성할 수 있습니다. 이 프로세스를 일괄 처리라고 합니다.

작업자가 임대 만료 전에 태스크를 처리할 수 없는 경우, 임대를 갱신하거나 그대로 만료시킬 수 있으며, 임대가 만료되면 다른 작업자가 태스크를 획득할 수 있습니다. 태스크와 관련된 처리가 완료되면 작업자는 태스크를 삭제해야 합니다.

Pull 큐를 사용하려면 push 큐에서 자동화되는 일부 기능을 처리하는 코드가 있어야 합니다.

작업자 조정
코드에서는 처리량을 토대로 작업자 수가 조정되어야 합니다. 코드에서 조정이 처리되지 않는 경우 처리할 태스크가 없으면 컴퓨팅 리소스가 낭비될 수 있습니다. 또한 처리할 태스크가 너무 많으면 지연 시간이 발생할 수 있습니다.
태스크 삭제
또한 코드에서 처리된 태스크가 명시적으로 삭제되어야 합니다. push 큐에서는 App Engine이 자동으로 태스크를 삭제합니다. 작업자가 pull 큐 태스크를 처리한 후에 삭제하지 않으면 다른 작업자가 태스크를 다시 처리합니다. 따라서 컴퓨팅 리소스가 낭비되며 태스크에 멱등성이 없는 경우 오류가 발생합니다.

queue.yaml이라는 구성 파일에 속성을 설정하면 App Engine 표준 환경에서 pull 큐가 생성됩니다.

pull 큐 워크플로

pull 큐의 태스크를 처리하는 작업자는 App Engine 표준 환경에서 실행되는 서비스 내에 정의되어야 합니다.

워크플로는 다음과 같습니다.

  1. queue.yaml을 사용하여 pull 큐를 만듭니다.
  2. 태스크를 만들고 큐에 추가합니다.
  3. 생성된 작업자가 TaskQueue를 사용하여 태스크를 임대합니다.
  4. App Engine이 임대 응답을 통해 작업자에게 태스크 데이터를 보냅니다.
  5. 작업자가 태스크를 처리합니다. 임대가 만료되기 전에 태스크를 실행할 수 없으면 작업자는 임대 기간을 수정할 수 있습니다. 임대가 만료되면 태스크는 다른 작업자에게 임대될 수 있습니다.
  6. 태스크가 성공적으로 처리되면 작업자가 태스크를 삭제합니다.

다음 단계