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