初識 Nacos(上) 學習《Spring Cloud 服務發現新選擇》

本文來自於個人我的主頁: 初識 Nacos(上) 學習《Spring Cloud 服務發現新選擇》,轉載請保留連接 ;)

最近在從零接觸Alibaba 開源項目Nacos,學習的是小馬哥(mercyblitz)的技術週報,以前看了後忘記總結,致使也沒有什麼印象。因此如今決定學習一章,寫一篇學習感悟,而且持續更新下去。首先這一章節主要講得是服務發現(Service Discovery),做爲 Spring Cloud 最核心功能特性之一,受到業界的普遍關注。
文章主題html

Spring Cloud 總體架構

在現行的 Spring Cloud 服務發現技術體系中,以 Spring Cloud Eureka 爲典型表明,它做爲官方推薦解決方案,被業 界普遍運用,然而其設計缺陷也很是之明顯。還有Spring Cloud Zookeeper和Spring Cloud Consul。那麼先介紹這三種的特色吧。
總體架構java

Spring Cloud Eureka 特色

優勢:

  • Spring Cloud 背書 - 推薦服務發現方案
  • CAP 理論 - AP模型,數據最終一致
  • 簡單易用 - 開箱即用,控制檯管理

缺點:

  • 內存限制 - 客戶端上報完整註冊信息,形成服務端內存浪費
  • 單一調度更新 - 客戶端簡單輪訓更新,增長服務器壓力
  • 集羣伸縮性限制 - 廣播式複製模型,增長服務器壓力

Spring Cloud Zookeeper 特色

優勢:

  • 成熟協調系統 - Dubbo、Spring Cloud等適配方案
  • CAP理論 - CP模型,ZAB算法,強數據一致性

缺點:

  • 維護成本 - 客戶端、Session狀態、網絡故障
  • 伸縮性限制 - 內存、GC、鏈接

Spring Cloud Consul 特色

優勢:

  • 通用方案 - 適用於 Service Mesh、 Java 生態
  • CAP理論 - AP 模型,Raft+Gossip 算法,數據最終一致

缺點:

  • 可靠性沒法保證 - 未通過大規模驗證
  • 非 Java 生態 - 維護和問題排查困難

綜上所述,讓我得出了Spring Cloud服務發現方案對比結果:
方案對比結果git

那麼這三種服務發現的基本模式是怎樣的呢?如今來談談Spring cloud 服務器發現模式。github

  • 首先都是服務器啓動 - 啓動註冊中心
  • 而後增長客戶端依賴 - sping-cloud-start-*
  • 最後就是客戶端註冊 - 記得在XXApplication.java文件中添加@EnableDiscoveryClient,註解開啓服務註冊與發現功能。

如下我以Eureka發現模式爲例:算法

  • 首先去Spring Initializr快速建立Eureka服務端和客戶端應用程序,而後導入本身的IDE。固然你若是嫌麻煩,也能夠直接導入已經寫好的工程
  • 而後在resources-application.properties中分別配置好二者的端口號,像客戶端這塊還須要寫好應用名稱、以及Eureka 服務器地址。
  • 最後咱們就直接能夠runXXApplication.java了,像個人服務端端口是12345,就訪問localhost:12345。頁面跳轉以下圖所示,恭喜你的Eureka服務已經起來了。
  • Eureka-client亦如此,成功run起來後,在以前的服務端頁面,也就是localhost:12345,刷新下會在Instances currently registered with Eureka出現EUREKA-CLIENT的狀態信息。

spring-cloud-alibaba-nacos-discovery 做爲 Spring Cloud Alibaba 服務發現的核心模塊,其架構基礎與 Spring Cloud 現行方案相同,均構建在 Spring Cloud Commons 抽象。所以,它在 Spring Cloud 服務發現的使用上,開發人員將不會心存任何的違和感。spring

Alibaba Nacos 生態介紹

從功能特性而言,spring-cloud-alibaba-nacos-discovery 僅是 Nacos 在 Spring Cloud 服務發現的解決方案,Nacos 在 Spring Cloud 中還支持分佈式配置的特性。與開源產品不一樣的是,Nacos 曾經歷過中國特點的超大流量考驗,以及巨型規模的集羣實施,不管從經驗積累仍是技術沉澱,現行 Spring Cloud 解決方案 都是沒法比擬的。然而這並不是說明它天衣無縫,在內部的評估和討論中,也發現其中差距和文化差別。爲了解決這些問題,討論將從總體架構和設計思考兩個方面,介紹 Nacos 與 Spring 技術棧整合狀況,以及與其餘開源方案的適配思考,總體上,下降 Nacos 使用門檻,使遷移成本接近爲零,達到「一次開發,處處運行」的目的。
那麼接下來咱們經過Github上,Spring Cloud Alibaba項目中官方給出的指導文檔來配置啓動 Nacos吧。瀏覽器

下載註冊中心

  1. 首先須要獲取 Nacos Server,支持直接下載和源碼構建兩種方式。服務器

    1. 直接下載:Nacos Server 下載頁
    2. 源碼構建:進入 Nacos Github 項目頁面,將代碼 git clone 到本地自行編譯打包,參考此文檔推薦使用源碼構建方式以獲取最新版本

啓動註冊中心

  1. 啓動 Server,進入解壓後文件夾或編譯打包好的文件夾,找到以下相對文件夾 nacos/bin,並對照操做系統實際狀況之下以下命令。網絡

    1. Linux/Unix/Mac 操做系統,執行命令 sh startup.sh -m standalone
    2. Windows 操做系統,執行命令 cmd startup.cmd

增長第三方依賴

  1. 首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

外部化配置

  1. 在應用的 /src/main/resources/application.properties 配置文件中配置 Nacos Server 地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

激活服務發現

  1. 使用 @EnableDiscoveryClient 註解開啓服務註冊與發現功能(SpringApplication.run)
@SpringBootApplication
        @EnableDiscoveryClient
        public class ProviderApplication {

            public static void main(String[] args) {
                SpringApplication.run(Application.class, args);
            }

            @RestController
            class EchoController {
                @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
                public String echo(@PathVariable String string) {
                        return string;
                }
            }
        }

應用啓動

  1. 增長配置,在 nacos-discovery-provider-example 項目的 /src/main/resources/application.properties 中添加基本配置信息
spring.application.name=service-provider
        server.port=18082
  1. 啓動應用,支持 IDE 直接啓動和編譯打包後啓動。架構

    1. IDE直接啓動:找到 nacos-discovery-provider-example 項目的主類 ProviderApplication,執行 main 方法啓動應用。
    2. 打包編譯後啓動:在 nacos-discovery-provider-example 項目中執行 mvn clean package 將工程編譯打包,而後執行 java -jar nacos-discovery-provider-example.jar啓動應用。

驗證

檢驗服務發現

在瀏覽器輸入此地址http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=service-provider 並點擊跳轉,能夠看到服務節點已經成功註冊到 Nacos Server。

查詢服務

相關文章
相關標籤/搜索