2017-03-29 2 views
0

문제는 단일 사용자의 여러 동시 요청을 지원하도록 설계되지 않은 레거시 시스템과 통합 된 최신 웹 응용 프로그램이 있다는 것입니다. 기본적으로 레거시 시스템은 단일 사용자로부터 한 번에 하나씩 만 처리 할 수있는 특정 유형의 요청이 있습니다. 여러 사용자가 여러 동시 요청을 처리 할 수 ​​있지만 기술적 인 이유 때문에 단일 사용자가 여러 요청을 처리 할 수 ​​없습니다. 이러한 상황에서 사용자의 첫 번째 요청은 성공적으로 완료되지만 첫 번째 요청이 실행되는 동안 들어오는 동일한 사용자의 후속 요청은 모두 실패합니다.사용자 당 단일 스레드 요청에 RabbitMQ (또는 유사한 메시지 대기열 시스템)을 사용할 수 있습니까?

Google 애플리케이션은 멀티 탭/멀티 브라우저에 친숙하며 여러 앱이 있다는 사실 때문에 사용자가 이러한 유형의 요청 중 하나 이상을 갖는 바람을 피울 수있는 특정 시나리오가 있습니다. 동시에 레거시 시스템으로 전송됩니다.

나는 RabbitMQ와 같은 것이 레거시 시스템 앞에 위치하고 사용자/IP별로 단일 스레드 요청을 활용할 수 있는지 판단하려고합니다. 웹 응용 프로그램이 모든 요청을 MQ에 보내고 사용자 별 대기열에 쌓여 한 번에 하나씩 레거시 시스템으로 전달된다는 생각이 들었습니다.

잠재적 인 대기열 수에 대한 우려가 있을지 모르겠다. 약 4,000 명의 사용자 기반이있다.

우리는 웹 응용 프로그램에서 개별적으로이 문제를 해결할 수 있지만 여러 응용 프로그램을 통해 논리가 중복되므로 두 가지 다른 응용 프로그램이 동시 요청을 실행할 수있는 잠재력을 여전히 갖고 있다고 생각합니다. .

의견을 보내 주시면 감사하겠습니다. 감사합니다.

답변

0

역동적으로 생성해야하는 큐에서 메시지를 수신하는 백엔드 작업자 프로세스가 있어야하므로 사용자 당 고유 큐가 작동하는지 잘 모르겠습니다.

다음은 하나의 옵션이지만 하나의 백엔드 프로세스가 모든 요청을 순차적으로 처리하므로 성능 병목 현상이 발생할 수 있습니다. 여러 작업자 프로세스를 사용할 수 있지만 특정 순서의 작업이 필요한 응용 프로그램의 경우 경쟁 조건이 발생하기 전에 완료했는지 여부는 알 수 없습니다.

모든 사용자 (모든 사용자)의 트랜잭션을 단일 대기열에 넣고 백엔드 프로세스가 대기열에서 빠져 나와 요청을 처리하도록 할 수 있습니다. 요청이 처리 된 후 사용자에게 다시 응답해야하는 경우 작업자 프로세스는 올바른 사용자에게 응답 날짜를 다시 보내는 데 사용할 수있는 상관 ID가있는 별도의 대기열에 다시 응답 할 수 있습니다.

다음과 같은 흐름이 일어날 어디 ExpressJS 애플 리케이션과 함께 전에 이런 짓을했습니다

  1. 사용자/프로세스/아약스는
  2. 익스프레스는 request 개체에서 페이로드를 취하고로 전송 요청을 고유 한 correlationId (예 : UUID)이있는 RabbitMQ 대기열
  3. 익스프레스는, 백엔드 작업자 프로세스가 큐에서 항목을 당기는 correlationId
  4. 한편 인 키와 responseStore 객체의 response 객체 저장을합니다 몇 가지 작업을 수행 한 후 다른 응답에 메시지를 보냅니다 동일한 correlationId
  5. ExpressJS 어플리케이션으로 대기하면 응답 큐에 연결을 가지고 있으며,이 메시지를 수신하면 응답에서 correlationId를 취하고 responseStore 동일 correlationId에 저장된 response 개체 보인다. 그것을 발견하면, 해당 메시지에서 페이로드를 받아 이렇게하려면, 당신은 또한 함께 responseStoreresponse 객체의 생성 시간을 저장하는 메커니즘이 있어야 response.send(payload) 또는 response.json(payload)

같은 무언가를 response 개체. 그런 다음 백엔드 프로세스가 완료되는 데 문제가있는 경우 특정 시간 초과 후 responseStore을 검사하고 이전 응답 객체를 정리하는 별도의 프로세스를 마련하십시오. RabbitMQ와 RPC에 대한 추가 정보를 원하시면 여기를

봐 :이 도움이

https://www.rabbitmq.com/tutorials/tutorial-six-javascript.html

희망.

관련 문제