請求逾時

此任務說明如何使用 Istio 在 Envoy 中設定請求逾時。

開始之前

請求逾時

可以使用路由規則中的 timeout 欄位指定 HTTP 請求的逾時。預設情況下,請求逾時已停用,但在本任務中,您會將 reviews 服務逾時覆寫為半秒。不過,為了看到效果,您還會在對 ratings 服務的呼叫中引入 2 秒的人為延遲。

  1. 將請求路由至 reviews 服務的 v2,即呼叫 ratings 服務的版本
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
    - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
EOF
  1. 在對 ratings 服務的呼叫中新增 2 秒延遲
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - fault:
      delay:
        percentage:
          value: 100
        fixedDelay: 2s
    route:
    - destination:
        host: ratings
        subset: v1
EOF
  1. 在您的瀏覽器中開啟 Bookinfo URL http://$GATEWAY_URL/productpage,其中 $GATEWAY_URL 是入口的外部 IP 位址,如 Bookinfo 文件中所述。

    您應該會看到 Bookinfo 應用程式正常運作(顯示評分星號),但是每次您重新整理頁面時都會有 2 秒的延遲。

  2. 現在為對 reviews 服務的呼叫新增半秒的請求逾時。

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
    timeout: 0.5s
EOF
  1. 重新整理 Bookinfo 網頁。

    您現在應該看到它在大約 1 秒內返回,而不是 2 秒,並且評論不可用。

了解發生了什麼

在這個任務中,您使用 Istio 設定呼叫 reviews 微服務的請求逾時為半秒。預設情況下,請求逾時是停用的。由於 reviews 服務在處理請求時會隨後呼叫 ratings 服務,因此您使用 Istio 在呼叫 ratings 時注入 2 秒的延遲,以導致 reviews 服務花費超過半秒才能完成,因此您可以看到逾時的效果。

您觀察到 Bookinfo 產品頁面(呼叫 reviews 服務來填充頁面)沒有顯示評論,而是顯示訊息:抱歉,目前無法提供此書的產品評論。這是因為它從 reviews 服務收到逾時錯誤的結果。

如果您檢查故障注入任務,您會發現 productpage 微服務對於呼叫 reviews 微服務也有自己的應用程式級逾時(3 秒)。請注意,在這個任務中,您使用了 Istio 路由規則將逾時設定為半秒。如果您將逾時設定為大於 3 秒的值(例如 4 秒),則逾時將不會產生任何效果,因為兩者中限制較嚴格的將優先。更多詳細資訊可以在這裡找到。

關於 Istio 中的逾時,還有一點需要注意的是,除了像您在這個任務中所做的那樣在路由規則中覆寫它們之外,如果應用程式在傳出請求中新增 x-envoy-upstream-rq-timeout-ms 標頭,也可以在每個請求的基礎上覆寫它們。在標頭中,逾時是以毫秒而不是秒為單位指定的。

清理

  • 移除應用程式路由規則
壓縮
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
  • 如果您不打算探索任何後續任務,請參閱Bookinfo 清理說明來關閉應用程式。
此資訊是否有用?
您有任何改進的建議嗎?

感謝您的回饋!