2014-02-19 36 views
0

我正在使用Azure雲服務實現Web服務。該網站的服務需要...從Azure工作角色將結果返回給客戶端的最具可伸縮性的方法

  • 接受輸入數據
  • 輸入數據
  • 計算

的迴歸結果從我讀過運行潛在的冗長的計算,建議工作者角色託管計算,而Web角色處理HTTP請求/響應,並使用隊列在兩種類型的角色之間傳遞輸入數據。該體系結構允許擴展Web角色以滿足Web流量和/或員工角色日益增長的需求,以擴展並行處理結果。

我不確定是將計算結果傳回給將原始HTTP請求發送給Web角色的客戶端的最佳方式。在可伸縮性方面,提供額外的Web服務方法會更好嗎,客戶端可以調用它來返回結果(如果它們已經被處理),還是最好將結果作爲對原始請求的HTTP響應的一部分返回?

如果是後者,使用PHP來做這件事最直接的方法是什麼?

任何意見將不勝感激。

回答

2

這裏是你可以從Azure的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),所以Web角色可以訪問使用OperationId
  8. 同時client是輪詢GetOperationStatus的API( operationId)每隔1分鐘左右打一次電話。當任務完成並且結果爲Ready時,客戶端可以通過web role上的API端點呼叫if GetOperationStatus(operationId) == finished { GetOperationResults(operationId) }

在這裏,客戶端從來沒有直接與worker角色聯繫。因爲工作者角色應該運行後臺操作。這是通過消息(隊列,服務總線等)完成的。

+0

聽起來像一個很好的計劃。我會去實施它。遲來的感謝意見。 – w5m

相關問題