您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Nacos集群部署模式有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Nacos集群部署模式有哪些”這篇文章吧。
Nacos 支持兩種部署模式:單機模式和集群模式。
直連模式是部署上最簡單、最容易理解的一種模式。
采用直連模式后,典型的開發場景配置如下:
nacos-client 配置
Properties properties = new Properties(); properties.setProperty(PropertyKeyConst.SERVER_ADDR, "192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848"); NamingService namingService = NacosFactory.createNamingService(properties);
注意這里的 PropertyKeyConst.SERVER_ADDR 的字面量是:serverAddr
Dubbo 配置
dubbo.registry.address=192.168.0.1:8848,192.168.0.2:8848,192.168.0.3:8848 dubbo.registry.protocol=nacos
如果有一天,Nacos 的 IP 變了,例如擴縮容,機器置換,集群遷移等場景,所有的應用都需要修改,這樣的方式并不靈活。所以并不是生產推薦的模式。
模式分析
高可用性。集群本身的擴縮容必須要改動業務代碼才能被感知到,出現節點故障需要緊急下線、緊急擴容等場景,讓業務修改代碼是不現實的,不符合高可用的原則。
可伸縮性。同上,可伸縮性不好。
架構簡單,用戶理解成本低。
沒有引入額外的組件,沒有新增組件的運維成本。
VIP(Virtual IP) 模式可以很好的解決直連模式 IP 變化所帶來的應用批量修改的問題。什么是 VIP 呢?
Real Server:處理實際請求的后端服務器節點。
Director Server:指的是負載均衡器節點,負責接收客戶端請求,并轉發給 RS。
VIP:Virtual IP,DS 用于和客戶端通信的 IP 地址,作為客戶端請求的目標 IP 地址。
IP,DS 用于和內部 RS 通信的 IP 地址。
RIP:Real IP,后端服務器的 IP 地址。
CIP:Client IP,客戶端的 IP 地址。
我這里介紹時并沒有用【負載均衡模式】,而是用了【VIP 模式】,主要是為了跟 Nacos 官方文檔保持一致。事實上,VIP 的叫法在阿里內部比較流行,所以在開源 Nacos 時也被習慣性的帶了出去。
VIP 幫助 Nacos Client 屏蔽了后端 RIP,相對于 RIP 而言,VIP 很少會發生變化。以擴容場景為例,只需要讓 VIP 感知到即可,Nacos Client 只需要關注 VIP,避免了擴容引起的代碼改造。
只要是具備負載均衡能力的組件,均可以實現 VIP 模式,例如開源的 Nginx 以及負載均衡 SLB。
采用 VIP 模式后,代碼不需要感知 RIP,典型的開發場景配置如下:
nacos-client 配置
Properties properties = new Properties(); properties.setProperty(PropertyKeyConst.SERVER_ADDR, "{VIP}:8848"); NamingService namingService = NacosFactory.createNamingService(properties);
Dubbo 配置
dubbo.registry.address={VIP}:8848 dubbo.registry.protocol=nacos
域名配置
VIP 模式和直連模式都不具備可讀性,所以在實際生產中,往往還會給 VIP 掛載一個域名。
域名背后可以掛載 2 個 VIP 用作高可用,路由到相同的 rs;同時域名的存在也讓 VIP 的置換變得更加靈活,當其中一臺出現問題后,域名的 DNS 解析只會路由到另外一個正常的 VIP 上,為平滑置換預留了足夠的余地。
tips:一個域名可以綁定多個 A 記錄,一個 A 記錄對應一個 IPv4 類型的 VIP,DNS 域名服務器了對多個 A 記錄會有負載均衡策略和健康檢查機制。
VIP 模式的最終生產高可用版架構便產生了:
典型的開發場景配置只需要將 VIP 替換為域名即可。
nacos-client 配置
Properties properties = new Properties(); properties.setProperty(PropertyKeyConst.SERVER_ADDR, "mse-abc123-nacos.mse.aliyuncs.com:8848"); NamingService namingService = NacosFactory.createNamingService(properties);
Dubbo 配置
dubbo.registry.address=mse-abc123-nacos.mse.aliyuncs.com:8848 dubbo.registry.protocol=nacos
模式分析
高可用性。域名的可用性需要由 DNS 域名服務器負責,可用性保障較高;VIP 需要由高可用的負責均衡組件支持,且流量經過負載均衡轉發,對 VIP 的實現有較高可用性的要求。
可伸縮性。水平擴縮容時,只需要讓 VIP 感知即可,可伸縮性好。
依賴了域名解析系統和負載均衡系統,生產部署時,需要有配套設施的支持。
地址服務器介紹
說起地址服務器,可能大家對這個詞會感到陌生,因為地址服務器的概念主要在阿里內部比較普及,也是阿里中間件使用最廣的一種尋址模式。但是在開源領域,鮮有人會提及,但對于 Nacos 部署模式而言,地址服務器模式是除了 VIP 模式之外,另外一個生產可用的推薦部署方式。
地址服務器是什么?顧名思義,是用來尋址地址的服務器,發送一個請求,返回一串地址列表。盡管在阿里內部使用的真實地址服務器比這復雜一些,但下圖這個簡單的交互邏輯,幾乎涵蓋了地址服務器 90% 的內容。
實現一個簡易版本的地址服務器并不困難,推薦使用 Nginx 搭建一個靜態文件服務器管理地址, 當然你可以使用 Java!
@Controller public class AddressServerController { @RequestMapping("/nacos/serverlist") public ResponseEntity<String> serverlist() { return ResponseEntity.ok(). header("Content-Type", "text/plain"). body("192.168.0.1:8848\r\n" + "192.168.0.2:8848\r\n" + "192.168.0.3:8848\r\n" ); } }
使用地址服務器可以完成集群地址和客戶端配置的解耦,解決直連模式中無法動態感知集群節點變化的問題。客戶端根據地址服務器返回的列表,隨后采取直連模式連接;并且在客戶端啟動后,會啟動一個定時器,輪詢感知 AddressServer 的變化,進而及時更新地址列表。
并且地址服務器建議配置域名,增加可讀性。所以最后的部署交互架構是這樣的:
熟悉 RPC 的朋友看到這里應該能夠很好地對 VIP 模式和地址服務器模式做一個類比:
VIP 模式是類似 DNS 的服務端負載均衡技術
地址服務器是類似服務發現機制的客戶端負載均衡技術
nacos-client 的源碼專門適配了地址服務器模式,我們只需要配置好 addressServer 的 endpoint 即可。
nacos-client 配置
Properties properties = new Properties(); properties.setProperty(PropertyKeyConst.ENDPOINT, "{addressServerDomain}"); properties.setProperty(PropertyKeyConst.ENDPOINT_PORT, "8080"); NamingService namingService = NacosFactory.createNamingService(properties);
注意,這里 PropertyKeyConst.ENDPOINT 的字面量是:endpoint ,配置的是地址服務器的地址。
Dubbo 配置
dubbo.registry.address=0.0.0.0?endpoint=127.0.0.1&endpointPort=8080 dubbo.registry.protocol=nacos
dubbo.registry.address 的 url 可以任意填寫,因為當 serverAddr 和 endpoint 同時存在時,默認是優先從地址服務器去選址的。
此時,只需要把真實的 Nacos Server IP 配置到地址服務器中即可。
Dubbo 通過 url 的 kv 屬性將值透傳給 Nacos 創建 Nacos-Client。Dubbo + Nacos 使用地址服務器模式時,建議 Dubbo 版本 >= 2.7.4,nacos-client 版本 >= 1.0.1
模式分析
高可用性。域名的可用性需要由 DNS 域名服務器負責,可用性保障較高;地址服務器的職責單一,有較高的可用性;運行時 Client 直連 Nacos Server 節點,可用性靠 nacos-sdk 保障。
可伸縮性。水平擴縮容時,只需要讓地址服務器感知即可,可伸縮性好。
依賴了域名解析系統和地址服務器,生產部署時,需要有配套設施的支持。
Nacos 這款開源產品很好地支持了地址服務器這種模式,所以無論是大、中、小型公司在自建 Nacos 時,都可以選擇地址服務器模式去構建生產高可用的 Nacos 集群,地址服務器組件相對而言維護簡單,Nginx,Java 構建的 Web 服務器均可以輕松實現一個地址服務器。使用地址服務器后,nacos-client 與 nacos-server 之間仍然是直連訪問,所以可以很好的運作在平坦網絡下。
VIP 模式同樣推薦在自建場景使用,但運維成本相對地址服務器還是要高一些,可以根據自己公司的運維體系評估。經過了 VIP 的轉發,有利有弊。弊端比較明顯,網絡多了一跳,對于內網環境這樣的平坦網絡而言,是不必要的;優勢也同樣明顯,大公司往往環境比較復雜,數據中心之間有網絡隔離,應用和中間件可能部署在不同的網絡環境中,借助于 VIP 可以很好地做網絡打通,并且基于 VIP 可以很好實現安全組、ACL 等特性,更符合企業級訴求。
當然,組合使用地址服務器 + VIP 也是可以的,可以充分的融合兩者的優勢:
上述場景主要介紹了三種模式的具體部署方案,以及自建 Nacos 場景如何做到高可用,最后要介紹的是環境 MSE 是如何部署的。
MSE(微服務引擎)提供了 Nacos 注冊中心中心的全托管能力,除了要做上述提到的高可用、可伸縮、易用性,還要考慮以下的因素:
開源接受度。避免給用戶帶來太多理解成本,盡量做到對標開源,這樣用戶接受度才會高。
網絡隔離。MSE 提供的是 BaaS 化的能力,Nacos Server 部署在云產品 VPC,與用戶 VPC 是隔離的,需要解決網絡隔離問題。
網絡安全。MSE Nacos 是獨享模式,網絡上租戶隔離是最基本的要求。除此之外企業級用戶會對 MSE Nacos 提出安全組/ACL 控制的訴求,這些都需要考量。
綜上,MSE Nacos 最終采用的是域名 + SLB 的 VIP 模式。
MSE Nacos 提供兩個域名,其中公網域名可以用做本地開發測試,或者自建環境、混合云等場景的接入點,內網域名用做生產環境接入點。公網域名有帶寬限制,需要在集群創建時根據場景選擇合適的帶寬,而內網域名則沒有帶寬限制。公網域名請注意添加 IP 訪問白名單。
以上是“Nacos集群部署模式有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。