2013-08-16 3 views
9

PHP로 배치 프로세서를 작성할 때 (분명히 cron-ed가되어야 함), Gearman을 사용하고 처리 할 데이터를 저장하는 것의 실제적인 차이점은 무엇입니까? 레디 스?PHP 배치 프로세서를 작성할 때 Gearman vs. Redis

Gearman은 실시간으로 작업을 수행 할 수 있지만, PHP 코드는 주기적으로 만 실행되기 때문에 정기적으로 예약 된 명령을 사용하면 Redis와 비슷한 것으로 보입니다.

또한 Gearman을 사용하면 Gearman 라이브러리의 디스패치 수명주기에 바인딩하여 응용 프로그램에 불필요한 복잡성을 추가하는 것처럼 보입니다.

Gearman + PHP는 배치 프로세서가 지속적으로 실행되지 않는다는 점을 감안할 때 Redis + PHP보다 이점이 없다고 가정하는 것이 옳은가요?

+5

Gearman = batch processor; redis = 데이터 캐시; 기어맨! == redis; 분필 == 치즈; –

+0

음, Redis는 단순한 데이터 캐시 이상입니다. Redis 위에 분산 된 작업 서버를 구현하는 것은 가능하지만 그리 쉽지는 않습니다. –

+0

@ MarkBaker 내 쵸크의 노란색 분필이 치즈가 아니라는 것을 의미합니까? :-) – raffian

답변

17

Gearman은 분산 작업 서버이고 Redis는 분산 저장소입니다. 그래서 사과와 오렌지를 비교하는 것과 같습니다.

이제 Redis를 사용하여 Gearman과 유사한 기능을 구현할 수 있지만 (예를 들어 목록 데이터 유형을 기반으로 함) 직접 할 수있는 방법입니다. 원칙은 간단하지만 악마는 세부 사항에 있습니다.

최상의 Redis 분산 대기열 구현은 Ruby (Resque) 및 Python (Celery, RQ)을위한 것입니다. PHP에 대한 Resque의 포트가 있습니다 :

https://github.com/chrisboulton/php-resque

레디 스 기반 구현에 Gearman을 비교할 때 고려해야 할 중요한 사항이 있습니다

  • Gearman은 작업이 클라이언트에게 자신의 완료를 통지는, 동기식 또는 비동기식 일 수 있습니다. 특정 항목을 구현하지 않으면 Redis 대기열은 완료 알림없이 비동기 작업 만 지원합니다.

  • 브로커의 고 가용성. Gearman은 off-the-shelf 전략을 제안합니다. 레디 스는 그렇지 않습니다. 마스터 - 슬레이브 복제를 구성하고 Redis Sentinel을 사용할 수는 있지만 Redis HA는 간단한 문제가 아닙니다.

  • 지속성. Gearman은 메모리 내 대기열을 지원하지만 일부 영구 백엔드 (MySQL, Drizzle, sqlite, PostgreSQL)도 지원합니다. Redis는 다양한 지속성 옵션을 제안하지만 MySQL이나 PostgreSQL과 같은 트랜잭션 엔진만큼 신뢰성있는 옵션은 없습니다.

  • 수직 확장 성. Redis는 매우 효율적이지만 단일 스레드 프로세스입니다. Gearmand는 멀티 스레드 프로세스이며, 단일 프로세스를 고려할 때 더 잘 확장 될 수 있습니다.

Redis 기반 분산 작업 시스템을 구현하는 것은 재미 있고 흥미 롭지 만 신속하게 작업해야하는 경우 Gearman이 최선의 방법입니다.

+0

Redis는 비동기 모델을 기반으로하므로 매우 빠릅니다. –

3

디어의 답변 외에도 Gearman은 coalescion 기능을 제공 할 수 있습니다. 예를 들어 많은 클라이언트가 모두 작업을 완료하기 전에 모두 동일한 요청을 한 경우 모든 응답자에게 응답을 보낼 수 있습니다 . 위키 피 디아에서

는 :

Gearman을 클라이언트로 전송 작업에 유착을 수행합니다.둘 이상의 클라이언트가 동일한 블록이 전송되고 있음을 확인하거나 클라이언트가 보낸 고유 한 값을 사용하여 동일한 작업 본문에서 작업을 완료하도록 요청하면 하나의 작업자 만이 작업하도록 통합합니다. 익숙한. 캐시 적중 실패에 공통적 인 군대 문제를 피하기 위해 특별히이 작업을 수행합니다.

이렇게하면 Redis에서 구현하는 것이 훨씬 더 복잡해집니다.