Spring Cloud Alibaba Nacos作為服務注冊發現組件

nacos.png

什么是 Nacos?

Nacos 是阿里巴巴推出來的開源項目Spring-Cloud-Alibaba中的一個子項目,這是一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺。

Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。

Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。 Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、云原生范式) 的服務基礎設施。

官網:https://nacos.io

源碼:https://github.com/alibaba/nacos

下載Nacos服務端壓縮包:https://github.com/alibaba/nacos/releases

全景圖:

image.png

架構及概念:

image.png

服務 (Service)
服務是指一個或一組軟件功能(例如特定信息的檢索或一組操作的執行),其目的是不同的客戶端可以為不同的目的重用(例如通過跨進程的網絡調用)。Nacos 支持主流的服務生態,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.

服務注冊中心 (Service Registry)
服務注冊中心,它是服務,其實例及元數據的數據庫。服務實例在啟動時注冊到服務注冊表,并在關閉時注銷。服務和路由器的客戶端查詢服務注冊表以查找服務的可用實例。服務注冊中心可能會調用服務實例的健康檢查 API 來驗證它是否能夠處理請求。

服務元數據 (Service Metadata)
Nacos數據(如配置和服務)描述信息,如服務版本、權重、容災策略、負載均衡策略、鑒權配置、各種自定義標簽 (label),從作用范圍來看,分為服務級別的元信息、集群的元信息及實例的元信息。

服務提供方 (Service Provider)
是指提供可復用和可調用服務的應用方

服務消費方 (Service Consumer)
是指會發起對某個服務調用的應用方

配置 (Configuration)
在系統開發過程中通常會將一些需要變更的參數、變量等從代碼中分離出來獨立管理,以獨立的配置文件的形式存在。目的是讓靜態的系統工件或者交付物(如 WAR,JAR 包等)更好地和實際的物理運行環境進行適配。配置管理一般包含在系統部署的過程中,由系統管理員或者運維人員完成這個步驟。配置變更是調整系統運行時的行為的有效手段之一。

配置管理 (Configuration Management)
在數據中心中,系統中所有配置的編輯、存儲、分發、變更管理、歷史版本管理、變更審計等所有與配置相關的活動統稱為配置管理。

名字服務 (Naming Service)
提供分布式系統中所有對象(Object)、實體(Entity)的“名字”到關聯的元數據之間的映射管理服務,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服務發現和 DNS 就是名字服務的2大場景。

配置服務 (Configuration Service)
在服務或者應用運行過程中,提供動態配置或者元數據以及配置管理的服務提供者。

Nacos VS Spring Cloud Eureka
相對于 Spring Cloud Eureka 來說,Nacos 更強大。

Nacos = Spring Cloud Eureka + Spring Cloud Config

Nacos 可以與 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config。

通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現配置的動態變更。
通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現服務的注冊與發現。

安裝Nacos

配置數據持久化

目前Nacos僅支持Mysql數據庫,且版本要求:5.6.5+

Nacos的數據庫腳本文件在我們下載Nacos-server時的壓縮包中就有

進入nacos-server-1.1.3\nacos\conf目錄,初始化文件:nacos-mysql.sql

此處我創建一個名為 mynacos 的數據庫,然后執行初始化腳本,成功后會生成 11 張表


image.png

這里是需要修改Nacos-server的配置文件

Nacos-server其實就是一個Java工程或者說是一個Springboot項目,他的配置文件在nacos-server-1.1.3\nacos\conf目錄下,名為 application.properties,在文件底部添加數據源配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/mynacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

啟動與關閉服務

#linux平臺
[root@nacos-71 nacos]# /usr/local/nacos/bin/startup.sh -m standalone

[root@nacos-71 nacos]# /usr/local/nacos/bin/shutdown.sh

# windows平臺
startup.cmd -m standalone

shutdown.cmd

將應用注冊到Nacos

  • 引入maven依賴:
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.10.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<!--Nacos服務發現與注冊相關-->
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <!--整合Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.SR3</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!--整合Spring Cloud Alibaba-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>0.9.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • 引入application.yml配置
server:
  port: 9060
spring:
  application:
    name: orderServer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

Nacos服務發現的領域模型

  • Namespace:實現各環境的隔離(如開發、測試、預發、線上),默認public
  • Group:不同服務可以分到同一個組,默認DEFAULT_GROUP
  • Service:微服務
  • Cluster:對指定微服務的一個虛擬劃分,默認DEFAULT
  • Instance:微服務實例

指定Namespace:
首先在控制臺上新建Namespace

image.png

image.png

spring
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        # 指定namespace 這個可以做到開發環境,預發環境,線上環境的隔離,同環境才可以調用
        namespace: cede430e-9610-42ba-9a1e-11bd98ab747e
        #指定集群名稱
        cluster-name: shanghai

Nacos通過Namespace實現了各環境的隔離,永遠只能調用相同Namespace下的實例,而不能夸Namespace調用

Cluster的作用:
指定集群名稱,為異地災備考慮,如用戶中心集群同時部署在了上海和深圳機房,同城同一集群會優先調用,如果當同城同一集群服務不可用的時候可以進行跨城跨集群調用。

要實現Nacos注冊中心同一集群優先調用,必須擴展Ribbon,請點擊:Ribbon的負載均衡策略、原理和擴展

元數據作用:
提供服務的描述信息,讓服務調用更加靈活(如服務版本控制)
指定元數據:

spring
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        metadata:
          # 自己這個實例的版本
          version: V1
          # 允許調用的提供者版本
          target-version: V1

目前,實現Nacos的元數據metadata的版本控制,就必須要對Ribbon進行改造,Spring Cloud Alibaba官方會在后續版本中加入此功能

對Ribbon的改造以及Ribbon的剖析請點擊:Ribbon的負載均衡策略、原理和擴展

參考:

Spring Cloud與Alibaba Nacos整合

https://www.cnblogs.com/larscheng/p/11422909.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容