日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

在Kubernetes中實現(xiàn)gRPC流量負載均衡

來源: 責(zé)編: 時間:2023-10-27 17:21:17 313觀看
導(dǎo)讀在嘗試將gRPC服務(wù)部署到Kubernetes集群中時,一些用戶(包括我)面臨的挑戰(zhàn)之一是實現(xiàn)適當(dāng)?shù)呢撦d均衡。在深入了解如何平衡gRPC的方式之前,我們首先需要回答一個問題,即為什么需要平衡流量,如果Kubernetes已經(jīng)完成了這項工作。

在嘗試將gRPC服務(wù)部署到Kubernetes集群中時,一些用戶(包括我)面臨的挑戰(zhàn)之一是實現(xiàn)適當(dāng)?shù)呢撦d均衡。在深入了解如何平衡gRPC的方式之前,我們首先需要回答一個問題,即為什么需要平衡流量,如果Kubernetes已經(jīng)完成了這項工作。K2B28資訊網(wǎng)——每日最新資訊28at.com

本文關(guān)注于Kubernetes和Golang。K2B28資訊網(wǎng)——每日最新資訊28at.com

K2B28資訊網(wǎng)——每日最新資訊28at.com

為什么在Kubernetes中無法適當(dāng)?shù)仄胶鈍RPC流量?

之所以難以平衡gRPC流量的主要原因是人們將gRPC視為HTTP,這就是問題的根源。設(shè)計上它們是不同的,雖然HTTP為每個請求創(chuàng)建和關(guān)閉連接,但gRPC使用HTTP2協(xié)議,在長時間的TCP連接上運行,使得平衡更加困難,因為多個請求通過同一個連接進行多路復(fù)用。然而,這并不是配置gRPC服務(wù)在Kubernetes中出現(xiàn)平衡問題的唯一原因,以下是一些常見的錯誤配置:K2B28資訊網(wǎng)——每日最新資訊28at.com

  • 錯誤的gRPC客戶端配置
  • 錯誤的Kubernetes服務(wù)配置

錯誤的gRPC客戶端配置

設(shè)置gRPC客戶端時常見的情況是選擇默認配置,這對于1-1連接類型完全有效,但對于生產(chǎn)環(huán)境來說并不如我們所希望的有效。這背后的原因是因為默認的gRPC客戶端提供了使用簡單的IP/DNS記錄連接的可能性,這只會創(chuàng)建一個與目標(biāo)服務(wù)的連接。K2B28資訊網(wǎng)——每日最新資訊28at.com

因此,需要為與多個服務(wù)器建立連接進行不同的設(shè)置,將連接類型從1-1轉(zhuǎn)換為1-N。K2B28資訊網(wǎng)——每日最新資訊28at.com

默認設(shè)置:K2B28資訊網(wǎng)——每日最新資訊28at.com

func main(){  conn, err := grpc.Dial("my-domain:50051", grpc.WithInsecure())  if err != nil {    log.Fatalf("error connecting with gRPC server: %v", err)  }    defer conn.Close()  cli := test.NewTestServiceClient(conn)  rs, err := cli.DoSomething(context.Background(), ...)  .  .  .}

新的設(shè)置:K2B28資訊網(wǎng)——每日最新資訊28at.com

func main(){  conn, err := grpc.Dial("my-domain:50051", grpc.WithInsecure())  if err != nil {    log.Fatalf("error connecting with gRPC server: %v", err)  }    defer conn.Close()  cli := test.NewTestServiceClient(conn)  rs, err := cli.DoSomething(context.Background(), ...)  .  .  .}

這里有兩個重要的更改需要注意:K2B28資訊網(wǎng)——每日最新資訊28at.com

  • 地址: 最終解析的地址將類似于 dns:///my-domain:50051,之所以使用這種格式是因為Dial函數(shù)允許我們使用由Scheme://Authority/Endpoint組成的目標(biāo),而在我們的情況下,我跳過了Authority。因此,首先我添加了dns作為方案,因為我希望解析一個域并持續(xù)觀察其更改,解析器選項有透傳(默認)、dns和手動,更多詳情請參閱這里。
  • 負載均衡器選項: 如果我們的客戶端現(xiàn)在連接到多個服務(wù)器,那么我們的gRPC客戶端可以根據(jù)所選擇的負載均衡算法平衡請求。

總結(jié)一下,我們的gRPC客戶端現(xiàn)在能夠創(chuàng)建不同的連接,前提是域名解析為多個A或AAAA記錄,而且不僅如此,現(xiàn)在還能夠?qū)⒄埱缶鶆虻胤峙涞讲煌姆?wù)器。K2B28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在讓我們看看如何讓它與Kubernetes一起工作的缺失部分。K2B28資訊網(wǎng)——每日最新資訊28at.com

錯誤的Kubernetes服務(wù)配置

在Kubernetes中創(chuàng)建服務(wù)非常簡單,我們只需要定義服務(wù)名稱、端口和選擇器,以便服務(wù)可以動態(tài)地將Pod分組并自動平衡請求,如下所示:K2B28資訊網(wǎng)——每日最新資訊28at.com

apiVersion: v1kind: Servicemetadata:  name: my-servicespec:  selector:    app: my-app  ports:    - name: grpc      protocol: TCP      port: 50051      targetPort: 50051

那么,對于先前的設(shè)置,問題在于默認的Kubernetes服務(wù)只創(chuàng)建了一個DNS記錄,鏈接到單個IP。因此,當(dāng)您執(zhí)行類似 nslookup my-service.{namespace}.svc.cluster.local 的操作時,返回的是一個單個IP,這使得在常見的gRPC實現(xiàn)中連接圖看起來像這樣:K2B28資訊網(wǎng)——每日最新資訊28at.com

K2B28資訊網(wǎng)——每日最新資訊28at.com

例如,使用默認的Kubernetes服務(wù)的連接圖:K2B28資訊網(wǎng)——每日最新資訊28at.com

綠線表示與客戶端的活動連接,黃色表示未活動的Pod。客戶端與Kubernetes服務(wù)創(chuàng)建了持久連接,同時服務(wù)也與其中一個Pod創(chuàng)建了連接,但這并不意味著服務(wù)與其余的Pod沒有連接。K2B28資訊網(wǎng)——每日最新資訊28at.com

讓我們使用一個無頭服務(wù)來解決這個問題:K2B28資訊網(wǎng)——每日最新資訊28at.com

apiVersion: v1kind: Servicemetadata:  name: my-servicespec: clusterIP: None **this is the key*** selector:    app: my-app  ports:    - name: grpc      protocol: TCP      port: 50051      targetPort: 50051

創(chuàng)建了無頭服務(wù)后,nslookup看起來有些不同,現(xiàn)在它返回與之關(guān)聯(lián)的記錄(將Pod的IP分組到服務(wù)中),從而使gRPC客戶端更好地了解需要連接的服務(wù)器數(shù)量。K2B28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在您已經(jīng)看到了gRPC客戶端的配置,您必須知道為什么Kubernetes服務(wù)返回與一組Pod關(guān)聯(lián)的IP非常重要。原因是客戶端可以看到所有需要建立連接的服務(wù)器。在這一點上,您可能已經(jīng)意識到了一個注意事項,即平衡的責(zé)任現(xiàn)在在客戶端部分,而不在Kubernetes的一側(cè)。我們現(xiàn)在需要從Kubernetes那里得到的主要任務(wù)是保持與服務(wù)關(guān)聯(lián)的Pod列表的最新狀態(tài)。K2B28資訊網(wǎng)——每日最新資訊28at.com

K2B28資訊網(wǎng)——每日最新資訊28at.com

例如,在具有無頭Kubernetes服務(wù)的連接圖中,可以看到連接發(fā)生了一些變化,現(xiàn)在我們不通過Kubernetes服務(wù)來訪問Pod,而是使用Kubernetes服務(wù)來檢索與域名關(guān)聯(lián)的Pod列表,然后直接與Pod建立連接。但是不要因為直接連接到Pod而感到驚慌,因為我們在客戶端中設(shè)置了DNS解析器類型,該解析器將持續(xù)監(jiān)視與無頭服務(wù)的更改,并將與可用的Pod保持最新的連接。K2B28資訊網(wǎng)——每日最新資訊28at.com

為什么不使用服務(wù)網(wǎng)格?

如果可以的話,請使用服務(wù)網(wǎng)格,因為在服務(wù)網(wǎng)格中,所有這些設(shè)置都是透明的,而且最重要的是它是與編程語言無關(guān)的。關(guān)鍵區(qū)別在于服務(wù)網(wǎng)格利用了Sidecar模式和控制平面來編排入站和出站流量,還可以看到所有網(wǎng)絡(luò)和流量類型(HTTP、TCP等),從而能夠正確平衡請求。簡而言之,如果您不使用服務(wù)網(wǎng)格,那么您需要直接從每個客戶端連接到多個服務(wù)器,或者連接到一個L7代理來幫助平衡請求。K2B28資訊網(wǎng)——每日最新資訊28at.com

附加信息

盡管先前的設(shè)置可以工作,但我在嘗試在alpine Linux映像中進行Pod輪換或擴展時重新平衡連接時遇到了問題。經(jīng)過一些研究,我意識到我并不是唯一遇到這種問題的人,可以查看這里和這里的一些相關(guān)的GitHub問題。這就是為什么我決定創(chuàng)建自己的解析器的原因,您可以在這里查看我創(chuàng)建的自定義解析器,我創(chuàng)建的自定義解析器非常基礎(chǔ),但現(xiàn)在可以正常工作,gRPC客戶端現(xiàn)在可以再次監(jiān)聽域名的更改,我還為該庫添加了一個可配置的監(jiān)聽器,它每隔一段時間查找域名并更新提供給gRPC連接管理器的IP集合,如果您想貢獻,歡迎加入。K2B28資訊網(wǎng)——每日最新資訊28at.com

另一方面,因為我想深入了解,所以我決定創(chuàng)建自己的gRPC代理(我也學(xué)到了很多東西),利用了gRPC的http2基礎(chǔ),我可以創(chuàng)建一個代理,而無需更改proto負載消息或甚至不知道proto文件的定義(還使用了前面提到的自定義解析器)。K2B28資訊網(wǎng)——每日最新資訊28at.com

最后,我想說的是,如果您的gRPC客戶端需要與許多服務(wù)器連接,我強烈建議使用代理作為平衡的機制,因為將這個機制放在主應(yīng)用程序中將增加復(fù)雜性和資源消耗,嘗試保持許多打開的連接并重新平衡它們,想象一下,如果最終的平衡在應(yīng)用程序中,您將有一個與N個服務(wù)器連接的實例(1-N),但是使用代理,您將有一個與M個代理連接到N個服務(wù)器的實例(1-M-N),其中M<N,因為每個代理實例可以處理與不同服務(wù)器的許多連接。K2B28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15439-0.html在Kubernetes中實現(xiàn)gRPC流量負載均衡

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 事與愿違:可變類出現(xiàn)了線程安全問題

下一篇: 游戲全球發(fā)行平臺的實踐與探索

標(biāo)簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統(tǒng)將于今天下午正式登場,官方在發(fā)布會之前也已經(jīng)正式給出了可升級的機型產(chǎn)品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過了幾波預(yù)熱之后,一加Ace2 Pro的外觀真機圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計還是延續(xù)了一加11的方案,只是細節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應(yīng)運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動設(shè)備上有一個固定元素,當(dāng)激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發(fā)生
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學(xué)好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現(xiàn)百度,功能雖然實現(xiàn)了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級寫字樓亞洲金
  • 余承東:AI大模型技術(shù)的發(fā)展將會帶來下一代智能終端操作系統(tǒng)的智慧體驗

    8月4日消息,2023年華為開發(fā)者大會(HDC.Together)今天正式開幕,華為發(fā)布HarmonyOS 4、全新升級的鴻蒙開發(fā)套件、HarmonyOS Next開發(fā)者預(yù)覽版本等一系列
  • 2021中國國際消費電子博覽會與青島國際軟件融合創(chuàng)新博覽會新聞發(fā)布會隆重舉行

    9月18日,2021中國國際消費電子博覽會與青島國際軟件融合創(chuàng)新博覽會新聞發(fā)布會在青島國際新聞中心隆重舉行。發(fā)布會上青島市政府領(lǐng)導(dǎo)聯(lián)袂出席,對本次雙展會情
  • “買真退假” 這種“羊毛”不能薅

    □ 法治日報 記者 王春   □ 本報通訊員 胡佳麗  2020年初,還在上大學(xué)的小東加入了一個大學(xué)生兼職QQ群。群主&ldquo;七王&rdquo;在群里介紹一些刷單賺
Top 主站蜘蛛池模板: 黑河市| 吴桥县| 东平县| 西盟| 比如县| 汝阳县| 金川县| 双辽市| 客服| 齐河县| 沂源县| 永福县| 沙田区| 南皮县| 泸定县| 调兵山市| 鲁甸县| 股票| 涡阳县| 若尔盖县| 宜宾市| 阿荣旗| 黄骅市| 南通市| 辽源市| 东城区| 蒙自县| 怀集县| 杨浦区| 如皋市| 边坝县| 郑州市| 满洲里市| 岑巩县| 克东县| 夹江县| 双城市| 仪陇县| 柞水县| 辽中县| 竹溪县|