prosource

Node.js의 백그라운드 프로세스

probook 2023. 8. 11. 22:23
반응형

Node.js의 백그라운드 프로세스

NodeJS 응용 프로그램에서 백그라운드 프로세스를 처리하는 좋은 방법은 무엇입니까?

시나리오:사용자가 앱에 무언가를 올린 후 데이터를 크런치하고 외부 리소스에서 추가 데이터를 요청하는 등의 작업을 수행하고 싶습니다.이 모든 것은 시간이 많이 걸리기 때문에, 저는 그것을 req/res 루프에서 제외하기를 원합니다.작업을 신속하게 덤프할 수 있고 데몬 또는 태스크 러너가 항상 가장 오래된 작업을 가져와 처리할 수 있는 작업 대기열을 갖는 것이 이상적입니다.

RoR에서 저는 지연된 작업과 같은 것으로 그것을 했을 것입니다.이 API에 해당하는 노드는 무엇입니까?

서버와 동일한 프로세스로 실행되는 가벼운 것을 원한다면 Bull을 적극 추천합니다.큐를 세부적으로 제어할 수 있는 간단한 API가 있습니다.

Ruby의 Resque에 익숙하다면 Node-resque라는 노드 구현이 있습니다.

Bull 및 Node-resque는 모두 Node.js 작업자 대기열 중 어디에나 있는 Redis에 의해 지원됩니다.그들은 RoR의 지연된 작업을 수행할 수 있을 것이고, 그것은 당신이 원하는 특정 기능과 API 선호도의 문제입니다.

백그라운드 작업은 웹 서비스 작업과 직접 관련이 없으므로 동일한 프로세스에 있으면 안 됩니다.확장하면 백그라운드 작업의 메모리 사용량이 웹 서비스 성능에 영향을 미칩니다.하지만 필요에 따라 같은 코드 저장소에 저장할 수도 있습니다.

두 프로세스 간의 메시징에 대한 한 가지 좋은 선택은 메시지를 때때로 삭제하는 것이 괜찮다면 redis입니다."남겨진 메시지가 없음"을 원한다면 Rabbit와 같은 헤비급 브로커가 필요합니다.웹 서비스 프로세스는 게시할 수 있고 백그라운드 작업 프로세스는 구독할 수 있습니다.

두 프로세스는 공동 호스팅될 필요가 없으며, 사용하는 모든 프로세스가 별도의 VM, 도커 컨테이너에 있을 수 있습니다.이를 통해 큰 문제 없이 스케일아웃할 수 있습니다.

MongoDB를 사용하고 있다면 Agenda를 추천합니다.이렇게 하면 별도의 Redis 인스턴스가 실행되지 않으며 스케줄링, 큐잉 및 웹 UI와 같은 기능이 모두 제공됩니다.의제 UI는 선택 사항이며 물론 별도로 실행할 수 있습니다.

또한 필요한 경우 전체 백그라운드 처리 시스템을 교체할 수 있도록 응용 프로그램 로직과 큐잉/스케줄링 시스템 사이에 느슨하게 결합된 추상화를 설정하는 것이 좋습니다.즉, 응용프로그램/처리 로직을 가볍게 유지하기 위해 의제 작업 정의에서 최대한 멀리 두십시오.

작업 예약을 위해 Redis를 사용할 것을 제안합니다.다양한 데이터 구조를 갖추고 있어 사용 사례에 더 적합한 데이터를 언제든지 선택할 수 있습니다.

RoR과 DJ를 말씀하셨으니 사이드키크에 익숙하실 것 같습니다.node-sidekiq는 원하는 경우 작업 예약에 사용할 수 있지만 nodejs와 RoR을 통합하는 것이 주요 목적이기 때문에 차선의 imo입니다.

작업자 데몬화를 위해서는 PM2를 사용하는 것을 추천합니다. 널리 사용되고 활발하게 유지되고 있습니다.배포, 모니터링, 클러스터링 등과 같은 많은 문제를 해결하므로 과도한 작업이 발생하지 않도록 해야 합니다.

저는 비큐와 황소를 시도했고 결국 황소를 선택했습니다.저는 처음에 bee-queue b/c를 선택했습니다. 그것들의 예는 이해하기 쉽고 bull의 예는 약간 복잡합니다.비의 위키비 큐의 기원 또한 저에게 반향을 불러일으킵니다.그러나 벌의 문제는 <1> 문제 해결 시간이 매우 느리고 최근 업데이트가 10개월 전이라는 것입니다.저는 일을 일시 중지/취소하는 쉬운 방법을 찾을 수 없습니다.

반면에 Bull은 문제에 대응하여 코드를 자주 업데이트합니다.Node.js 작업 대기열 평가에서 황소의 약점은 "문제 해결 시간이 느리다"고 했지만, 제 경험은 그 반대입니다!

하지만 어쨌든 그들의 api는 비슷해서 하나에서 다른 하나로 전환하는 것은 꽤 쉽습니다.

적절한 Node.js 프레임워크를 사용하여 앱을 구축할 것을 제안합니다.

가장 강력하고 사용하기 쉬운 것은 Sails.js라고 생각합니다.

이것은 MVC 프레임워크이기 때문에 만약 당신이 ROR에서 개발하는 것에 익숙하다면, 당신은 그것이 매우 쉽다는 것을 알게 될 것입니다!

만약 당신이 그것을 사용한다면, 그것은 이미 강력한 (자바스크립트 용어로) 작업 관리자를 제공합니다.

new sails.cronJobs('0 01 01 * * 0', function () {
   sails.log.warn("START ListJob");
}, null, true, "Europe/Dublin");

더 많은 정보가 필요하면 주저하지 말고 연락하세요!

언급URL : https://stackoverflow.com/questions/31009340/background-processes-in-node-js

반응형