全部產品
Search
文件中心

Platform For AI:附錄:服務狀態代碼說明

更新時間:Jul 13, 2024

本文為您介紹訪問服務返回的狀態代碼的說明資訊。

狀態代碼

說明

200

服務正常返回。

400

Processor返回異常。

原因

  • 對於平台提供的通用Processor(例如Tensorflow或Pytorch),如果請求輸入格式有問題,導致服務端無法識別,則返回狀態代碼400。

  • 對於自訂Processor,如果代碼拋出異常,會在服務端返回狀態代碼400。

    說明

    您也可以在自訂Processor中返回任意自訂的狀態代碼。

404

找不到服務。

原因:服務名稱或服務要求的Endpoint使用不正確。

401

服務鑒權失敗。

原因:訪問服務時未指定Token或指定的Token資訊不正確。

處理方法

  1. 服務Token在服務部署時會自動產生。您也可以在服務初次部署時,通過在設定檔中增加Token欄位來指定固定Token值,在服務更新時Token值保持不變。

  2. 您可以在控制台的PAI EAS模型線上服務頁面,單擊目標服務操作列下的線上調試,查詢到服務訪問的Token;也可以通過eascmd desc service_name命令來擷取服務的Token資訊。

  3. 訪問服務。

    • 在使用curl命令進行服務測試時,您可以直接將Token值以HTTP Header的方式添加到請求中,例如:curl -H 'Authorization: NWMyN2UzNjBiZmI2YT***' http:// xxx.cn-shanghai.aliyuncs.com/api/predict/echo

    • 在使用SDK訪問服務時,調用對應的SetToken()函數即可,詳情請參見Java SDK使用說明

450

超出隊列長度丟棄請求。

原因:服務端的計算執行個體在接收到請求後,會先將請求放入隊列中進行排隊。當執行個體中的worker(worker數量預設為5,您可以在建立服務的JSON檔案中配置metadata.rpc.worker_threads欄位來調整worker數量)空閑時,會從隊列中擷取資料進行計算。當worker計算時間過長,導致隊列中請求堆積。當隊列打滿時(隊列長度預設為64,您可以在建立服務的JSON檔案中配置metadata.rpc.max_queue_size欄位來調整隊列長度),新來的請求會直接被拒絕,並返回狀態代碼450,來避免隊列過度堆積導致所有請求RT越來越高最終服務不可用。

說明

隊列限長在一定程度上也是一種限流保護,避免大流量導致服務雪崩。

處理方法

  • 當返回的狀態代碼有少量450時,因為服務端的執行個體是相互獨立的,您可以通過重試調度到其他相對閒置執行個體上,避免用戶端感知,但不能無限重試,否則限流的保護作用會失效。

  • 當Processor內部代碼卡住時,所有請求均返回狀態代碼450。當所有worker在處理請求時出現死結等情境,導致沒有worker從隊列中擷取資料進行處理,這種情境需要排查Processor代碼的Bug。

408

請求計算逾時。

原因:服務端為每個請求配置了預設的逾時時間(預設為5秒,您可以在建立服務的JSON檔案中配置metadata.rpc.keepalive欄位來調整逾時時間),當單個請求的處理時間長度超過metadata.rpc.keepalive欄位配置的值後,服務端會返回狀態代碼408,來中斷該請求的處理,並斷開該請求所在的TCP串連。

說明

單個請求的處理時間長度包含Processor的計算時間、請求接收網路資料包時間以及單個請求在隊列中排隊的時間。

499

用戶端主動中斷連線。

原因:當用戶端主動中斷連線時,用戶端不會接收到狀態代碼499,該串連上未處理完成的請求會在服務端記錄一個狀態代碼499。例如:在用戶端配置了HTTP逾時時間為30毫秒,服務端的處理延時為50毫秒,用戶端等待30毫秒後未擷取到返回結果時,會放棄該請求,並主動中斷連線,此時在服務端監控中,會出現狀態代碼499。

429

請求觸發限流。

原因EAS提供了基於QPS的限流功能,您可以在建立服務的JSON檔案中配置metadata.rpc.rate_limit欄位開啟該功能。開啟限流功能後,如果請求並發數超出了指定限制後,超出的部分請求會被丟棄並返回狀態代碼429。

503

服務不可用。

原因:通過網關訪問服務時,如果後端服務執行個體狀態全部為非Ready,則網關會返回狀態代碼503。

比較常見的一種情境是,服務部署完成後狀態為Running,且服務各執行個體狀態均為Ready,但發起請求後,服務端返回狀態代碼503。通常是因為異常請求觸發了代碼中的Bug,導致後端服務執行個體Crash,從而無法正常響應請求,此時網關會向用戶端返回狀態代碼503。