Nacos 作為目前主流的微服務中介軟體,包含了兩個頂級的微服務功能:設定中心和註冊中心。
設定中心是一種集中化管理設定的服務,通俗易懂的說就是將本地組態檔「雲端化」。
這樣做的好處有以下幾個:
當然,設定中心不可能有負載均衡的功能,所以略過,咱們直接來看註冊中心。
註冊中心(Registry)是分散式系統中的一個元件,用於實現服務的註冊與發現。註冊中心用於管理服務範例的後設資料資訊,並提供服務發現和路由的功能。
在微服務架構中,服務之間經常需要互相呼叫和通訊。註冊中心的作用是為服務提供一個集中管理和協調的中心,預設情況下,服務將自己的資訊註冊到註冊中心,其他服務可以通過查詢註冊中心的資訊來發現和呼叫目標服務。
註冊中心的核心功能包括以下幾個:
負載均衡嚴格的來說,並不算是傳統註冊中心的功能。⼀般來說服務發現的完整流程應該是先從注
冊中心獲取到服務的範例列表,然後再根據自身的需求,來選擇其中的部分範例或者按照⼀定的流
量分配機制來存取不同的服務提供者,因此註冊中心本身⼀般不限定服務消費者的存取策略。
例如 Eureka、Zookeeper 包括 Consul,本身都沒有去實現可設定及可延伸的負載均衡機制,Eureka 的
負載均衡是由 Ribbon 來完成的,而 Consul 則是由 Fabio 做負載均衡。
也就是說註冊中心和負載均衡,其實完全屬於兩個不同的東西,註冊中心主要提供服務的註冊,以及將服務註冊的列表交給消費者,至於消費者要使用哪種負載均衡策略?完全可以由自己決定。此時消費者可以通過使用者端負載均衡器來實現服務的選擇和呼叫,例如使用者端負載均衡器 Ribbon 或 Spring Cloud LoadBalancer。
使用者端負載均衡器通常位於服務的消費者端,主要負責將請求合理地分發給不同的服務提供者。工作原理是使用者端在發起請求前,通過負載均衡演演算法選擇一個合適的服務範例進行請求。使用者端根據服務範例的健康度、負載狀況等指標來決定選擇哪個服務範例。常見的使用者端負載均衡器有 Ribbon、Feign 等。
伺服器端負載均衡器通常被稱為反向代理伺服器或負載均衡器,它位於服務的提供者端,接收使用者端的請求,並根據一定的負載均衡策略將請求分發給後端的多個服務範例。工作原理是將使用者端的請求集中到負載均衡器,由負載均衡器將請求分發給多臺服務提供者。常見的伺服器端負載均衡器有 Nginx、HAProxy 等。
使用者端負載均衡 VS 伺服器端負載均衡
然而 Nacos 的註冊中心和傳統的註冊中心不太一樣,例如 Eureka、Zookeeper、Consul 等。因為 Nacos 在 0.7.0 之後(包含此版本),它內建了以下兩種負載均衡策略:
註冊中心和負載均衡器嚴格意義上來說是兩個東西,但 Nacos 註冊中心中,內建了兩種負載均衡策略:基於權重和基於 CMDB(低於就近存取)的負載均衡策略。
那麼問題來了,既然 Nacos 中內建了基於權重的負載均衡策略,那為什麼修改 Nacos 中的權重值,在伺服器端呼叫時,卻沒看到任何變化?
本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、並行、並行、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、訊息佇列等模組。