要求延遲時間和錯誤處理最佳做法

本頁說明如何運用最佳做法,在 Cloud Healthcare API 中縮短要求延遲時間及處理錯誤。規劃及設計系統架構時,請導入這些做法。

Google 提供服務水準協議 (SLA),定義 Cloud Healthcare API 服務的預期運作時間,以及用戶端如何處理錯誤。詳情請參閱《Cloud Healthcare 服務水準協議 (SLA)》。

實作重試邏輯和逾時

如要處理因要求失敗而導致的延遲和錯誤,請實作適當的重試邏輯和逾時。設定逾時時間長度時,請預留足夠時間執行下列操作:

  • 讓 Cloud Healthcare API 處理要求。
  • 判斷錯誤是源自服務還是用戶端。

部分錯誤可以重試,但其他錯誤無法重試,且會持續發生。舉例來說,如果要求資料格式不正確,伺服器會傳回 400 Bad Request 狀態碼。修正資料後,要求才會成功。

如要處理這些情況,您需要規劃最終錯誤狀態

如要進一步瞭解重試邏輯和逾時,請參閱「重新嘗試提出要求以解決要求失敗的錯誤」。

在多個層級處理錯誤

中介軟體與 Cloud Healthcare API 互動時,請在用戶端和中介軟體中實作重試邏輯和逾時。如果用戶端發生錯誤的次數超過重試次數上限,您必須能夠判斷錯誤是發生在用戶端、中介軟體,還是底層的 Cloud Healthcare API 服務。規劃最終錯誤狀態時,這一點尤其重要。

請考量下列情境:

  1. 中介軟體傳送要求時,會收到 Cloud Healthcare API 的 500 Internal Server Error 錯誤。
  2. 中介軟體層會再重試要求五次,達到上限後停止重試。
  3. 用戶端收到最終 500 Internal Server Error 錯誤。

請務必瞭解錯誤是源自 Cloud Healthcare API,而非中介軟體。為簡化偵錯程序,請在傳回給用戶端的錯誤中提供這項資訊。

下圖顯示中介軟體 Proxy 將用戶端要求轉送至 Cloud Healthcare API 時,收到 500 Internal Server Error 錯誤的情境。用戶端和 Proxy 都會實作錯誤處理和重試機制。

圖表:說明在用戶端/中介軟體/伺服器堆疊中處理錯誤的位置。
圖 1. 您需要在用戶端 Proxy 實作重試邏輯和逾時。

圖 1 顯示下列步驟:

  1. 用戶端透過中介層 Proxy 將有效要求傳送至 Cloud Healthcare API。
  2. Proxy 會將要求轉送至 Cloud Healthcare API。
  3. Cloud Healthcare API 會向 Proxy 傳回 500 Internal Server Error 錯誤。Proxy 會再重試要求五次,直到達到重試次數上限為止。
  4. Proxy 會將最終錯誤狀態 500 Internal Server Error 傳回給用戶端。

    根據稍早顯示的建議,您可以讓 Proxy 將下列錯誤傳回給用戶端,藉此偵錯最終錯誤狀態:

    Error with underlying FHIR store in Cloud Healthcare API after 5 retries: 500 Internal Server Error

    新增 Cloud Healthcare API 傳回的錯誤相關資訊。

有時,用戶端或 Proxy 會在超過重試次數上限後收到 500 Internal Server Error 錯誤,且無法再次重試。在這種情況下,可能需要人工介入,診斷錯誤是來自 Proxy 還是 Cloud Healthcare API。

選擇要重試的錯誤

系統架構而定,您可以重試某些錯誤,並忽略其他錯誤。以下列舉部分可重試的 Cloud Healthcare API 錯誤代碼:

  • 408 Request Timeout
  • 425 Too Early
  • 429 Too Many Requests
  • 500 Internal Server Error
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout

這些錯誤通常不會以相同頻率發生,有些可能永遠不會發生。

系統架構影響

系統架構會影響重試錯誤的方式和時間。

舉例來說,在直接的用戶端對伺服器架構中,如果用戶端從 Cloud Healthcare API 收到 401 UNAUTHENTICATED 錯誤,可以重新驗證並重試要求。

假設系統在用戶端和 Cloud Healthcare API 之間有中介層,如果用戶端已正確驗證,但驗證權杖過期導致問題,中介軟體就必須重新整理權杖,然後重試要求。

分析最終錯誤狀態後,您可以根據發現調整用戶端重試的錯誤。

規劃最終錯誤狀態

即使實作重試邏輯和逾時,用戶端或中介軟體仍可能會收到錯誤,直到重試次數用盡為止。重試和逾時次數用盡前傳回的最後一個錯誤,就是最終錯誤狀態。資料一致性錯誤可能會導致最終錯誤狀態。

有時,最終錯誤狀態需要人為介入。請嘗試導入解決方案,解決要求最終錯誤狀態的問題。否則,請記錄最終錯誤狀態,以便人工審查。

規劃如何處理最終錯誤狀態時,請考慮下列事項:

  • 是否有處理程序依附元件,如果 FHIR 交易或套裝組合無法順利完成,是否需要停止處理程序。
  • 如果許多虛擬機器 (VM) 執行個體開始永久失敗,用戶端必須回報失敗的要求。修正問題後,用戶端必須重試要求。
  • 監控、快訊系統和服務等級目標 (SLO) 是確保系統穩定性的必要條件。詳情請參閱「測試及監控」。

規劃延遲時間增加的情況

Cloud Healthcare API 是可擴充的高效能服務,但要求延遲時間仍可能因下列原因而有所不同:

  • 要求之間的小差異 (即使看似微不足道) 也可能導致額外的處理時間。
  • 類似的要求可能會有不同的延遲時間。 舉例來說,如果兩個類似的要求都會將記錄新增至資料儲存空間,但其中一個要求超過觸發額外工作的門檻 (例如分配更多儲存空間),兩者的延遲時間可能會有所不同。
  • Cloud Healthcare API 會同時處理多個要求。用戶端傳送要求的時間 (以秒為單位) 可能與 Cloud Healthcare API 負載高於平常的時間重疊。
  • 如果 Cloud Healthcare API 實體資源 (例如磁碟) 正在處理大量要求,就必須先完成佇列中的工作,才能處理其他要求。
  • 有時,Cloud Healthcare API 會在伺服器端重試錯誤,這可能會增加用戶端的延遲時間。
  • 在單一或多區域位置中,不同資料中心可能有多份資料副本。如果要求在多個資料中心之間轉送 (無論是原始要求或重試要求),延遲時間可能會增加。

使用百分位數延遲時間進行規劃

您可以分析要求的百分位數延遲,規劃延遲時間增加的情況。以下範例說明第 50 個百分位數的延遲時間第 99 個百分位數的延遲時間

  • 第 50 個百分位數的延遲時間是指最快 50% 的要求延遲時間上限 (以秒為單位)。舉例來說,如果第 50 個百分位數的延遲時間為 0.5 秒,表示 Cloud Healthcare API 在 0.5 秒內處理了 50% 的要求。第 50 個百分位數的延遲時間也稱為「中位數延遲時間」。
  • 第 99 個百分位數的延遲時間是指最快 99% 的要求,延遲時間上限 (以秒為單位)。舉例來說,如果第 99 個百分位數的延遲時間為 2 秒,表示 Cloud Healthcare API 在 2 秒內處理了 99% 的要求。

如果 Cloud Healthcare API 在某個時間間隔內只處理了幾項要求,則百分位數延遲時間可能無法反映整體效能,因為離群值要求可能會造成很大的影響。

舉例來說,假設 Cloud Healthcare API 中的某個程序在 100 分鐘內處理 100 個要求,這 100 分鐘的第 99 個百分位數延遲時間,會以最慢的單一要求為準。使用單一要求測量的延遲時間,不足以瞭解是否有效能問題。

在較長的時間範圍 (例如 24 小時) 內收集較大的要求樣本,可以更深入瞭解系統的整體行為。您可以根據這些樣本,判斷系統對大量流量的反應。