2014-02-13 9 views
1

내 Google App Engine Go 애플리케이션에서 5 ~ 10 초마다 작업을 수행해야합니다. 표준 Cron을 사용하면 작동하지 않을 것입니다. 매분 만 작업을 예약 할 수 있기 때문입니다. 마찬가지로, 같은 스레드에서자는 것은 최선의 선택이 아닐 수도 있습니다. 내가 아는 한, 이러한 작업을 수행하려면 일부 백엔드 인스턴스를 사용해야합니다.GAE Golang - X 초마다 작업을 수행하도록 백엔드를 구성하는 방법은 무엇입니까?

어떻게 이러한 작업을시기 적절하고 리소스 효율적인 방식으로 처리하도록 응용 프로그램을 구성합니까? 백엔드를 24 시간 연중 무휴로 실행하고 무언가를해야 할 때까지 눈금을 매기거나, 작업을 수행하고 5 ~ 10 초 내에 다른 작업을 실행하도록 일정을 잡는 좀 더 효율적인 방법이 있습니까?

+1

time.Ticker https://gobyexample.com/tickers – elithrar

답변

2

이 질문은 처리 효율성과 서비스 품질 (타이밍 정확도) 사이의 긴장감을 강조합니다. 가장 효율적인 방법은 지연 또는 ETA 옵션을 사용하는 Task Queue (푸시 대기열 스타일)이지만 API은 정확성에 대한 서비스 수준 계약을 제공하지 않습니다. 가장 정확한 접근 방식은 24/7 백엔드이지만, 오버 헤드는 훨씬 높습니다. [편집 - AppEngine은 가동 시간을 보장하지 않습니다.]

Java 기반 푸시 대기열에 대한 경험으로는 예약 된 시간보다 2 초 이내에 90 % 이상의 작업이 실행되고 1 % 미만의 작업은 10 초 이상 시작됩니다. 어떤 일도 조기에 실행되지 않습니다.

편집 - Zig은 경험으로 지적했듯이 AppEngine은 언제든지 백엔드를 종료 할 수 있으며 다시 시작할 수있는 자동 방법이 없습니다. 따라서 백엔드의 신속성은 예측할 수없는 중단 시간의 주문에 의해 손상됩니다.

요약하면 작업 대기열은 효율적이고 신뢰할 수 있지만 비용이 적게 들고 안정성이 떨어지는 백엔드보다시기 적절하지 않습니다. 대부분의 경우 백엔드가 아닌 작업 대기열을 사용하십시오.

+0

운이 좋다면 백엔드가 최대 15 분 동안 실행되기 때문에 백엔드 솔루션이 파산합니다. Google은 아무런 이유없이 백엔드를 다운시킬 것이므로 cron이나 다른 것이 필요할 것입니다. 다시 시작하십시오. –

+0

백엔드는 [Backends Go API 개요] (https://developers.google.com/appengine/docs/go/backends/)에 따라 이론적으로 "무기한"및 "많은 시간"실행할 수 있지만 작업 대기열은 여전히 ​​권장됩니다 타이밍 요구 사항은 매우 엄격합니다. –

+0

네, 이론적으로 말입니다. 너는 그 (것)들을 시도 했는가? 필자는 결코 내 백엔드 중 하나가 30 분 이상 계속 켜져있는 것을 본 적이 없으며 Google은 이유없이 중지합니다. 백엔드는 문서화되어 있습니다 (백엔드는 언제든지 종료 메시지를받을 수 있음). 따라서 백엔드는 어느 시점에서든 중단을 처리 할 수 ​​있어야하며 다른 것을 다시 시작하여 준비해야합니다. –

관련 문제