2017-03-23 2 views
2

저는 현재 15 분마다 자원 집약적 인 CRON을 실행하고있는 기존의 맞춤형 전자 상거래 PHP 애플리케이션을 만들고 있습니다.예정된 PHP 대체품

요점은 : 고객이 관심있는 제품에 대해 복잡한 필터를 설정하고 이러한 필터를 기반으로 이메일을 수신 할 수 있습니다. 매 15 분마다 실행되는 CRON은 마지막으로 실행 된 이후 나열된 모든 신제품을 확인하고 각 고객 필터와 비교합니다. 제품이 고객 필터와 일치하면 아마존 SES를 통해 이메일을 보냅니다.

지금까지이 방법은 잘 작동했지만 액티브 고객의 수가 급속히 증가함에 따라 CRON은 15 분마다 응용 프로그램의 눈에 띄는 성능 저하를 보이기 시작했습니다. 이는 1 ~ 2 분 동안 지속됩니다. 그것은 작동한다.

저는 제품을 나열 할 때마다 작업을 수행하는 것과 같이 서버에 부하를 분산시키는 데 도움이되는 다른 아이디어를 가지고 있었기 때문에 서버는 한 번에 여러 제품을 따라 잡을 필요가 없습니다.

이런 식으로 접근 할 때 일반적으로 가장 좋은 방법은 무엇입니까?

+0

나는 Cron이 매 3 시간마다 만 실행할 수 있도록 시스템 설정이 항상 특정 시간에 일괄 처리되도록 보내는 것을 제외하고는 비슷한 것을했습니다. – xlordt

+1

대기열 (예 : rabbitmq)을 사용하고 여러 서버에 부하를 분산시킵니다. – solarc

답변

0

내 권장 방법은 cron에서 메시지를 보낼 rabbitmq 대기열을 사용하는 것입니다. 그런 다음 메시지를 하나씩 가져 와서 이메일을 작성하여 고객에게 보내려는 고객 (대기열의 다른 쪽에서 대기하는 스크립트)을 설정하십시오. 이렇게하면 보낸 전자 메일의 양과 일치하도록 소비자 수를 조정할 수 있습니다. https://www.rabbitmq.com/tutorials/tutorial-one-php.html

0

메시지 큐가 완벽하게 잘 맞는 당신은 쉽게 enqueue 라이브러리로 사용할 수있다 : 큐 당신이 잘 알고 뭔가하지 경우, RabbitMQ 자습서를보십시오. 당신이 그것을 선택해야하는 이유에 그냥 몇 마디 : 간단한 하나 (파일 시스템)에서

  • 가 지원 a lot of transports 기업들 (RabbitMQ 또는 아마존 SQS)에.
  • 매우 강력한 bundle이 제공됩니다.
  • 가장 쉽게 사용할 수있는 최상위 추상화가 있습니다.
  • 많은 도움이 될만한 것들이 많이 있습니다.

cron 작업을 정의하는 대신 수퍼바이저 (또는 다른 프로세스 관리자)가 필요합니다. consume 명령을 실행하도록 구성해야합니다. 이것에 대한 자세한 내용은 doc.

메시지가 게시 될 때마다 메시지가 브로커에 의해 소비자에게 전달되고 처리됩니다.

RabbitMQ 브로커 사용을 제안합니다.