Spring Cloud Alibaba 之 Nacos


Nacos 技術講解

一提到分布式系統就不的不提一下 CAP 原則

什么是CAP

CAP原則又稱CAP定理,指的是在一個分布式系統中,一致性(Consistency)、可用性(Availability)、分區容錯性(Partition tolerance)。CAP 原則指的是,這三個要素最多只能同時實現兩點,不可能三者兼顧。

CAP 的原則下 Alibaba Naos 同時支持AP和CP模式,他根據服務注冊選擇臨時和永久來決定走AP模式還是CP模式,他這里支持CP模式對於我的理解來說,應該是為了配置中心集群,因為nacos可以同時作為注冊中心和配置中心,因為他的配置中心信息是保存在nacos里面的,假如因為nacos其中一台掛掉后,還沒有同步配置信息, 就可能發生配置不一致的情況., 配置中心的配置變更是服務端有監聽器,配置中心發生配置變化, 然后服務端會監聽到配置發生變化,從而做出改變
下面我搭建一個簡單的微服務系統,針對這個系統進行講解

(個人服務器,流量有限 ,請大家珍惜)點擊項目體驗地址https://ityml.com/index

系統架構圖:

這個主要完成一個一個前端頁面進行實時計算的功能,大家可以理解為一個簡單的計算器.

  • website : 前端
  • Gateway :服務網關
  • UserCenter : 用戶服務
  • MqCenter: 消息服務
  • AlogirthmCenter: 計算服務
  • ConfigCenter: 配置中心
  • ServiceDiscovery(Nacos):服務發現
  • CPP 為C 語言編寫的計算流程

此項目包括用到的技術棧包括,Spring Cloud Alibaba/Spring Boot/Mysql/MQ/Linux 等

什么是Nacos

官方文檔

Nacos提供「注冊中心」、「配置中心」和「動態DNS服務」三大功能。
上面是Nacos 的官網大家可以自行了解下,對Nacos 做一個深入的了解,正所謂師傅領進門,修行在個人,大家還要多學習,多了解

天也不早了 ,人也不少了,閑話少說,先干正事。
** Nacos 下載地址**
選擇對應版本進行解壓(注意 Nacos 解壓后 是一個完整的運行包,如果用的不熟練,不要動里面的配置信息)

有的同學私信我說不知道該如何選擇Nacos 版本,這里補充一下Nacos 版本的選擇技巧
在項目中我們會引入引入一下dependencyManagement

 <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>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

        </dependencies>
    </dependencyManagement>

shift+鼠標左鍵 開打 spring-cloud-alibaba-dependencies 后會進入到

 <properties>
        <sentinel.version>1.6.3</sentinel.version>
        <oss.version>3.1.0</oss.version>
        <seata.version>0.7.1</seata.version>
        <nacos.client.version>1.1.1</nacos.client.version>
        <nacos.config.version>0.8.0</nacos.config.version>
        <acm.version>1.0.9</acm.version>
        <ans.version>1.0.1</ans.version>
        <aliyun.sdk.version>4.4.1</aliyun.sdk.version>
        <alicloud.context.version>1.0.5</alicloud.context.version>
        <aliyun.sdk.edas.version>2.44.0</aliyun.sdk.edas.version>
        <rocketmq.starter.version>2.0.2</rocketmq.starter.version>
        <schedulerX.client.version>2.1.6</schedulerX.client.version>
        <dubbo.version>2.7.3</dubbo.version>
        <dubbo-spring-boot.version>2.7.1</dubbo-spring-boot.version>
        <dubbo-registry-nacos.version>2.7.1</dubbo-registry-nacos.version>
        <aliyun.java.sdk.dysmsapi>1.1.0</aliyun.java.sdk.dysmsapi>
        <aliyun.sdk.mns>1.1.8.6</aliyun.sdk.mns>
        <aliyun.java.sdk.dyvmsapi>1.1.1</aliyun.java.sdk.dyvmsapi>
    </properties>

搜索nacos 后會發現 <nacos.client.version>1.1.1</nacos.client.version> nacos 版本為 1.1.1,所以我們在下載naocs 的時候也盡量選擇1.1.1 版本 作為服務端
這里的版本是跟着 spring-cloud-alibaba 的版本走的 不用的版本的 spring-cloud-alibaba 集成的Nacos 客戶端的版本也是不一樣的,所以在選擇nacos 服務端的
時候要看好版本,防止出現不兼容的情況。

下載完成后解壓后進入到 bin 目錄 在終端運行命令

  • MAC
    sh startup.sh -m standalone
    (standalone代表着單機模式運行,后看會單獨講解集群模式的搭建和啟動方法)
  • Windows
    cmd startup.cmd

啟動成功后 默認賬號密碼 nacos/nacos(初始賬號密碼)

登錄后可以看到右上角中英文切換,英語不好的同學們 可以切換到中文

  • 配置管理主要是用來做項目配置,比如配置文件等可以用nacos來管理 因為nacos不僅僅是服務中心,也是配置中心(后面有講)
    我們開發項目的配置一般有以下幾種做法:
    1. 硬編碼--作為類字段的形式存在,導致:動態修改困難,沒有持久化
    2. 配置文件( properties、yml 文件等)--導致:配置動態變更,可能需要重啟應用,讓配置生效。當然,你也可以在代碼中增加一個定時任務,如每隔 10s 讀取配置文件內容,讓最新的配置能夠及時在應用中生效,這樣也就免 去了重啟應用這個“較重”的運維操作。
    3. DB 配置表--導致:配置動態變更,可能需要通過暴露管理接口去解決。

Nacos 真正將配置從應用中剝離出來,統一管理,優雅的解決了配置的動態變更、持久化、運維成本等問題。應用自身既不需要去添加管理配置接口,也不需要自己去實現配置的持久化,更不需要引入“定時任務”以便降低運維成本。Nacos 提供的配置管理功能,將配置相關的所有邏輯都收攏,並且提供簡單易用的 SDK,讓應用的配置可以非常方便被 Nacos 管理起來不僅如此,Nacos提供 DNS-F功能, 可以與K8S、Spring Cloud和Dubbo等多個開源產品進行集成,實現服務的注冊功能。

  • 服務發現使用來管理注冊到nacos 上的微服務,可以實現服務下線等功能。
  • 命名空間是用來做服務環境區分,當項目需要開發,測試, 生產等多個不同的配置, 命名空間就可以做配置隔離。
  • 集群管理 后面會單獨講解

Nacos 服務發現領域模型

  • Namespace 命名空間,具體作用上面已經講過了,Group 使用是服務分組,默認的是default ,Group 可以把不同的微服務,划分到統一個分組里,可以方便管理,但是在alibaba 0.9.0 里是沒有用到這個
  • Service 微服務(用戶微服務),Cluster 是微服務的集群,是對指定微服務的一個虛擬划分,為了容災,微服務會同時部署多個區域多個機房,比如 beijing ,shanghai 等 Cluster
  • Instance 微服務實例
    具體使用方法會在下一節講解Spring Cloud Alibaba 之 user服務
    Nacos 元數據
  • 提供描述信息
  • 讓微服務調用更加靈活,比如 服務在線上會多個版本共存,用戶的V1 版本調用支付的V1版本,用戶的v2版本調用支付的v2版本,v1v2 不能相互調因為不兼容,這種場景顯示中很多,用元數據就很好解決
    這個問題,元數據的格式為 key=value
    下一章會講解如何在Nacos 上注冊一個簡單的微服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM