成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Istio 流量管理之故障注入

開發 架構
故障注入是一種評估系統可靠性的有效方法,例如異常處理、故障恢復等。只有當系統的所有服務都經過故障測試且具備容錯能力時,整個應用才健壯可靠。

[[413636]]

對于一個系統,尤其是一個復雜的系統,重要的不是故障會不會發生,而是什么時候發生。故障處理對于開發人員和測試人員來說都特別耗費時間和精力:對于開發人員來說,他們在開發代碼時需要用20%的時間寫80%的主要邏輯,然后留出80%的時間處理各種非正常場景;對于測試人員來說,除了需要用80%的時間寫20%的異常測試項,更要用超過80%的時間執行這些異常測試項,并構造各種故障場景,尤其是那種理論上才出現的故障,讓人苦不堪言。

故障注入是一種評估系統可靠性的有效方法,例如異常處理、故障恢復等。只有當系統的所有服務都經過故障測試且具備容錯能力時,整個應用才健壯可靠。故障注入從方法上來說有編譯期故障注入和運行期故障注入,前者要通過修改代碼來模擬故障,后者在運行階段觸發故障。Istio 的故障注入就是在網格中對特定的應用層協議進行故障注入,這樣,基于 Istio 的故障注入就可以模擬出應用的故障場景了。

接下來我們就來說明如何注入故障并測試應用程序的彈性。

延遲故障注入

為了測試微服務應用程序 Bookinfo 的彈性,我們將為用戶 jason 在 reviews:v2 和 ratings 服務之間注入一個 7 秒的延遲,這個測試將會發現一個故意引入 Bookinfo 應用程序中的 bug。

首先移除之前創建的 VirtualService:

  1. ➜  ~ kubectl delete virtualservice reviews 
  2. virtualservice.networking.istio.io "reviews" deleted 
  3. ➜  ~ kubectl get virtualservice 
  4. NAME       GATEWAYS             HOSTS   AGE 
  5. bookinfo   [bookinfo-gateway]   [*]     16d 

為了能夠讓請求穩定,這里我們對 Reviews 服務配置請求路由,對應的資源清單文件 samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml:

  1. apiVersion: networking.istio.io/v1alpha3 
  2. kind: VirtualService 
  3. metadata: 
  4.   name: reviews 
  5. spec: 
  6.   hosts: 
  7.     - reviews 
  8.   http: 
  9.   - match: 
  10.     - headers: 
  11.         end-user
  12.           exact: jason 
  13.     route: 
  14.     - destination: 
  15.         host: reviews 
  16.         subset: v2 
  17.   - route: 
  18.     - destination: 
  19.         host: reviews 
  20.         subset: v1 

上面的配置應用過后 jason 用戶會被路由到 reviews:v2 版本服務,其他用戶路由到 reviews:v1 版本服務。創建故障注入規則以延遲來自測試用戶 jason 的流量,對應的資源清單為 samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml:

  1. apiVersion: networking.istio.io/v1alpha3 
  2. kind: VirtualService 
  3. metadata: 
  4.   name: ratings 
  5. spec: 
  6.   hosts: 
  7.   - ratings 
  8.   http: 
  9.   - match: 
  10.     - headers: 
  11.         end-user
  12.           exact: jason 
  13.     fault: 
  14.       delay: 
  15.         percentage: 
  16.           value: 100.0 
  17.         fixedDelay: 7s 
  18.     route: 
  19.     - destination: 
  20.         host: ratings 
  21.         subset: v1 
  22.   - route: 
  23.     - destination: 
  24.         host: ratings 
  25.         subset: v1 

這個 VirtualService 定義了一個在 jason 登錄的情況下,訪問 ratings 服務的 100% 的 7s 訪問延遲。前面我們知道,Bookinfo 這個示例 productpage 服務調用 reviews,reviews 的不同版本會對 ratings 進行不同的調用,其中 reviews-v1 不調用 ratings,reviews-v2 和 reviews-v3 會調用 ratings,并做不同樣式的渲染。注意 reviews:v2 服務對 ratings 服務的調用具有 10 秒的硬編碼連接超時。因此,盡管引入了 7 秒的延遲,我們仍然期望端到端的流程是沒有任何錯誤的。

了解這一點后,我們現在來創建上面的 VirtualService 資源對象:

  1. ➜  ~ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml 
  2. ➜  ~ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml 
  3. virtualservice.networking.istio.io/ratings created 
  4. ➜  ~ kubectl get virtualservice 
  5. NAME       GATEWAYS               HOSTS         AGE 
  6. bookinfo   ["bookinfo-gateway"]   ["*"]         6d23h 
  7. ratings                           ["ratings"]   23m 
  8. reviews                           ["reviews"]   4s 

通過瀏覽器打開 Bookinfo 應用,使用用戶 jason 登錄到 /productpage 頁面。我們期望的是 Bookinfo 主頁在大約 7 秒鐘加載完成并且沒有錯誤,但是 Reviews 部分顯示了一個錯誤消息:Sorry, product reviews are currently unavailable for this book.

圖片

reviews unavailable

而且我們可以看到頁面加載實際上用了大約6s,按照預期,我們引入的 7s 延遲不會影響到 reviews 服務,因為 reviews 和 ratings 服務間的超時被硬編碼為 10 秒,但實際上在 productpage 和 reviews 服務之間也有一個 3s 的硬編碼的超時,再加 1 次重試,一共 6s,所以 productpage 對 reviews 的調用在 6s 后提前超時并拋出錯誤了。

這種類型的錯誤在不同的團隊獨立開發不同的微服務的企業應用程序中是可能會出現的,Istio 的故障注入規則可以幫助我們識別此類異常,而不會影響最終用戶。

請注意,此次故障注入限制為僅影響用戶 jason,如果你以任何其他用戶身份登錄,則不會遇到任何延遲。

我們可以增加 productpage 與 reviews 服務之間的超時或降低 reviews 與 ratings 的超時來解決這個問題,在 reviews 服務的 v3 版本中已經修復了這個問題,reviews:v3 服務已將 reviews 與 ratings 的超時時間從 10s 降低為 2.5s,因此它可以兼容(小于)下游的 productpage 的請求。

如果我們將上面 Reviews 的流量轉移到 reviews:v3 服務,然后可以嘗試修改延遲規則為任何低于 2.5s 的數值,例如 2s,然后可以確認端到端的流程沒有任何錯誤。

通過這種超時故障注入,可以幫助我們方便地發現服務間相互訪問中存在的潛在問題。

中斷訪問故障注入

測試微服務彈性的另一種方法是引入 HTTP abort 故障,接下來我們將給 ratings 微服務為測試用戶 jason 引入一個 HTTP abort。在這種情況下,我們希望頁面能夠立即加載,同時顯示 Ratings service is currently unavailable 這樣的消息。

這里我們需要使用到的資源清單文件為 samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml:

  1. apiVersion: networking.istio.io/v1alpha3 
  2. kind: VirtualService 
  3. metadata: 
  4.   name: ratings 
  5. spec: 
  6.   hosts: 
  7.   - ratings 
  8.   http: 
  9.   - match: 
  10.     - headers: 
  11.         end-user
  12.           exact: jason 
  13.     fault: 
  14.       abort: 
  15.         percentage: 
  16.           value: 100.0 
  17.         httpStatus: 500 
  18.     route: 
  19.     - destination: 
  20.         host: ratings 
  21.         subset: v1 
  22.   - route: 
  23.     - destination: 
  24.         host: ratings 
  25.         subset: v1 

上面這個 VirtualService 資源對象配置了在 jason 登錄時,reviews 對 ratings 訪問時 100% 的返回一個500錯誤響應。然后創建這個資源對象:

  1. ➜  ~ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml 
  2. virtualservice.networking.istio.io/ratings created 
  3. ➜  ~ kubectl get virtualservice 
  4. NAME       GATEWAYS               HOSTS         AGE 
  5. bookinfo   ["bookinfo-gateway"]   ["*"]         7d 
  6. ratings                           ["ratings"]   68m 
  7. reviews                           ["reviews"]   44m 

現在我們回到 BookInfo 應用,登錄 jason,刷新頁面,有時候可以很快就看到 Rating 服務不可用的提示信息:

bookinfo error

如果注銷用戶 jason,我們將看到 /productpage 為除 jason 以外的其他用戶調用了 reviews:v1(完全不調用 ratings),因此,不會看到任何錯誤消息,不會顯示星標的圖形。

 

責任編輯:姜華 來源: k8s技術圈
相關推薦

2011-08-03 10:48:07

2023-11-02 08:46:19

微服務開發Istio

2023-11-09 07:23:57

Istio路由分析

2023-12-25 07:46:35

GatewayAPI開源

2022-05-10 07:46:08

Envoy網絡通訊

2022-09-15 08:33:11

ChaosBladeJava場景

2011-07-13 10:56:04

2022-09-02 15:17:04

ArkUI鴻蒙

2011-07-20 13:41:38

組策略

2020-09-29 08:32:03

數據中心故障緩解

2011-07-19 10:57:46

組策略

2021-11-01 08:16:26

模型Istio服務

2021-07-27 06:51:53

Istio 微服務Service Mes

2011-07-13 14:26:23

域控制器活動目錄DNS

2009-08-03 16:27:17

2023-10-07 08:59:02

2023-11-07 17:32:31

Istiok8s

2011-06-07 10:36:42

路由流量

2009-04-14 16:14:51

2025-03-27 05:25:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕欧美一区二区 | 美女久久久久 | 成人片网址| 精品国产乱码久久久久久蜜柚 | 日日夜夜免费精品视频 | 亚洲伦理自拍 | 黄色日本片 | 婷婷中文在线 | 色必久久| 国产高清视频在线观看 | 亚洲成人免费视频 | japan25hdxxxx日本| 超碰在线观看97 | 亚洲免费精品 | 91精品观看 | 中文字幕一区二区三区四区五区 | 黄色免费在线观看网站 | www视频在线观看 | 巨大荫蒂视频欧美另类大 | 久久伊人精品 | 久久久精| 国产丝袜一区二区三区免费视频 | 中文字幕日韩欧美 | 亚洲国产成人av | 午夜天堂精品久久久久 | 欧美一级三级在线观看 | 日日淫| 精品美女视频在免费观看 | 日本不卡免费新一二三区 | 视频精品一区二区三区 | 在线中文字幕第一页 | 精品免费av| 韩国毛片一区二区三区 | 亚洲一区综合 | 成人一区av | 国产视频观看 | 亚州激情| 国产一二三区电影 | 日韩色在线 | 日韩一级精品视频在线观看 | 国产成人免费网站 |