2011-09-09 5 views
0

이것은 자바 기반 백엔드 시스템입니다. 먼저 기존 시스템에 대해 설명하겠습니다.순차 처리를 수행하는 방법

대기열에서 주문을 소비하는 주문 프로세서 시스템이 있습니다. 주문이 도착하면 item_id를 기준으로 항목 행에 대한 잠금을 먼저 가져 오는 결제 시스템이 호출됩니다. 대기열에 1000 개의 주문이 있으면 주문 처리기에서 주문을 처리하고 지불 프로세서를 계속 호출합니다.

주문 프로세서 및 지불 프로세서는 웹 서비스를 통해 통신하는 독립적 인 시스템입니다.

지불 프로세서에 동일한 항목에 대해 여러 개의 주문이있는 경우 LockAcquisition 오류로 처리가 실패하고 주문 처리기로 전달되어 나중에 실패한 주문을 나중에 지불 프로세서로 다시 보냅니다. 주문은 다음 24 시간에서 48 시간 이내에 어디서나 재 시도 될 수 있습니다.

이제이 논리를 개선해야합니다. 나는이 항목이 동일한 item id (lock이 풀릴 때 paymentProcessor를 호출)를 가진 주문에 대해 순차적으로 처리 할 수있는 방법을 찾아야한다.

주문 프로세서가 1000 개의 항목을 처리 중이며 여러 스레드가 처리를 수행 중일 수 있습니다. 각 주문에 대한 상품 ID를 알고 있습니다. 최근에 백엔드 개발로 옮겨 갔고 전문가로부터 가능한 최상의 방법으로 어떻게 수행 할 수 있는지에 대한 통찰력이 필요하다고 생각했습니다. 모든 포인터가 많이 감사하겠습니다.

미리 감사드립니다.

답변

1

아키텍처를 완전히 이해하지 못한 채로 좋은 조언을하는 것은 어렵습니다. 효율성을 희생시키면서 문제를 해결할 수있는 하나의 전략은 특정 발송 전략 (예 : 10 개의 스레드가있는 경우 모듈 ID 100 (또는 주문 ID의 해시)을 100으로 취하고 해당 스레드 번호로 디스패치 할 수 있습니다.

배포가 완전히 균등하지는 않으므로 문제가 해결 될 것이므로 스레드가 다소 활용도가 낮은 것을 알 수 있습니다.

해당 경로로 이동하는 경우 처리 스레드 생성/종료/중단을 올바르게 처리하도록주의하십시오.

관련 문제