<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Nacos 集群部署模式最佳實(shí)踐

          共 6636字,需瀏覽 14分鐘

           ·

          2021-01-09 18:45


          作者 |?kiritomoe

          來源 |?https://mp.weixin.qq.com/s/sSTY5BivxrH4wR2-dNMkzw

          1 前言

          Nacos 支持兩種部署模式:單機(jī)模式和集群模式。在實(shí)踐中,我們往往習(xí)慣用單機(jī)模式快速構(gòu)建一個(gè) Nacos 開發(fā)/測試環(huán)境,而在生產(chǎn)中,出于高可用的考慮,一定需要使用 Nacos 集群部署模式。我的上一篇文章《一文詳解 Nacos 高可用特性》提到了 Nacos 為高可用做了非常多的特性支持,而這些高可用特性大多數(shù)都依賴于集群部署模式。這篇模式文章便是給大家介紹一下,在實(shí)踐中可以被采用的幾種集群部署模式,無論你是希望自行搭建 Nacos,還是希望對 MSE 商業(yè)版 Nacos 有一個(gè)更加深刻的理解,我都很樂意跟你分享下面的內(nèi)容。

          由于篇幅限制,本文不會介紹如何將一個(gè)多節(jié)點(diǎn)的 Nacos 集群啟動起來,主要介紹的是一個(gè)多節(jié)點(diǎn)的 Nacos 集群啟動之后,我們的應(yīng)用如何很好地連接到 Nacos 集群,即客戶端視角。這中間我們會引入一些其他組件以解決一些問題,本文標(biāo)題也可以叫做《Nacos 接入點(diǎn)最佳實(shí)踐》。我將會介紹以下三種方案:直連模式、 VIP 模式和地址服務(wù)器模式,并對它們進(jìn)行對比。

          2 直連模式

          直連模式是部署上最簡單,也是最容易理解的一種模式

          采用直連模式后,典型的開發(fā)場景配置如下:

          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ī)器置換,集群遷移等場景,所有的應(yīng)用都需要修改,這樣的方式并不靈活。所以這種模式并不是生產(chǎn)推薦的模式。

          模式分析

          • 高可用性。集群本身的擴(kuò)縮容必須要改動業(yè)務(wù)代碼才能被感知到,出現(xiàn)節(jié)點(diǎn)故障需要緊急下線、緊急擴(kuò)容等場景,讓業(yè)務(wù)修改代碼是不現(xiàn)實(shí)的,不符合高可用的原則。
          • 可伸縮性。同上,可伸縮性不友好。
          • 架構(gòu)簡單,用戶理解成本低
          • 沒有引入額外的組件,沒有新增組件的運(yùn)維成本

          3 VIP 模式

          VIP(Virtual IP) 模式可以很好的解決直連模式 IP 變化所帶來的應(yīng)用批量修改的問題。什么是 VIP 呢?

          • Real Server:處理實(shí)際請求的后端服務(wù)器節(jié)點(diǎn)。
          • Director Server:指的是負(fù)載均衡器節(jié)點(diǎn),負(fù)責(zé)接收客戶端請求,并轉(zhuǎn)發(fā)給 RS。
          • VIP:Virtual IP,DS 用于和客戶端通信的 IP 地址,作為客戶端請求的目標(biāo) IP 地址。
          • DIP:Directors 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í)慣性的帶了出去。

          知乎砍出正義一刀,PDD祭出終極防御:“供應(yīng)商員工”!輕松化解攻勢!

          VIP 幫助 Nacos Client 屏蔽了后端 RIP,相對于 RIP 而言,VIP 很少會發(fā)生變化。以擴(kuò)容場景為例,只需要讓 VIP 感知到即可,Nacos Client 只需要關(guān)注 VIP,避免了擴(kuò)容引起的代碼改造。

          只要是具備負(fù)載均衡能力的組件,均可以實(shí)現(xiàn) VIP 模式,例如開源的 Nginx 以及阿里云負(fù)載均衡 SLB。

          采用 VIP 模式后,代碼不需要感知 RIP,典型的開發(fā)場景配置如下:

          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)中,往往還會給 VIP 掛載一個(gè)域名。

          域名背后甚至可以掛載 2 個(gè) VIP 用作高可用,路由到相同的 rs;同時(shí)域名的存在也讓 VIP 的置換變得更加靈活,當(dāng)其中一臺出現(xiàn)問題后,域名的 DNS 解析只會路由到另外一個(gè)正常的 VIP 上,為平滑置換預(yù)留了足夠的余地。

          tips:一個(gè)域名可以綁定多個(gè) A 記錄,一個(gè) A 記錄對應(yīng)一個(gè) IPv4 類型的 VIP,DNS 域名服務(wù)器了對多個(gè) A 記錄會有負(fù)載均衡策略和健康檢查機(jī)制

          VIP 模式的最終生產(chǎn)高可用版架構(gòu)便產(chǎn)生了:

          典型的開發(fā)場景配置只需要將 VIP 替換為域名即可

          nacos-client 配置

          Properties?properties?=?new?Properties();
          properties.setProperty(PropertyKeyConst.SERVER_ADDR,?"mse-abc123qwe-nacos.mse.aliyuncs.com:8848");
          NamingService?namingService?=?NacosFactory.createNamingService(properties);

          Dubbo 配置

          dubbo.registry.address=mse-abc123qwe-nacos.mse.aliyuncs.com:8848
          dubbo.registry.protocol=nacos

          模式分析

          • 高可用性。域名的可用性需要由 DNS 域名服務(wù)器負(fù)責(zé),可用性保障較高;VIP 需要由高可用的負(fù)責(zé)均衡組件支持,且流量經(jīng)過負(fù)載均衡轉(zhuǎn)發(fā),對 VIP 的實(shí)現(xiàn)有較高可用性的要求。
          • 可伸縮性。水平擴(kuò)縮容時(shí),只需要讓 VIP 感知即可,可伸縮性好。
          • 依賴了域名解析系統(tǒng)和負(fù)載均衡系統(tǒng),生產(chǎn)部署時(shí),需要有配套設(shè)施的支持。

          4 地址服務(wù)器模式

          地址服務(wù)器介紹

          說起地址服務(wù)器,可能大家對這個(gè)詞會感到陌生,因?yàn)榈刂贩?wù)器的概念主要在阿里內(nèi)部比較普及,也是阿里中間件使用的最廣的一種地址尋址模式。但是在開源領(lǐng)域,鮮有人會提及,但對于 Nacos 部署模式而言,地址服務(wù)器模式是除了 VIP 模式之外,另外一個(gè)生產(chǎn)可用的推薦部署方式。

          地址服務(wù)器是什么?顧名思義,是用來尋址地址的服務(wù)器,發(fā)送一個(gè)請求,返回一串地址列表。盡管在阿里內(nèi)部使用的真實(shí)地址服務(wù)器比這復(fù)雜一些,但下圖這個(gè)簡單交互邏輯,幾乎涵蓋了地址服務(wù)器 90% 的內(nèi)容。

          實(shí)現(xiàn)一個(gè)簡易版本的地址服務(wù)器并不困難,推薦使用 nginx 搭建一個(gè)靜態(tài)文件服務(wù)器管理地址, 當(dāng)然你可以使用 Java!

          @Controller
          public?class?AddressServerController?{

          ????@RequestMapping("/nacos/serverlist")
          ????public?ResponseEntity?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ù)器可以完成集群地址和客戶端配置的解耦,解決直連模式中無法動態(tài)感知集群節(jié)點(diǎn)變化的問題??蛻舳烁鶕?jù)地址服務(wù)器返回的列表,隨后采取直連模式連接;并且在客戶端啟動后,會啟動一個(gè)定時(shí)器,輪詢感知 AddressServer 的變化,進(jìn)而及時(shí)更新地址列表。

          并且地址服務(wù)器建議配置域名,增加可讀性。所以最后的部署交互架構(gòu)是這樣的:

          JDK 16 即將發(fā)布,新特性速覽!

          熟悉 RPC 的朋友看到這里應(yīng)該能夠很好地對 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 屬性將值透傳給 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è)施的支持。

          5 部署模式對比


          直連模式VIP 模式地址服務(wù)器模式
          轉(zhuǎn)發(fā)模式直連代理(網(wǎng)絡(luò)多一跳)直連
          高可用弱,代碼配置不靈活,節(jié)點(diǎn)故障時(shí)無法批量變更強(qiáng)強(qiáng)
          可伸縮性強(qiáng)強(qiáng)
          部署成本負(fù)載均衡組件運(yùn)維成本高地址服務(wù)器運(yùn)維成本低
          負(fù)載均衡模式nacos-sdk 客戶端負(fù)載均衡負(fù)載均衡組件提供負(fù)載均衡能力nacos-sdk 客戶端負(fù)載均衡
          開源接受度低,地址服務(wù)器模式在開源領(lǐng)域不太普遍
          企業(yè)級能力不方便靈活靈活
          跨網(wǎng)絡(luò)內(nèi)網(wǎng)環(huán)境,平坦網(wǎng)絡(luò)VIP 模式靈活地支持反向代理、安全組、ACL 等特性,可以很好的工作在內(nèi)/外網(wǎng)環(huán)境中,使得應(yīng)用服務(wù)器和 Nacos Server 可以部署在不同的網(wǎng)絡(luò)環(huán)境中,借助 VIP 打通內(nèi)網(wǎng)環(huán)境,平坦網(wǎng)絡(luò)
          推薦使用環(huán)境開發(fā)測試環(huán)境生產(chǎn)環(huán)境,云環(huán)境生產(chǎn)環(huán)境

          Nacos 這款開源產(chǎn)品很好地支持了地址服務(wù)器這種模式,所以無論是大、中、小型公司在自建 Nacos 時(shí),都可以選擇地址服務(wù)器模式去構(gòu)建生產(chǎn)高可用的 Nacos 集群,地址服務(wù)器組件相對而言維護(hù)簡單,Nginx,Java 構(gòu)建的 Web 服務(wù)器均可以輕松實(shí)現(xiàn)一個(gè)地址服務(wù)器。使用地址服務(wù)器后,nacos-client 與 nacos-server 之間仍然是直連訪問,所以可以很好的運(yùn)作在平坦網(wǎng)絡(luò)下。

          VIP 模式同樣推薦在自建場景使用,但運(yùn)維成本相對地址服務(wù)器還是要高一些,可以根據(jù)自己公司的運(yùn)維體系評估。經(jīng)過了 VIP 的轉(zhuǎn)發(fā),有利有弊。弊端比較明顯,網(wǎng)絡(luò)多了一跳,對于內(nèi)網(wǎng)環(huán)境這樣的平坦網(wǎng)絡(luò)而言,是不必要的;優(yōu)勢也同樣明顯,大公司往往環(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è)級訴求。

          當(dāng)然,組合使用地址服務(wù)器 + VIP 也是可以的,可以充分的融合兩者的優(yōu)勢:

          6 MSE Nacos 的實(shí)踐

          上述場景主要介紹了三種模式的具體部署方案,以及自建 Nacos 場景如何做到高可用,最后要介紹的是阿里云環(huán)境 MSE 是如何部署的。

          MSE(微服務(wù)引擎)提供了 Nacos 注冊中心中心的全托管能力,除了要做上述提到的高可用、可伸縮、易用性,還要考慮以下的因素:

          • 開源接受度。避免給用戶帶來太多理解成本,盡量做到對標(biāo)開源,這樣用戶接受度才會高。
          • 網(wǎng)絡(luò)隔離。MSE 提供的是 BaaS 化的能力,Nacos Server 部署在云產(chǎn)品 VPC,與用戶 VPC 是隔離的,需要解決網(wǎng)絡(luò)隔離問題。
          • 網(wǎng)絡(luò)安全。MSE Nacos 是獨(dú)享模式,網(wǎng)絡(luò)上租戶隔離是最基本的要求。除此之外企業(yè)級用戶會對 MSE Nacos 提出安全組/ACL 控制的訴求,這些都需要考量。

          綜上,MSE Nacos 最終采用的是域名 + SLB 的 VIP 模式。

          MSE Nacos 提供兩個(gè)域名,其中公網(wǎng)域名可以用做本地開發(fā)測試,或者自建環(huán)境、混合云等場景的接入點(diǎn),內(nèi)網(wǎng)域名用做阿里云生產(chǎn)環(huán)境接入點(diǎn)。公網(wǎng)域名有帶寬限制,需要在集群創(chuàng)建時(shí)根據(jù)場景選擇合適的帶寬,而內(nèi)網(wǎng)域名則沒有帶寬限制。公網(wǎng)域名請注意添加 IP 訪問白名單。

          MSE 微服務(wù)引擎用戶交流群釘釘群號:23371469

          官網(wǎng)首頁:https://mse.console.aliyun.com/

          7 總結(jié)

          本文介紹了 Nacos 的三種部署模式,并就高可用、可伸縮、易用性等方面對各個(gè)模式進(jìn)行了介紹,并對自建 Nacos 場景的部署選型進(jìn)行了分析,同時(shí)介紹了 MSE Nacos 企業(yè)版的部署架構(gòu),對云環(huán)境部署 Nacos 進(jìn)行了補(bǔ)充。

          文章提及的三種模式其實(shí)也都是中間件組件常見的部署模式,不僅僅 Nacos,例如 Redis、DB 等場景,同樣有參考價(jià)值。

          本文提及了地址服務(wù)器這個(gè)可能在開源領(lǐng)域不太常見的組件,在阿里內(nèi)部則用的非常普遍。

          另外,Nacos 本身也提供了 addressServer 模塊,出于篇幅考慮沒有在本文中提及,后續(xù)我會單獨(dú)整理一篇文章介紹,感興趣的同學(xué)可以自行參考 Nacos 官方文檔和官方博客中的內(nèi)容。

          往期推薦

          知乎砍出正義一刀,PDD祭出終極防御:“供應(yīng)商員工”!輕松化解攻勢!

          IDEA中無法import自己工程中類的問題解決方法

          JDK 16 即將發(fā)布,新特性速覽!

          云服務(wù)商正在殺死開源商業(yè)模式

          Java 項(xiàng)目權(quán)威排名:Spring生態(tài)搶鏡,Gradle戰(zhàn)勝M(fèi)aven排第2,點(diǎn)擊查看更多...

          當(dāng)會打王者榮耀的AI學(xué)會踢足球,一不小心拿下世界冠軍!



          瀏覽 64
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱╳╳AⅤ毛片 | 久草超碰在线 | 怡红院院大香蕉 | 日本女人一区 | 日韩中文在线视频 |