2017-11-29 10 views
0

NodeJS와 express를 사용하여 API를 빌드했는데 모두 정상적으로 작동했지만 최근에는 호출 수가 증가하여 성능/병목 현상이 발생하기 시작했습니다. 서버는 때때로 메모리/CPU 사용으로 인해 중단 될 수 있습니다.NodeJs API의 성능 향상

시나리오 :

  1. 내 API를 엔드 포인트에 cronjob에 발사가 매 시간마다.
  2. 모든 항목 (약 800-900)을 가져 오는 DB 호출 (MongoDB)
  3. 모든 항목을 반복하고 세부 정보 또는 자체 DB가 포함 된 타사 API를 호출하고 결과를 반환합니다.
  4. 그때 내 DB에 저장된 이전 결과에 결과를 일치
  5. 조건문은 내가에 시간 제한을 추가하려고했습니다

DB를 다음으로 이메일을 보내 업데이트됩니다 후 일치하면 루프마다 각 호출에 몇 초가 걸리므로이 문제는 사이트가 수천 개의 항목으로 확장되는 것입니다. 마지막 항목이 실행될 때까지 cronjob이 다시 실행됩니다.

위의 시나리오를 최적화하고 향후 병목 현상을 방지하고 서버에서 메모리/CPU 사용을 극대화 할 수있는 방법에 대한 조언을 찾고 있습니다.

+0

신청서에서 5 가지를 언급하셨습니다. 실제로 필요한지 알 수 없거나 이러한 단계를 필요로하지 않는 방법을 찾을 수 있기 때문에 단순화하거나 최적화 할 수 있는지 판단 할 수 없습니다. 또한 위에서 언급 한 단계에 대한 코드를 제공하지 않았으므로 성능 개선으로 이어질 코드 최적화를 권장 할 수 없습니다. 각 글 머리 기호에 관련 코드를 게시하는 것이 좋습니다 (여러 질문으로 나눌 수도 있음). 전체 응용 프로그램 자체의 경우 사용 사례를 설명하는 질문을 만들 수 있습니다. – kentor

+0

'process.nextTick' 또는'setImmediate'를 사용하여 큰 객체 집합을 반복하고 이벤트 루프를 차단할 수 있습니다. 50 개의 물체를 순환시켜야한다고 가정 해 봅시다. 요청에 응답하는 데 시간이 더 걸리지 만 이벤트 루프를 차단하지는 않습니다. 또한 노드 서버를 클러스터링하여 시스템에서 사용 가능한 모든 CPU 코어를 사용할 수 있습니다. 이것들은 각각 별도의 프로세스가 될 것이므로 단점을 가지고 있습니다. 그래서 각각의 프로세스는 자신의 메모리를 갖습니다. – Siggy

답변

0

현재 개별 항목에 대한 프로세스를 수행하고 있으며 일괄 처리해야하거나 매시간 모든 항목을 처리하는 대신 외부 변경 사항을 기반으로 업데이트를 트리거해야합니다.