複製鏈接
請複製以下鏈接發送給好友

TaskQueue

鎖定
TaskQueue是SAE為開發者提供的分佈式任務隊列服務,用來以異步HTTP方式執行用户任務。
中文名
TaskQueue
類    型
分佈式任務隊列服務
對    象
開發者
執行方式
HTTP方式
特    點
高可靠性
所屬公司
SAE

TaskQueue簡介

用户需要先在在線管理平台創建Queue,然後向Queue Push任務,放入隊列的任務隨即即會執行。TaskQueue的任務的執行是以HTTP方式執行的,真正執行的是用户在App中的PHP代碼,所以最長執行時間和HTTP頁面執行時間相同。TaskQueue服務是分佈式環境部署的,具有高可靠性,每個worker相互隔離,並且主動負責任務執行。
Queue分為順序隊列和併發隊列,順序隊列的任務順序執行,而併發隊列中的任務則以並行的方式執行。用户還可以為每個Queue指定error callback url,當每個任務執行失敗時,TaskQueue自動會調用error callback url通知開發者。 [1] 
特別注意:
TaskQueue的任務的最長時間不得超過30秒
併發隊列不保證任務的有序性
所有隊列類型都有最大長度,請勿使隊列長期阻塞
所有APP創建TaskQueue總數<=10
TaskQueue的任務必須使用當前應用地址。

TaskQueue應用場景

TaskQueue服務主要提供針對http方式的異步任務執行,如開發者想給1000個用户發送微博,如果寫成:
for($i=0;$i<1000;$i++)
send_weibo();
很容易造成頁面超時,因為發送任務均為同步執行。而如果使用TaskQueue則不會超時,如寫成:
$array=array();
for($i=0;$i<1000;$i++)
$array[]=array('url'=>"http://", "postdata"=>user[$i]);
$queue->addTask($限制與配額
SAE設置服務限制和配額的目的是為了防止個別用户攻擊和濫用,從而在公有云計算平台上保證絕大多數開發者的正常使用.
1、 服務限制和配額設定是在門户網站新浪自身長期運維的基礎上經過嚴格計算得出的,所以正常使用一般不會出現問題。經過SAE 實際統計,99%的應用不會受到任何影響
2、當您發現您的某項服務超過限制或者超配時,請先閲讀相關文檔確認限制和配額的具體數值,再檢查自己的程序是否存在使用不當的情況,如果仍然解決不了,可以和SAE官方聯繫。

TaskQueue服務限制

單任務超時限制300秒
單用户創建的最大隊列數10
注意:由於TaskQueue服務是回調HTTP服務,所以會受到Runtime內核的限制。
分鐘配額
服務請求數cpu時間流入帶寬流出帶寬
TaskQueue20,000=>40,00060s=>100s10MB=>20M10MB=>20M

TaskQueue調用方式

例子:
appname: saetest
appversion: 1
創建queue
使用TaskQueue服務執行,開發者需要登錄在線管理平台,並進入服務管理=>TaskQueue,先創建隊列。TaskQueue的隊列分成兩大類,順序隊列和併發隊列:
一些概念
順序隊列:併發度為1,以保證任務可以按照進入隊列的先後順序依次執行
併發隊列:併發度>1,進入隊列的任務將按併發度並行執行,不保證嚴格有序
併發度:負責處理該隊列的worker數量,worker越多處理的越快
worker:負責處理任務,並執行Web請求
最大長度:當隊列worker處理較慢,隊列發生阻塞時,允許隊列的最大長度,當隊列達到最大長度時,新的任務將不能進入隊列,直到有舊任務從隊列中消費出去為止
任務:TaskQueue只支持web任務,任務的執行可以用GET或者POST方式,用户負責對格式做拼裝和解析
隊列屬性還有一個“失敗回調URL”,指的是:當該任務執行失敗時,回調的URL地址,如果用户制定了該地址,SAE會將原請求的url上增加原請求地址後原封不動再發送給回調URL,如果原請求為POST方式,則post段內容不變。
用户可以根據自身的需要創建不同屬性的隊列,如果對順序性要求強烈,可以選擇順序隊列,如果對處理速度要求強烈,可以選擇併發大的併發隊列;如果任務執行較慢,可能發生擁堵,則最好選擇隊列最大長度較大的隊列。
參考資料