2015-01-24 1 views
0

Meteor에서 데이터 분석 도구를 구축 중이며 Meteor 서버 종료 및 재시작 문제가 발생합니다. 서버 측에서는 setInterval에 몇 가지 외부 API를 ping하고 아직 캡처하지 않은 새 데이터로 응답을 트리밍하고 해당 새 데이터에 대한 계산 배치를 실행 한 다음 Mongo에 계산 결과를 저장합니다. 외부 API로부터받은 새로운 데이터의 모든 덩어리마다 15 개의 다른 함수/계산이 필요하며 15 개의 출력은 Mongo에 개별 문서로 저장됩니다. 클라이언트 측 사용자는 15 가지 문서 중 하나를 구독 할 수 있으므로 원하는 방식으로 데이터를 볼 수 있습니다.Meteor Shutdown/Restart Interrupting 서버 측 기능 실행 중

new data is captured from the API as {A} and {A} is stored in Mongo 
| 
begin chain 
    | 
    function1 -> transforms {A} into {B} and stores {B} in Mongo 
    | 
    function2 -> transforms {A} into {C} and stores {C} in Mongo 
    | 
    ... 
    | 
    function15 -> transforms {A} into {P} and stores {P} in Mongo 
    | 
end chain  

문제는, 내가 유성를 종료하거나 (자동으로 서버를 다시 시작합니다) 서버에 새로운 코드를 배포 할 때, 루프 이러한 기능을 통해 반복이 중단되고 있다는 점이다. 기능 1-7이 성공적으로 실행되었다가 다시 실행되면 Meteor가 다시 시작되어 기능 8-15가 절대로 실행되지 않게됩니다 (또는 9-15가 실행되지 않는 동안 기능 8이 중단되는 경우). 이로 인해 내 문서가 더 이상 루프가 시작되기 전에 저장된 {A} 데이터와 동기화되지 않습니다.

이 위험을 어떻게 줄일 수 있습니까? Meteor에게이 프로세스가 완료 될 때까지 정상적으로 종료/대기하도록 알릴 수 있습니까? 감사!

답변

0

내가 정상 종료 들어 본 적이없는, 하나가하더라도, 나는 그것을 믿을 거라고 확실하지 않다가 ...

내가 할 줄은에 complete 플래그를 지정할 수있다 { A} function15 완료 될 때 트리거됩니다. 함수가 비동기 (또는 단지 비싸지 만 그럴 것 같지 않지만 ...)라고 생각하면 {A}의 _idcomplete 플래그로 {A}를 만들 때 {B} : {P}에 레코드를 만듭니다. .

complete이 false 인 배치 쿼리에 관계없이 함수를 실행하십시오.

0

현재 정상적인 종료 방법은 없습니다. 따라서 데이터가 일관성없는 상태로 저장되지 않도록 다른 방법을 찾아야합니다.

내 마음에 떠오르는 가장 쉬운 방법은 유성우 자동 재시작을 사용 중지하는 것입니다 (meteor --once).

그런 다음 응용 프로그램에 종료 모드를 추가하십시오.

종료 모드에서 응용 프로그램이 새 작업을 선택해서는 안되며 현재 작업중인 작업 만 완료하면됩니다. 현재 실행중인 기능을 중지하지 않는 중지 메소드가있는 meteor-synced-cron을 사용하면 쉽게 수행 할 수 있습니다.

작업 완료시 문서가 일관성없는 상태로 남아 있지 않아야합니다. 문서에서 여러 개의 작업을 수행하도록 할 수 있습니다. task1이 완료되면 문서는 항상 task2가 선택하는 상태가됩니다.

관련 문제