Nacos註冊中心 (介紹與配置)

来源:https://www.cnblogs.com/buchizicai/archive/2023/02/08/17093508.html
-Advertisement-
Play Games

Nacos 通過提供簡單易用的動態服務發現、服務配置、服務共用與管理等服務基礎設施,幫助用戶在雲原生時代,在私有雲、混合雲或者公有雲等所有雲環境中,更好的構建、交付、管理自己的微服務平臺,更快的復用和組合業務服務,更快的交付商業創新的價值,從而為用戶贏得市場。 ...


Nacos註冊中心

和Euraka一樣都是註冊中心,但Nacos不需要註冊Nacos,因為阿裡巴巴已經註冊在好了。只需要下載安裝後打開即可

Windows安裝

開發階段採用單機安裝即可

1.1.下載安裝包

在Nacos的GitHub頁面,提供有下載鏈接,可以下載編譯好的Nacos服務端或者源代碼:

GitHub主頁:https://github.com/alibaba/nacos

GitHub的Release下載頁:https://github.com/alibaba/nacos/releases

如圖:

image

SpringCloud文件中已經準備了安裝包:

image

windows版本使用nacos-server-1.4.1.zip包即可。

1.2.解壓

將這個包解壓到任意非中文目錄下,如圖:

image

目錄說明:

  • bin:啟動腳本
  • conf:配置文件

1.3.埠配置

Nacos的預設埠是8848,如果你電腦上的其它進程占用了8848埠,請先嘗試關閉該進程。

如果無法關閉占用8848埠的進程,也可以進入nacos的conf目錄,修改配置文件中的埠:

image

修改其中的內容:

image

1.4.啟動

啟動非常簡單,進入bin目錄,結構如下:

image

然後執行命令即可:

  • windows命令:

    startup.cmd -m standalone
    

執行後的效果如圖:

image

1.5.訪問

在瀏覽器輸入地址:http://127.0.0.1:8848/nacos即可:

image

預設的賬號和密碼都是nacos,進入後:

image

Linux安裝

Linux或者Mac安裝方式與Windows類似。

2.1.安裝JDK

Nacos依賴於JDK運行,索引Linux上也需要安裝JDK才行。

上傳jdk安裝包:

image

上傳到某個目錄,例如:/usr/local/

然後解壓縮:

tar -xvf jdk-8u144-linux-x64.tar.gz

然後重命名為java

配置環境變數:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

設置環境變數:

source /etc/profile

2.2.上傳安裝包

如圖:

image

也可以直接使用文件中的tar.gz:

image

上傳到Linux伺服器的某個目錄,例如/usr/local/src目錄下:

image

2.3.解壓

命令解壓縮安裝包:

tar -xvf nacos-server-1.4.1.tar.gz

然後刪除安裝包:

rm -rf nacos-server-1.4.1.tar.gz

目錄中最終樣式:

image

目錄內部:

image

2.4.埠配置

與windows中類似

2.5.啟動

在nacos/bin目錄中,輸入命令啟動Nacos:

sh startup.sh -m standalone

服務註冊到Nacos並拉取

Nacos是SpringCloudAlibaba的組件,而SpringCloudAlibaba也遵循SpringCloud中定義的服務註冊、服務發現規範。因此使用Nacos和使用Eureka對於微服務來說,並沒有太大區別。

主要差異在於:

  • 依賴不同
  • 服務地址不同

0) 啟動Nacos

進入bin目錄,結構如下:

image

然後執行命令即可:

  • windows命令:

    startup.cmd -m standalone
    

執行後的效果如圖:

image

在瀏覽器輸入地址:http://127.0.0.1:8848/nacos即可。預設賬號密碼都是 nacos

1)引入依賴

註意:不要忘了註釋掉eureka的依賴。

在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

然後在生產者user-service和消費者order-service中的pom文件中引入nacos-discovery依賴:

<!--客戶端依賴-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)配置nacos地址

註意:不要忘了註釋掉eureka的地址

在生產者user-service和消費者order-service的application.yml中添加nacos地址:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 #配置nacos訪問地址(預設也是這個)

3)消費者:服務拉取與負責均衡

我們要去eureka-server中拉取user-service服務的實例列表,並且實現負載均衡。

  • 加負責均衡註解
    在order-service的OrderApplication中,給RestTemplate這個Bean添加一個@LoadBalanced註解:

    image

  • 修改訪問服務路徑
    修改order-service服務中的cn.itcast.order.service包下的OrderService類中的queryOrderById方法。修改訪問的url路徑,用服務名代替ip、埠:

    spring會自動幫助我們從eureka-server端,根據userservice這個服務名稱,獲取實例列表,而後完成負載均衡。

    image

服務分級存儲模型

① 一級是服務,例如userservice
② 二級是集群,例如杭州、惠州、上海
③ 三級是實例,例如廣州機房的某台部署了userservice的伺服器

一個服務可以有多個實例,例如我們的user-service,可以有:

  • 127.0.0.1:8081
  • 127.0.0.1:8082
  • 127.0.0.1:8083

假如這些實例分佈於全國各地的不同機房,例如:

  • 127.0.0.1:8081,在上海機房
  • 127.0.0.1:8082,在上海機房
  • 127.0.0.1:8083,在杭州機房

Nacos就將同一機房內的實例 劃分為一個集群

也就是說,user-service是服務,一個服務可以包含多個集群,如杭州、上海,每個集群下可以有多個實例,形成分級模型,如圖:

image

微服務互相訪問時,應該儘可能訪問同集群實例,因為本地訪問速度更快。當本集群內不可用時,才訪問其它集群。例如:

image

杭州機房內的order-service應該優先訪問同機房的user-service。

生成者:配置集群

每一個註冊的服務都可以設置集群,以便後續快速訪問

修改生產者user-service的application.yml文件,添加集群配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名稱(一般以地區簡寫來表示)

重啟兩個user-service實例後,我們可以在nacos控制台看到下麵結果:

image

我們再次複製一個user-service啟動配置,添加屬性:

-Dserver.port=8083 
-Dspring.cloud.nacos.discovery.cluster-name=SH

配置如圖所示:

image

啟動UserApplication3後再次查看nacos控制台:

image

消費者:同集群優先的負載均衡

NacosRule負載均衡策略
① 優先選擇同集群服務實例列表
② 本地集群找不到提供者,才去其它集群尋找,並且會報警告
③ 確定了可用實例列表後,再採用隨機負載均衡挑選實例

預設的ZoneAvoidanceRule並不能實現根據同集群優先來實現負載均衡。

因此Nacos中提供了一個NacosRule的實現,可以優先從同集群中挑選實例。

1)給消費者order-service配置集群信息

修改order-service的application.yml文件,添加集群配置:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 優先消費指定集群的名稱

2)修改負載均衡規則

修改消費者order-service的application.yml文件,修改負載均衡規則:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規則 

生產者:權重配置

① Nacos控制台可以設置實例的權重值,0~1之間

② 同集群內的多個實例,權重越高被訪問的頻率越高

③ 權重設置為0則完全不會被訪問

實際應用場景:

伺服器設備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。

但預設情況下NacosRule是同集群內隨機挑選,不會考慮機器的性能問題。

因此,Nacos提供了權重配置來控制訪問頻率,權重越大則訪問頻率越高。

操作:

在nacos控制台,找到生產者user-service的實例列表,點擊編輯,即可修改權重:

image

在彈出的編輯視窗,修改權重:

image

環境隔離namespace

Nacos提供了namespace來實現環境隔離功能【一般用於隔離開發環境dev和生產環境prod】

  • nacos中可以有多個namespace

  • namespace下可以有group、service等(如:與錢有關的服務就放在一組)

  • 不同namespace之間相互隔離,例如不同namespace的服務互相不可見

    相互隔離是無法相互訪問的意思

image

創建namespace

預設情況下,所有service、data、group都在同一個namespace,名為public:

image

我們可以點擊頁面新增按鈕,添加一個namespace:

image

然後,填寫表單:

image

就能在頁面看到一個新的namespace(該空間的ID是由UUID生成的):

image

給微服務配置namespace

給微服務配置namespace只能通過修改配置來實現。

例如,修改order-service的application.yml文件:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填ID

重啟order-service後,訪問控制台,可以看到下麵的結果:

image

image

此時消費者order-service訪問生產者user-service,因為namespace不同,會導致找不到userservice,控制台會報錯:

image

臨時/非臨時實例

Nacos的服務實例分為兩種l類型:

  • 臨時實例:如果實例宕機超過一定時間,會從服務列表剔除,預設的類型。

  • 非臨時實例:如果實例宕機,不會從服務列表剔除,也可以叫永久實例。

配置一個服務實例為永久實例:(預設為臨時實例)

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 設置為非臨時實例

Nacos與Eureka區別

Nacos和Eureka整體結構類似,服務註冊、服務拉取、心跳等待,但是也存在一些差異:

image

  • Nacos與eureka的共同點

    Eureka和Nacos都有的兩個細節功能:
    I、服務消費者需要找userservice名的服務,Euraka就會將以userservice命名的服務埠以列表(緩存列表)的形式返回給消費者,這樣消費者就不需要一直訪問Euraka造成伺服器壓力。但同時為了保證userservice命名的服務有變化時消費者拉取信息的準確性,所以Euraka每30s更新列表並返回給消費者。
    II、服務提供者都需要一定時間內發送請求進行心跳檢測,讓Euraka和Nacos知道該提供者還活著。(Nacos心跳檢測更頻繁)

    • 都支持服務註冊和服務拉取
    • 都支持服務提供者心跳方式做健康檢測
  • Nacos與Eureka的區別

    • Nacos支持服務端主動檢測提供者狀態:臨時實例採用心跳模式,非臨時實例採用主動檢測模式

      主動模式檢測:Nacos會主動發送請求去檢測提供者是否有存在

    • 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除

    • Nacos支持服務列表變更的消息推送模式,服務列表更新更及時

      白話:當提供者(生產者)有變化時會主動告訴消費者。
      優勢:Eureka可能有30s的誤差,但Nacos沒有

    • Nacos集群預設採用AP方式,當集群中存在非臨時實例時,採用CP模式;Eureka採用AP方式

本文來自博客園,作者:不吃紫菜,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接:https://www.cnblogs.com/buchizicai/p/17093508.html及本聲明。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JDK 8 是一次重大的版本升級,新增了非常多的特性,其中之一便是 CompletableFuture。自此從 JDK 層面真正意義上的支持了基於事件的非同步編程範式,彌補了 Future 的缺陷。 在我們的日常優化中,最常用手段便是多線程並行執行。這時候就會涉及到 CompletableFutur... ...
  • Pandas Pandas的主要功能 具備對其功能的數據結構DataFrame、Series 集成時間序列功能 提供豐富的數學運算和操作 靈活處理缺失數據 Series **Series介紹:**Series是一種類似於一維數組的對象,由一組數據和一組與之相關的數據標簽(索引)組成,比較像列表和字典 ...
  • 教程簡介 COBOL概述 - 從簡單和簡單的步驟學習Cobol,從基本到高級概念,包括概述,環境設置,程式結構,基本語法,數據類型,基本動詞,數據佈局,條件語句,迴圈語句,字元串處理,表格處理,文件處理,文件組織,文件訪問模式,文件處理動詞,子程式,內部排序,資料庫介面,面試問題。 教程目錄 COB ...
  • 本篇我們將完成一個RESP的socket的服務端,初步完成一個單機版緩存。 另外我們還需要完成命令的動態路由。 源碼:https://github.com/weloe/Java-Distributed-Cache ...
  • 認證組件 訪問某個介面 需要登陸後才能訪問 #第一步 寫一個登錄功能 用戶表 User表 UserToken表 :存儲用戶登錄狀態 【這個表可以沒有 如果沒有 把欄位直接卸載User表上也可以】 登錄介面 model.py class Books(models.Model): name = mode ...
  • 為了支持更加廣泛的業務場景,可視化編排系統近期需要支持對緩存的操作功能,為保證編排系統的性能,服務的執行過程採用了非同步的方式,因此我們考慮使用Redis的非同步客戶端來完成對緩存的操作。 ...
  • 教程簡介 初學者的ASP.NET Core教程 - 從簡單和簡單的步驟學習ASP.NET Core,從基本到高級概念,包括概述,環境設置,新項目,項目佈局,Project.Json,配置,中間件,異常,靜態文件,設置MVC,MVC設計模式,路由,屬性路由,操作結果,視圖,設置實體框架,DBConte ...
  • 本文內容整理自 **博學谷狂野架構師 ** 多線程概述 基礎概念 進程和線程 進程是程式運行資源分配的最小單位 ​ 進程是操作系統進行資源分配的最小單位,其中資源包括:CPU、記憶體空間、磁碟IO等,同一進程中的多條線程共用該進程中的全部系統資源,而進程和進程之間是相互獨立的。進程是具有一定獨立功能的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...