亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

在一次內(nèi)部JAVA服務(wù)審計(jì)中,我們發(fā)現(xiàn)一些請(qǐng)求沒有在Kube.NETes(K8s)網(wǎng)絡(luò)上正確地實(shí)現(xiàn)負(fù)載均衡。導(dǎo)致我們深入研究的問(wèn)題是HTTP 5xx錯(cuò)誤率的急劇上升,由于CPU使用率非常高,垃圾收集事件的數(shù)量很多以及超時(shí),但這僅發(fā)生在一些特定的Pod中。

這種情況并不在所有情況下都可見,因?yàn)樗绊懙蕉郟od服務(wù),源Pod和目標(biāo)Pod的數(shù)量不同。在本博文中,我將討論我們采取的措施來(lái)負(fù)載均衡這組服務(wù)和Pod。

在我們的部署中,請(qǐng)求在Pod之間是如何均衡的?

Kubernetes使用OkHttp客戶端進(jìn)行網(wǎng)絡(luò)負(fù)載均衡

兩個(gè)源Pod向六個(gè)目標(biāo)Pod發(fā)送請(qǐng)求。

可以清楚地看到請(qǐng)求分布在目標(biāo)Pod之間存在不均衡。

但為什么會(huì)這樣?

K8s負(fù)載均衡器(IPVS代理模式)的默認(rèn)負(fù)載均衡調(diào)度程序設(shè)置為輪詢(round robin)。IPVS提供了更多的選項(xiàng)來(lái)均衡流量到Pod后端。在測(cè)試這些選項(xiàng)時(shí),我們發(fā)現(xiàn)當(dāng)涉及到我們的服務(wù)時(shí),不管配置如何,行為都相同,這些服務(wù)之間使用內(nèi)部路由進(jìn)行通信。

到底發(fā)生了什么?K8s中的IPVS根據(jù)連接來(lái)平衡流量,這在大多數(shù)情況下都表現(xiàn)得相當(dāng)不錯(cuò)。我們的服務(wù)使用OkHttp作為相互通信的HTTP客戶端。我們的問(wèn)題與這個(gè)HTTP客戶端的行為方式有關(guān)。使用默認(rèn)配置,它會(huì)創(chuàng)建到服務(wù)器的連接,如果您不想在代碼中顯式關(guān)閉連接,因?yàn)檫@太昂貴,那么它會(huì)保持并重新建立到先前合作伙伴的連接。這意味著客戶端嘗試保持與目標(biāo)的連接,并通過(guò)該特定連接發(fā)送請(qǐng)求。通常情況下,它會(huì)創(chuàng)建1:1的連接,這在K8s方面沒有均衡。

該怎么辦?

如果您需要擴(kuò)展或希望使您的服務(wù)得到適當(dāng)?shù)呢?fù)載均衡,您需要在客戶端端更新配置。OkHttp提供了ConnectionPool功能。當(dāng)使用ConnectionPool選項(xiàng)時(shí),連接將在有限的時(shí)間段內(nèi)建立,然后重復(fù)設(shè)置一個(gè)新的連接,因此IPVS可以進(jìn)行負(fù)載均衡,因?yàn)樗写罅康男逻B接,應(yīng)該根據(jù)IPVS調(diào)度程序路由到目標(biāo)?;旧?,它的工作方式類似于機(jī)關(guān)槍而不是激光束。

我們?cè)诎l(fā)布此更新后的效果如何?

Kubernetes使用OkHttp客戶端進(jìn)行網(wǎng)絡(luò)負(fù)載均衡

使用更新的HTTP客戶端和默認(rèn)IPVS調(diào)度程序在多Pod服務(wù)之間實(shí)現(xiàn)了負(fù)載均衡的連接。

到底做了什么改變?

我們進(jìn)行了大量的測(cè)試,使用各種配置來(lái)測(cè)量響應(yīng)時(shí)間和性能開銷,以確保負(fù)載均衡。下面是主要的代碼更改,看起來(lái)沒有明顯的性能開銷。

Kubernetes使用OkHttp客戶端進(jìn)行網(wǎng)絡(luò)負(fù)載均衡

代碼更改示例

有一個(gè)選項(xiàng)可以設(shè)置調(diào)度程序,以便能夠并行發(fā)送更多的請(qǐng)求。在我們的情況下,這最終會(huì)建立一組最近關(guān)閉的連接,然后繼續(xù)只使用一個(gè)連接。此外,我們?cè)噲D防止過(guò)于頻繁地打開新連接,因?yàn)閳?zhí)行請(qǐng)求比打開新連接要少要求得多。

結(jié)果如何?

網(wǎng)絡(luò)和資源的使用現(xiàn)在比以前更加平衡 - 沒有巨大或持續(xù)很長(zhǎng)時(shí)間的峰值,也沒有出現(xiàn)只影響部署中某些Pod的“嘈雜鄰居”效應(yīng)?,F(xiàn)在幾乎所有的Pod都以幾乎相同的方式被利用,因此我們能夠減少我們的部署中的Pod數(shù)量。我們知道這并不完美,但對(duì)于我們的用例來(lái)說(shuō)已經(jīng)足夠好,因?yàn)樗粫?huì)給服務(wù)或IPVS負(fù)載均衡器帶來(lái)明顯的性能開銷。

Kubernetes使用OkHttp客戶端進(jìn)行網(wǎng)絡(luò)負(fù)載均衡

現(xiàn)在的Pod上的請(qǐng)求負(fù)載均衡

結(jié)論

定期進(jìn)行徹底的服務(wù)審計(jì)是有益的,因?yàn)樗梢越沂境鑫磥?lái)對(duì)所有服務(wù)有益的優(yōu)化點(diǎn),并在解決那些本應(yīng)該立即運(yùn)行的功能的奇怪癥狀時(shí)為您節(jié)省時(shí)間。此外,花些時(shí)間查看文檔,測(cè)試,討論并了解在使用客戶端庫(kù)時(shí)關(guān)于連接設(shè)置和處理的默認(rèn)設(shè)置的影響,以確保它們將按照您的預(yù)期行事。

分享到:
標(biāo)簽:Kubernetes
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定