복붙노트

[REDIS] 어떻게에게 Heroku에 Node.js를 사용하여 웹과 노동자 동력계를 전달하는?

REDIS

어떻게에게 Heroku에 Node.js를 사용하여 웹과 노동자 동력계를 전달하는?

웹 동력계는 HTTP 요청을 처리 할 수 ​​있습니다

웹 동력계 그들을 처리하면서 노동자 동력계는 그것에서 작업을 처리 할 수 ​​있습니다.

하지만 서로 통신하기 위해 웹 동력계와 노동자 동력계를 만드는 방법을 알고하지 않습니다.

예를 들어, 나는 웹 동력계에 의한 HTTP 요청을 수신 할

, 근무 동력계로 보내

해당 작업을 처리하고 웹 동력계에 결과를 다시 보내

웹에 결과를 보여줍니다.

이 Node.js를에 수 있습니까? (RabbitMQ 또는 쿠에 또는 등 포함)?

나는 Heroku가 문서에서 예를 찾을 수 없습니다

또는한다 나는 웹 동력계의 모든 코드를 구현하는 유일한 웹 동력계 스케일링?

해결법

  1. ==============================

    1.백그라운드 작업 및 대기열에 높은 수준의 기사에서 알 수 있듯이, 웹 동력계는 중간 메커니즘 (종종 큐)를 통해 작업자 동력계와 통신해야합니다.

    백그라운드 작업 및 대기열에 높은 수준의 기사에서 알 수 있듯이, 웹 동력계는 중간 메커니즘 (종종 큐)를 통해 작업자 동력계와 통신해야합니다.

    당신이 일반적인 접근 방식을 따라 할 바라고 같은 소리 무엇을 달성하기 :

    마찬가지로 지금까지 실제 구현이가는대로 나는 Node.js를 최고의 라이브러리와도 익숙하지 해요,하지만 함께이 과정을 접착제 구성 요소는 추가 기능으로 Heroku가에서 사용할 수 있습니다.

    큐 : AMQP는 잘 지원 큐 프로토콜과 CloudAMQP의 추가 기능은 웹과 노동자 동력계 사이의 메시지 큐 역할을 할 수 있습니다.

    상태를 공유 : 당신은 포스트 그레스 중 하나가 애드온 처리되는 작업의 상태 또는 Memcache를 나 레디 스 등 더 성능이 좋은 것을 공유하는 데 사용할 수 있습니다.

    그래서, 요약, 당신에게 Heroku에 동력계 간의 통신에 구성 요소를 추가 중간을 사용해야합니다. 이 방법은 좀 더 기술을 포함하지만, 결과는 적절하게 분리하고 확장 가능한 아키텍처입니다.

  2. ==============================

    2.당신이 자신 있음을 구축해야 할 것이다, 그래서 내가 말할 수있는 건, Heroku가 당신을 위해 의사 소통하는 방법을 제공하지 않습니다. 노드를 사용하여 다른 프로세스와 통신하기 위해, 당신은 아마 프로세스의 표준 입력 (stdin) 인 / 아웃 처리해야합니다 / ERR 수동으로이 같은 :

    당신이 자신 있음을 구축해야 할 것이다, 그래서 내가 말할 수있는 건, Heroku가 당신을 위해 의사 소통하는 방법을 제공하지 않습니다. 노드를 사용하여 다른 프로세스와 통신하기 위해, 당신은 아마 프로세스의 표준 입력 (stdin) 인 / 아웃 처리해야합니다 / ERR 수동으로이 같은 :

    var attachToProcess = function(pid) {
        return {
            stdin: fs.createWriteStream('/proc/' + pid + '/fd/0'),
            stdout: fs.createReadStream('/proc/' + pid + '/fd/1'),
            stderr: fs.createReadStream('/proc/' + pid + '/fd/2')
        };
    };
    
    var pid = fs.readFile('/path/to/worker.pid', 'utf8', function(err, pid) {
        if (err) {throw err;}
        var worker = attachToProcess(Number(pid));
        worker.stdin.write(...);
    });
    

    그런 다음 작업자 프로세스에서 해당 PID 파일의 PID를 저장해야합니다 :

    fs.writeFile('/path/to/worker.pid', process.pid, function(err) {
        if (err) {throw err;}
    });
    

    그것은 가능성이 몇 가지 작업을하고 그 위에 구축,하지만 기본적인 아이디어는 분명하다 생각합니다, 그래서 사실,이 중 하나를 테스트하지 않았습니다.

    난 그냥 당신은뿐만 아니라 "레디 스"와 함께이 태그, 그리고 내가 node_redis 추가 정보에 설명 된대로 당신은 또한 다양한 프로세스 사이의 통신 레디 스 펍 / 하위를 사용할 수있는 추가해야한다고 생각 것으로 나타났습니다.

  3. from https://stackoverflow.com/questions/11429774/how-to-communicate-web-and-worker-dynos-with-node-js-on-heroku by cc-by-sa and MIT license