2014-02-19 2 views
0

저는 Azure Cloud Services를 사용하여 웹 서비스를 구현하고 있습니다. 웹 서비스는 ...Azure 작업자 역할에서 결과를 클라이언트에 반환하는 가장 확장 가능한 방법

  • 는 입력 데이터 내가 읽은 바로는 계산

  • 반환 결과에 잠재적으로 긴 계산을 실행 입력 데이터를 받아 들일 필요가있다, 웹 역할이 HTTP 요청/응답을 처리하는 동안 작업자 역할이 계산을 호스트하고 두 유형의 역할간에 입력 데이터를 전달하는 데 큐가 사용되는 것이 좋습니다. 이 아키텍처를 사용하면 웹 트래픽 및/또는 작업자 역할의 증가하는 요구를 충족시키기 위해 웹 역할을 확장하여 결과를 병렬 처리 할 수 ​​있도록 확장 할 수 있습니다.

    원래 HTTP 요청을 웹 역할에 보낸 클라이언트에게 계산 된 결과를 다시 전달하는 가장 좋은 방법은 잘 모르겠습니다. 확장 성 측면에서 클라이언트가 결과를 반환하기 위해 호출 할 수있는 추가 웹 서비스 메서드를 제공하는 것이 좋습니다 (처리 된 경우). 또는 원래 요청에 대한 HTTP 응답의 일부로 결과를 반환하는 것이 더 낫습니까?

    후자의 경우, PHP를 사용하여이 작업을 수행하는 가장 간단한 방법은 무엇입니까?

    조언을 주시면 감사하겠습니다.

  • 답변

    2

    다음은 하늘빛의 API에서 빌릴 수있는 개념이다 : http://msdn.microsoft.com/en-us/library/windowsazure/ee460783.aspx

    1. Client은 계산을 위해 web role에 요청합니다.
    2. Web role이 작업의 GUID를 만듭니다.
    3. Web role Azure 저장소 큐에 요청을 추가합니다. & 서비스 버스는 대기중인 레코드에 GUID를 추가합니다.
    4. Web role은 응답 본문에 HTTP 201 Accepted 및 GUID가 OperationId 인 클라이언트에 응답합니다.
    5. 클라이언트가 web role에서 API 끝점을 폴링하여 해당 ID로 작업이 완료되었는지 확인합니다.
    6. Web role은 일부 테이블 스토리지 (db 또는 Azure 테이블)에 쿼리하여 해당 작업 레코드가 완료로 표시되는지 확인합니다. 대기열에서
    7. 한편 worker role pickes까지 작업은, 그것을 처리하고 완료되면, (테이블 스토리지에 결과를 다시 넣습니다 (또는 DB) 그래서 웹 역할은 OperationId
    8. 사용하여 액세스 할 수있는 한편 clientGetOperationStatus와 API 폴링이었다 operationId) 1 분마다 호출합니다. 작업이 완료되고 결과가 준비되면 고객은 web role에 API 끝점을 통해 if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }을 호출 할 수 있습니다.

    여기서 클라이언트는 작업자 역할과 직접 연락 한 적이 없습니다. 작업자 역할은 백그라운드 작업을 실행해야하기 때문입니다. 그리고 이것은 메시징 (대기열, 서비스 버스 등)을 통해 이루어집니다.

    +0

    좋은 계획처럼 들립니다. 나는 그것을 구현할 것이다. 입력에 감사드립니다. – w5m

    관련 문제