1. 程式人生 > >idou老師教你學Istio 07: 如何用istio實現請求超時管理

idou老師教你學Istio 07: 如何用istio實現請求超時管理

特性 Kubernete 超過 設置 book moni 實驗 老師 規則設置

前言

在前面的文章中,大家都已經熟悉了Istio的故障註入和流量遷移。這兩個方面的功能都是Istio流量治理的一部分。今天將繼續帶大家了解Istio的另一項功能,關於請求超時的管理。

首先我們可以通過一個簡單的Bookinfo的微服務應用程序來動手實踐一下Istio是如何實現請求超時的管理。看過idou老師前面文章的老司機應該都已經對Bookinfo這個實例駕輕就熟了,當然還存在部分被idou老師的文采剛吸引過來的新同學。

下面先簡單的介紹一下Bookinfo這個樣例應用整體架構,以便我們更好地理解Istio是如何實現請求超時,對於老司機可以直接跳過這部分。

Bookinfo應用由四個單獨的微服務構成,用來演示多種 Istio 特性。這個應用模仿在線書店的一個分類,顯示一本書的信息。頁面上會顯示一本書的描述,書籍的細節,以及關於這本書的一些評論。講道理,Bookinfo這個實例確實比較輕量級,但是麻雀雖小五臟俱全。

了解完樣例應用以後,我們就可以動手實踐了。當前的實驗環境是基於已經提前安裝好Kubernetes和Istio。請求超時的管理我們主要可以用來對一些特殊場景進行測試,比如故障註入等。

第一步:首先我們到reviews組件中定義一個VirtualService的路由

第二步:在對ratings服務的調用中加入四秒鐘的延遲

第三步:我們需要給productpage配置一個對外訪問方式,然後用瀏覽器打開productpage對應的訪問方式即可在頁面看到Bookinfo的樣例。這時應該能看到 Bookinfo 應用在正常運行(顯示了評級的星形符號)。很多同學可能會好奇為什麽我們明明設置了四秒鐘的延時卻沒有出現跟自己設想的情況出現,別急讓我們再接著往下走。

第四步:我們重新再給ratings服務的調用中修改成2秒延時

第五步:這個時候我們再重新刷新Bookinfo的應用頁面,將會看到出現的情況正如我們預想的那樣,頁面右側顯示評級的星形符號將會在整個頁面異步延時大約2s的時間刷新出來,很多同學可能會思考是不是Istio的延時管理出了bug?莫慌,在本文的最後將會給您揭曉答案。

第六步:我們繼續嘗試在reviews服務的請求加入一秒鐘的請求超時

第七步:我們繼續去刷新Bookinfo的web頁面看看即將會發生什麽?這時候應該就會看到reviews去調用ratings一秒鐘就會返回,而不是之前的兩秒鐘,但是reviews的顯示消失了。

通過上面的實踐,我們使用Istio為調用reviews的微服務的請求中加入了一秒鐘的超時控制,覆蓋了本身默認的15秒鐘設置。頁面刷新時,reviews 服務後面會調用 ratings 服務,使用 Istio 在對 ratings 的調用中註入了兩秒鐘的延遲,這樣就讓 reviews 服務要花費超過一秒鐘的時間來調用 ratings 服務,從而觸發了我們加入的超時控制。這樣就會看到 Bookinfo 中由reviews生產的頁面上沒有出現 reviews 服務的顯示內容,並且出現一串異常信息,出現這一信息的原因就是因為來自 reviews 服務的超時錯誤

到這裏,今天的請求超時管理是不是就結束了?當然沒有,idou老師還記得第三步中的問題還沒有給大家解答。這是因為Istio內部的服務中設置了更為嚴格的超時要求,如果有同學看了之前的文章測試了故障註入,就會發現 productpage 微服務在調用 reviews 微服務時,還有自己的應用級超時設置(三秒鐘)。而我們這裏用路由規則設置了一秒鐘的超時。如果把超時設置為超過三秒鐘(例如四秒鐘)會毫無效果(正如我們第三步中設置了四秒)。

更多幹貨內容歡迎關註微信公眾號【容器魔方】,如果您想加入容器交流技術群,添加管理員monicka,申請入群,容器圈的人看過來

idou老師教你學Istio 07: 如何用istio實現請求超時管理