작업 대기열 개요

이 페이지에서는 작업 대기열의 정의, 사용 시기, 방법을 설명합니다. 작업 대기열을 사용하면 애플리케이션이 사용자 요청과 별도로 비동기적으로 작업이라는 일을 수행할 수 있습니다. 앱이 백그라운드에서 작업을 실행해야 하는 경우, 작업이 작업 대기열에 추가됩니다. 작업은 나중에 작업자 서비스에 의해 실행됩니다.

내보내기 대기열 및 가져오기 대기열

작업 대기열에는 내보내기가져오기라는 두 가지 유형이 있습니다. 작업 대기열 서비스가 작업 요청을 작업자 서비스로 전달하는 방식은 대기열마다 다릅니다.

내보내기 대기열은 App Engine 작업자 서비스에 HTTP 요청을 전달하여 작업을 실행하며, 이러한 요청을 안정적이고 일정한 속도로 보내고 작업을 안정적으로 실행합니다. 사용자는 작업이 대기열에서 전송되는 속도를 제어할 수 있으므로 작업자의 확장 동작과 비용을 제어할 수 있습니다.

작업은 App Engine 서비스를 대상으로 하는 요청으로 실행되므로 엄격한 기한이 적용됩니다. 자동 확장 서비스로 처리되는 작업은 10분 안에 완료되어야 합니다. 기본 및 수동 확장 서비스로 처리되는 작업은 최대 24시간 동안 실행될 수 있습니다.

가져오기 대기열은 작업을 전혀 보내지 않습니다. 대신 다른 작업자 서비스를 사용하여 대기열에서 작업을 자체적으로 '임대'합니다. 가져오기 대기열을 사용하면 작업이 처리되는 시기와 장소에 대해 더 많은 권한과 유연성을 얻는 대신 더 많은 프로세스를 관리해야 합니다. 작업이 임대되면 임대 작업자가 기한을 선언합니다. 기한이 도래하면 작업자는 작업을 완료하고 삭제해야 합니다. 그렇지 않으면 작업 대기열 서비스에서 다른 작업자가 작업을 임대하도록 허용합니다.

도움말: 경우에 따라 Google Cloud Pub/Sub는 가져오기 대기열의 훌륭한 대안입니다.

모든 작업 대기열 작업은 비동기 방식으로 수행됩니다. 작업을 만드는 애플리케이션이 작업을 대기열로 전송합니다. 원본 애플리케이션은 작업이 완료되었는지 또는 성공했는지에 대한 알림을 받지 않습니다.

작업자가 작업을 처리하지 못하면 작업 대기열 서비스가 재시도 메커니즘을 대기열에 제공하므로 제한된 횟수만큼 작업을 다시 시도할 수 있습니다.

활용 사례

내보내기 대기열

내보내기 대기열의 일반적인 사용 사례 중 하나는 '느린' 작업입니다. 소셜 네트워크 메시지 시스템을 예로 들어 보겠습니다. 사용자가 메시지를 보낼 때마다 네트워크는 보내는 사람의 팔로워를 업데이트해야 합니다. 이 작업에는 시간이 매우 오래 걸릴 수 있습니다. 내보내기 대기열을 사용할 경우, 애플리케이션은 각 메시지에 대한 작업이 도착하면 이를 대기열에 추가하여 처리를 위해 작업을 작업자 서비스에 발송할 수 있습니다. 작업자가 작업 요청을 받으면 보내는 사람의 팔로워 목록을 검색하여 각각의 DB를 업데이트할 수 있습니다. 각 데이터베이스 업데이트마다 다른 내보내기 작업을 대기열에 추가하면 작업자를 더 효율적으로 만들 수 있습니다.

내보내기 대기열의 또 다른 용도는 예약된 작업입니다. 광고 캠페인을 구현하는 애플리케이션을 상상해 보세요. 이메일 발송을 위해 작성된 작업 그룹을 내보내기 대기열에 추가하고 향후 지정된 시간까지 작업을 보류하라는 안내를 포함할 수 있습니다. 마감일이 되면 작업 대기열 서비스가 작업 실행 요청을 발행하기 시작합니다.

가져오기 대기열

효율적인 실행을 위해 일괄 작업을 수행해야 하는 경우 가져오기 대기열을 사용하면 효과적입니다. 한 가지 방법은 가져오기 작업에 태그를 부착하는 기능을 활용하는 것입니다. 작업자는 동일한 태그가 있는 작업 그룹을 임대할 수 있습니다. 대표적인 예로는 여러 플레이어와 그룹이 지속적으로 플레이하는 다양한 게임의 리더보드를 관리하는 앱이 있습니다. 새로운 최고 점수가 나올 때마다 앱에서 점수와 플레이어가 포함된 가져오기 작업을 대기열에 추가하고 게임 ID를 작업 태그로 사용할 수 있습니다. 작업자는 주기적으로 '깨어나' 동일한 게임 ID의 작업 그룹을 임대하고 리더보드를 업데이트합니다. 지정된 태그 값을 사용하여 작업을 명시적으로 임대하거나, 서비스에서 태그가 지정된 보낼 작업 그룹을 결정하도록 할 수 있습니다.

태그를 사용한 일괄 처리는 성능이 매우 강력합니다. 앱이 실행되는 동안 태그를 동적으로 생성할 수 있으므로, 작업자는 간편하게 새로운 게임 ID를 처리할 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

App Engine standard environment for Python 2