Google App Engine에서 장기 실행 작업 관리

튀김

API와 일부 장기 실행 작업을 실행하는 작업자로 구성된 Google App Engine (Python)에서 실험용 애플리케이션을 실행하고 있습니다.

API는 클라우드 엔드 포인트가있는 표준 모듈이고 작업자는 ManagedVM 모듈입니다.

사용자는 풀 큐에 태스크로 넣는 데이터베이스에 태스크를 작성합니다. 작업자는 해당 작업을 가져와 임대를 연장하여 무한히 실행합니다. 작업자는 또한 데이터베이스에서 작업 상태 (예 : "실행 중"또는 "오류")를 설정합니다.

개 상호 작용의 시퀀스 다이어그램

목표는 사용자가 다시 중지 할 때까지 작업을 영원히 실행하는 것입니다. 상태를 "중지"로 설정하고 작업자에서 처리기를 호출하여 작업을 중지함으로써이를 구현했습니다 (workerUrl은 작업 모델에 저장 됨). 그러면 작업자는 상태를 "중지됨"으로 설정하고 임대 한 작업을 삭제합니다.

이것은 지금까지 몇 가지 사소한 문제로 작동합니다 (예 : 작업을 두 번 배치). 하지만이 문제를 처리하는 더 나은 방법이 있는지 궁금합니다. 기본적으로 문제는 원격 작업자 실행을 데이터베이스 모델과 동기화하는 방법입니다.

또한 응용 프로그램을 중지하면 작업이 상태에 따라 대기열에 다시 넣어야한다는 문제가 있습니다 (의도적으로 중지 될 수 있음). 라이브 서버에서는 앱이 기본적으로 멈추지 않기 때문에 큰 문제가 아니지만 dev-server에서는 그렇습니다. 크론 작업에 적합할까요?

업데이트 1 :

작업에 대한 정보는 실제로 데이터베이스에 저장됩니다. 큐의 작업에는 데이터베이스에있는 모델의 ID가 포함되어 있습니다. 그림에서 상태는 API에서 업데이트됩니다.

작업자 (MVM)와 API 간의 통신은 작업자 측에서 Python 클라이언트를 사용하는 Cloud Endpoints를 통해 이루어집니다. 이것은 매우 안정적으로 작동합니다.

중복 된 작업을 피하기 위해 작업 이름을 사용해야하는 것은 사실입니다. 내가 만난 유일한 문제는 같은 이름을 꽤 오랫동안 재사용 할 수 없다는 사실 이었기 때문에 타임 스탬프를 포함하여 몇 가지 작업 이름을 알아 내야했습니다.

일부 데이터베이스 전용 접근 방식보다 작업 대기열을 선택한 이유는 함께 제공되는 장애 조치 메커니즘 때문입니다. 내 작업자가 실패 할 가능성이 높으므로 다른 작업자가 작업을 픽업합니다. 또한 데이터베이스 호출과 API 호출을 줄입니다.

나는 일종의 명령 모델을 갖기 위해 자체 모델에서 "작업 상태"를 리팩토링 할 것이라고 생각합니다. 이것은 또한 작업에 대한 로그 역할을하므로 실행 수준에서 발생한 일을 볼 수 있습니다. 작업 대기열과 함께 작동 할 수도 있습니다. 그렇지 않은 경우 대기열을 제거 할 수 있는지 확인할 수 있습니다.

댄 샌더슨

작업자와 API 프런트 엔드가 스토리지를 공유하기를 원하는 것처럼 들리며 솔루션은 작업 대기열을 해당 스토리지로 사용하는 것입니다. 작업자에서 Cloud Datastore의 REST API를 사용하는 것이 더 좋습니다. 여전히 pull 큐를 사용하여 작업을 시작하고 (동일한 작업을 여러 작업자에게 임대하지 않도록) 해당 데이터 저장소 레코드를 사용하여 API 프런트 엔드와 작업자간에 업데이트를 전달할 수 있습니다. 예를 들어 API 프런트 엔드는 "중지"요청을 저장 한 다음 작업자가 실행될 때이를 폴링합니다.

App Engine의 API 프런트 엔드는 동일한 트랜잭션에서 데이터 저장소와 작업 대기열 모두에 커밋 할 수 있습니다. 이를 통해 공유 레코드 및 작업을보다 강력하게 설정할 수 있습니다.

중복 작업을 방지하려면 작업 이름을 고려하십시오. 작업에 이름을 할당하여 동일한 이름으로 두 작업이 생성되지 않도록 할 수 있습니다.

데이터 저장소를 공유하는 경우 개발 중에 GAE API 프런트 엔드 및 관리 형 VM 작업자 백엔드를 가장 잘 설정하는 방법을 잘 모르겠습니다. 둘 다 Datastore REST API와 개발 별 프로젝트를 사용해야 할 수 있으며 API 프런트 엔드에는 '개발 서버가 REST를 사용하고 기본 데이터 저장소 API를 사용하는 경우'래퍼가 필요합니다. (더 나은 방법이 있다면 알고있는 것이 즐겁습니다. 아직 관리 형 VM을 처음 사용합니다.) 귀하의 질문에 개발자 서버는 요청하지 않는 한 실행 사이에 자체 로컬 시뮬레이션 데이터 저장소를 유지한다고 덧붙일 것입니다. 실행간에 작업자 상태를 유지하는 데 도움이 될 수 있습니다.

작업 대기열에 작업을 남겨두고 임대를 무기한 연장하는 기술은 여러 작업자가 동일한 작업을 수행하는 것을 피하면서 새로운 작업자가 중단 된 작업을 선택할 수 있도록하기위한 것이라고 가정합니다. 무한한 작업으로 데이터 저장소를 기반으로 유사한 메커니즘을 구축하고 연결 유지 프로세스를 사용하여 필요에 따라 작업을 다시 시작할 수 있습니다. 이것이 훨씬 낫다고 주장하기는 어렵지만 개발 환경 문제를 단순화 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

DataStore Google App Engine에서 IN 쿼리 실행

분류에서Dev

Google App Engine에서 Datastore 쿼리 실행

분류에서Dev

JS (Node.js)에서 동시에 여러 장기 실행 작업 관리

분류에서Dev

Google App Engine taskqueue 내에서 작업을 실행할 수 있습니까?

분류에서Dev

App Engine에서 10 분마다 실행할 자동 정기 작업 만들기

분류에서Dev

App Engine에서 10 분마다 실행할 자동 정기 작업 만들기

분류에서Dev

google-app-engine이 Cron 작업 실행에 실패하고 ImportError : No module named gcloud

분류에서Dev

Google App Engine에서 10 분 이상 실행되는 작업을 예약하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

ASP.NET Web Forms에서 장기 실행 작업을 관리하기위한 전략

분류에서Dev

Google App Engine deferred.defer 작업이 실행되지 않음

분류에서Dev

Google App Engine 작업 대기열 실패에 대한 알림을받는 방법

분류에서Dev

Google App Engine 작업 대기열 실패에 대한 알림을받는 방법

분류에서Dev

클라우드 기능으로 Google 장기 실행 작업에서 비동기 응답을 처리하는 가장 좋은 방법

분류에서Dev

장기 실행 작업 node.js 관리

분류에서Dev

IN 기준은 단일 값 데이터 저장소 쿼리에서만 작동합니다.-Google App Engine

분류에서Dev

Google App Engine 관리 보안은 'www'별칭에서만 작동합니다.

분류에서Dev

셀러리로 다른 정기 작업에서 작업 실행

분류에서Dev

RxJava로 장기 실행 작업 처리

분류에서Dev

작업 관리자는 Windows 10에서 기본적으로 관리자로 실행됩니까?

분류에서Dev

실행중인 Google App Engine 작업 대기열 작업의 진행 상황을 표시하는 방법은 무엇입니까?

분류에서Dev

GCP 클라우드 실행에서 장기 실행 작업

분류에서Dev

Google Application Engine 크론 작업 실행

분류에서Dev

Google Dataflow에서 단일 작업 실행

분류에서Dev

컨테이너 관리 환경에서 Spring을 이용한 비동기 작업 실행

분류에서Dev

Google App Engine에서 CSV 파일 업로드 및 읽기

분류에서Dev

Google App Engine의 Django 관리자에서 인라인 사용자 프로필을 사용한 이상한 동작

분류에서Dev

Google App Engine (PHP Flex)에서 금지 된 관리자 인증

분류에서Dev

Google App Engine Datastore에서 대규모 쿼리 수행

분류에서Dev

Google App Engine에서 1 시간 45 분 동안 크론 작업을 실행하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    DataStore Google App Engine에서 IN 쿼리 실행

  2. 2

    Google App Engine에서 Datastore 쿼리 실행

  3. 3

    JS (Node.js)에서 동시에 여러 장기 실행 작업 관리

  4. 4

    Google App Engine taskqueue 내에서 작업을 실행할 수 있습니까?

  5. 5

    App Engine에서 10 분마다 실행할 자동 정기 작업 만들기

  6. 6

    App Engine에서 10 분마다 실행할 자동 정기 작업 만들기

  7. 7

    google-app-engine이 Cron 작업 실행에 실패하고 ImportError : No module named gcloud

  8. 8

    Google App Engine에서 10 분 이상 실행되는 작업을 예약하는 가장 좋은 방법은 무엇입니까?

  9. 9

    ASP.NET Web Forms에서 장기 실행 작업을 관리하기위한 전략

  10. 10

    Google App Engine deferred.defer 작업이 실행되지 않음

  11. 11

    Google App Engine 작업 대기열 실패에 대한 알림을받는 방법

  12. 12

    Google App Engine 작업 대기열 실패에 대한 알림을받는 방법

  13. 13

    클라우드 기능으로 Google 장기 실행 작업에서 비동기 응답을 처리하는 가장 좋은 방법

  14. 14

    장기 실행 작업 node.js 관리

  15. 15

    IN 기준은 단일 값 데이터 저장소 쿼리에서만 작동합니다.-Google App Engine

  16. 16

    Google App Engine 관리 보안은 'www'별칭에서만 작동합니다.

  17. 17

    셀러리로 다른 정기 작업에서 작업 실행

  18. 18

    RxJava로 장기 실행 작업 처리

  19. 19

    작업 관리자는 Windows 10에서 기본적으로 관리자로 실행됩니까?

  20. 20

    실행중인 Google App Engine 작업 대기열 작업의 진행 상황을 표시하는 방법은 무엇입니까?

  21. 21

    GCP 클라우드 실행에서 장기 실행 작업

  22. 22

    Google Application Engine 크론 작업 실행

  23. 23

    Google Dataflow에서 단일 작업 실행

  24. 24

    컨테이너 관리 환경에서 Spring을 이용한 비동기 작업 실행

  25. 25

    Google App Engine에서 CSV 파일 업로드 및 읽기

  26. 26

    Google App Engine의 Django 관리자에서 인라인 사용자 프로필을 사용한 이상한 동작

  27. 27

    Google App Engine (PHP Flex)에서 금지 된 관리자 인증

  28. 28

    Google App Engine Datastore에서 대규모 쿼리 수행

  29. 29

    Google App Engine에서 1 시간 45 분 동안 크론 작업을 실행하려면 어떻게해야합니까?

뜨겁다태그

보관