2013-10-24 3 views
1

현재 amazon 대기열 서비스와 같은 것을 사용하는 대기열 시스템 설정이 있습니다. 지금 저는 근로자가 퇴직하지 못하도록 관리자를 사용하고 있습니다.PHP 큐 오류 안전

500-2K reqs/초가 소요될 수있는 프런트 엔드 지점을 제공하려고 시도하고 큐를 통해 캡처 할 데이터가 필요합니다. 때로는 대기열 서비스 [https 기반]가 다운되며, 현재 동일한 데이터를 가져와 별도의 작업자 그룹에 전송하고 별도의 데이터베이스에 데이터를 저장하지만 주 테이블과 동일한 테이블 구조를 갖는 백업 대기열로 Beanstalkd를 실행 중입니다. db.

아이디어는 백업에서 데이터를 가져 와서 예상 실제 데이터와 비교하고 감사하면 차이가보고되고 예상 데이터 집합에 추가 될 가능성이 있습니다.

이 우리가 오는 데이터의 99.99 %를 캡처 내가 확인하려고으로이 문제에 대한 실용적인 접근 같지 않습니다.

작은 "시위"아래 당신에게 그림을 제공하기 위해.

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[beanstalkd] 
) 

Queue1 Worker sends data to DB1[used for reports] 
Queue2 Worker sends data to DB2[storage --expect to have all data] 

Audit Process compares data from DB2 to DB1 and reports the differences 
If differences captured, tries to add them to DB1 
+0

@GeraldSchneider의 차이를 볼 수 있습니다 었죠 무엇의 작은 그림이다 데이터베이스에 대기열에 데이터를 넣을 수 있다면 상당히 편리합니다. –

+0

PHP는 작은 규모에서만 작동합니다. 대규모로 나는 웹 프로그래밍의 대시로 프로그래밍 언어쪽으로 더 기대고있다. 대역폭 사용과 서버 스트레스를보다 관리하기 쉬운 상태로 유지하는 훨씬 우수한 언어가 있습니다. C++, C#, Java, .NET을 선택하십시오. – bobthyasian

+0

@bobthyasian 위의 디자인을 다른 언어로 구현한다고 가정 해 봅시다. php가 장기적으로 가장 좋은 언어는 아니지만 큐의 실패를 어떻게 처리하는지 알기 위해 노력하고 있습니다. –

답변

0

N.B의 의견을 받아 들여 다른 모델을 적용하기로 결정했습니다. 나는 1 차 대기열 서비스와 2 차 대기열 서비스를 가지고 있었다. 첫 번째 사람이 null 또는 나쁜 http 응답을 보낸다면 나는 그 메시지를 백업 대기열에 보낼 것이다. 대기열 작업자는 두 소스에서 모두 가져 와서 적절히 실행합니다.

은 여기가 왜 이런 일을 위해 충분 PHP는 않을 것이다 그래서 당신은 원래의 아이디어와 마지막 하나 ....

Endpoint A -- collects data(
    Queue1[amazon type queue] 
    Queue2[amazon2 type queue] 
) 

Queue1 Worker sends data to DB1[used for reports] 

If Queue1 fails, it auto sends data to Queue2, 
If Queue2 fails, it stores in database for later retrieval