馬哥云原生微服務(wù)治理大廠沖刺班名師親授
服務(wù)注冊和發(fā)現(xiàn)
基于SpringCloud實現(xiàn)
以 Spring Cloud 的 Eureka 為例,服務(wù)提供者會把自己的服務(wù)名和 IP注冊到 Eureka。服務(wù)消費者調(diào)用服務(wù)提供者時,先通過服務(wù)名在 Eureka 找到對應(yīng)的服務(wù)提供者的一組訪問 IP,利用 Ribbon 的負載均衡策略,選擇一個合適的 IP,去訪問對應(yīng)的微服務(wù),屬于客戶端實現(xiàn)的負載均衡。

基于K8S實現(xiàn)
K8S 則是定義了 service 的概念,是一組 pod 的集合,在創(chuàng)建 service 時,會根據(jù)標簽選擇器(label selector)選擇合適的 pod,并記錄為 endpoint 對象,endpoint 中記錄的是 service 和 pod 之間的關(guān)系。
每個 Node 節(jié)點運行了kube-proxy 來監(jiān)控 pod,當(dāng) pod 的 IP 地址發(fā)生變化時,kube-proxy 會去更新對應(yīng)的 endpoint,此外 service 的服務(wù)名字也會被注冊到 coreDNS 服務(wù),這樣服務(wù)之間通過 service 的名字就可以互相訪問了。
當(dāng)服務(wù)消費者(pod A)訪問服務(wù)提供者(pod B)的時候,根據(jù)kube-proxy 不同模式下的負載均衡策略(比如 iptables),來決定將請求轉(zhuǎn)發(fā)到哪個 pod?

標簽: