잡큐 - Gearman and Lambda (1) - Gearman
잡큐 - Gearman and Lambda (1) - Gearman
0. 잡큐를 왜 쓸까?
- 분산 처리.
- 빅데이터 처리.
- 본인 서버가 있으면 기어맨! AWS 유저라면 Lambda
- 예1) 동영상 인코딩
- 파일을 서버에 올리고 그걸 다시 인코딩프로세스로 넘길떄
- 1명이 올리면 총 11초
- 여러사람이라고 가정하면?
- n명이 올린거니까 n개 프로세스 동작...... 서버 사망 위험.
- 예2) 데이터 처리
- 1개 데이터 1개 워커 - 처리하는데 10초
- 1000개 데이터 5개 워커면 10 * 1000 / 5
- 워커만 늘려주면 무한 확장가능
1. 기어맨 설치.
- sudo yum install uuid-devel libuuid libuuid-devel uuid boost-devel libevent libevent-devel
- tar xvfz gearmand-1.1.7.tar.gz
cd gearmand-1.1.7
./configure
make -j
make test
make install
- http://gearman.org/getting-started/
- apt-get install gearman-job-server
2. 기어맨 사용. (NODEJS 이용)
- 워커
var hostname = "localhost"; var port = 4730; var gearmanode = require('gearmanode'); var worker = gearmanode.worker({ servers: [{ host: hostname, port: port }] }); worker.addFunction("gearman_test", function(job) { try { var payload = job.payload.toString(); var ret = JSON.parse(payload); console.log(ret); setTimeout(function() { job.workComplete("success_" + ret.id); }, 3000); } catch (e) { job.workComplete("Error"); } }); |
- 클라이언트
var hostname = "localhost"; var port = 4730; var gearmanode = require('gearmanode'); var client = gearmanode.client({ servers: [{ host: hostname, port: port }] }); var job = client.submitJob("gearman_test", JSON.stringify({ id: "529ca0dc847c397d5e000655" })); job.on("complete", function() { console.log(job.response); }); job.on("error", function() { console.log(job.Error); }); |
3. 후기
- 현재 프로젝트에 사용하고있는데 매우 잘됨.
- 클라이언트가 많아지면 상황에 따라 워커만 늘려주면 된다.
- 상황에 따라 급하면 클라우드서버 100대 늘려놓고 워커 실행하면 만사 OK
- 나는 Nodejs를 이용했지만 다른언어(Java Python PHP C..)등도 이용가능 하다.
- 물론 서로간의 통신으로도 이용해도 된다.