2019快結束,也有很久沒寫博客了,今天我們來談談Nacos,如果對您有幫助,麻煩左上角點個關注 ,謝謝 ! 嘻嘻 今天先寫第一篇
文章目錄
為什么要使用Nacos
Eureka 閉源
相信到現在,Eureka 2.0 閉源已經不是什么新鮮事了。在2017-2018年,幾乎在國內掀起了一陣SpringCloud的熱潮,幾乎很大一部分人群隨着對SpringBoot的關注,都開始關注起來了SpringCloud。而由於Eureka注冊中心的易整合等優點,更是大多數使用SpringCloud的首選注冊中心。但是隨着Eureka官網的宣告,如下。
簡單點說就是開源項目已經停止維護之類的話,這里就不做介紹了,感興趣可以上Eureka的Github地址上查看 https://github.com/Netflix/eureka/wiki
Nacos也是一個優秀的注冊中心,並且由阿里巴巴開源,並且最近的熱度很高,已經更新到1.14 版本了,基本上更新的很頻繁,也是一個Eureka閉源后的好的選擇。
從下面這張可以看出Nacos的優勢
從配置中心角度來看,性能方面Nacos的讀寫性能最高,Apollo次之,Spring Cloud Config依賴Git場景不適合開
放的大規模自動化運維API。功能方面Apollo最為完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud
Config不帶運維管理界面,需要自行開發。Nacos的一大優勢是整合了注冊中心、配置中心功能,部署和操作相比
Apollo都要直觀簡單,因此它簡化了架構復雜度,並減輕運維及部署工作。
綜合來看,Nacos的特點和優勢還是比較明顯的,下面我們一起進入Nacos的世界。
Nacos的優勢
什么是Nacos
Nacos 支持基於 DNS 和基於 RPC 的服務發現(可以作為springcloud的注冊中心)、動態配置服務(可以做配置中心)、動態 DNS 服務。
官方介紹是這樣的:
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平台。 Nacos 是構建以“服務”為中心的現代應用架構(例如微服務范式、雲原生范式)的服務基礎設施。
官網地址: https://nacos.io/zh-cn/docs/what-is-nacos.html
一張圖看到Nacos優勢
包括虎牙在微服務改造方面 采用Nacos的好處
文章地址 : https://nacos.io/en-us/blog/huya-practice.html
全景圖 :
架構及概念的理解
- 服務 (Service)
服務是指一個或一組軟件功能(例如特定信息的檢索或一組操作的執行),其目的是不同的客戶端可以為不同的目的重用(例如通過跨進程的網絡調用)。Nacos 支持主流的服務生態,如 Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful Service.
- 服務注冊中心 (Service Registry)
服務注冊中心,它是服務,其實例及元數據的數據庫。服務實例在啟動時注冊到服務注冊表,並在關閉時注銷。服務和路由器的客戶端查詢服務注冊表以查找服務的可用實例。服務注冊中心可能會調用服務實例的健康檢查 API 來驗證它是否能夠處理請求。
- 服務元數據 (Service Metadata)
服務元數據是指包括服務端點(endpoints)、服務標簽、服務版本號、服務實例權重、路由規則、安全策略等描述服務的數據
- 服務提供方 (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)
在服務或者應用運行過程中,提供動態配置或者元數據以及配置管理的服務提供者
總結一下優勢
相對於 Spring Cloud Eureka來說,Nacos 更強大。
為什么呢 ?
Nacos 相當於 一挑 2
- 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 快速入門 - Quick Start
1.1 安裝Nacos Server
1.1.1 預備環境准備
Nacos 依賴 Java 環境來運行。如果您是從代碼開始構建並運行Nacos,還需要為此配置 Maven環境,請確保是在
以下版本環境中安裝使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下載 & 配置。
- Maven 3.2.x+;下載 & 配置。
1.1.2 下載源碼或者安裝包
你可以通過源碼和發行包兩種方式來獲取 Nacos。
從 Github 上下載源碼方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease‐nacos clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
下載編譯后壓縮包方式
您可以從 最新穩定版本 下載 nacos-server-$version.zip
包,本教程使用nacos-server-1.1.3版本。
下載地址:https://github.com/alibaba/nacos/releases
下載后解壓:
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
1.1.3啟動服務器
nacos的默認端口是8848,需要保證8848默認端口沒有被其他進程占用。
進入安裝程序的bin目錄:
Linux/Unix/Mac
啟動命令(standalone代表着單機模式運行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試如下運行:
bash startup.sh -m standalone
Windows啟動方式:
啟動命令:
cmd startup.cmd
或者雙擊startup.cmd運行文件。
啟動成功,可通過瀏覽器訪問 http://127.0.0.1:8848/nacos ,打開如下nacos控制台登錄頁面:
使用默認用戶名:nacos,默認密碼:nacos 登錄即可打開主頁面。
1.1.4OPEN API 配置管理測試
啟動nacos成功后,可通過nacos提供的http api驗證nacos服務運行是否正常。
下邊我們通過 curl工具來測試nacos的open api:
curl 是開發中常用的命令行工具,可以用作HTTP協議測試。
本教程下載curl的windows版本:curl-7.66.0_2-win64-mingw,下載地址:https://curl.haxx.se/windows/
下載完成進入curl-7.66.0_2-win64-mingw的bin目錄,進行下邊的測試,通過測試可判斷nacos是否正常工作:
發布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
上邊的命令表示向nacos發布一個配置:
點擊詳情
獲取配置
向nacos發布配置成功,就可以通過客戶端從nacos獲取配置信息,執行下邊的命令:
獲取 :curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
通過測試發現,可以從nacos獲取前邊發布的配置:HelloWorld
1.1.5 關閉服務器
關閉nacos服務的方式如下:
Linux/Unix/Mac方式:
sh shutdown.sh
Windows
cmd shutdown.cmd
或者雙擊shutdown.cmd運行文件。
外部mysql數據庫支持
單機模式時nacos默認使用嵌入式數據庫實現數據的存儲,若想使用外部mysql存儲nacos數據,需要進行以下步
驟:
- 1.安裝數據庫,版本要求:5.6.5+ ,mysql 8 以下 ,如果沒有的話使用docker的數據庫也行
- 2.初始化mysql數據庫,新建數據庫nacos_config,數據庫初始化文件:${nacoshome}/conf/nacosmysql.sql
- 3.修改${nacoshome}/conf/application.properties文件,增加支持mysql數據源配置(目前只支持
mysql),添加mysql數據源的url、用戶名和密碼。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.100.128:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123456
1.2 Nacos配置入門
1.2.1 發布配置
首先在nacos發布配置。
瀏覽器訪問 http://127.0.0.1:8848/nacos ,打開nacos控制台,並點擊菜單配置管理->配置列表:
在Nacos添加如下的配置:
Data ID: spiritmark-nacos-demo.yaml
Group : DEFAULT_GROUP
配置格式: YAML
配置內容:
common:
config1: some-spiritmark
Note: 注意dataid是以 properties(默認的文件擴展名方式)為擴展名,這里使用yaml。
像下面這樣 ,復制過去的配置內容 可以按Tab鍵一下 因為是yaml
格式 注意層級
發布配置
在點擊“發布”,如下圖,點擊確定發布成功。
查詢配置
1.2.2 Nacos客戶端獲取配置
我們需要新增一個名為spiritmark-nacos-demo
的項目,坐標如下:
<groupId>com.spiritmark.nacos</groupId>
<artifactId>spiritmark-nacos-demo</artifactId>
<version>1.0-SNAPSHOT</version>
添加group ID 為 com.alibaba.nacos
和 artifact ID 為 nacos-client
的 starter
。用於實現項目中使用 Nacos 來
實現應用的外部化配置。
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.3</version>
</dependency>
(1)完整 pom坐標如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.spiritmark.nacos</groupId>
<artifactId>spiritmark-nacos-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies>
</project>
(2)獲取外部化配置
新增java執行類,並在執行過程中獲取配置信息:
package com.spirimark.nacos;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
import java.util.Properties;
public class SimpleDemoMain {
public static void main(String[] args) throws NacosException {
//nacos 地址
String serverAddr = "127.0.0.1:8848";
//Data Id
String dataId = "spiritmark-nacos-demo.yaml";
//Group
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(properties);
//獲取配置,String dataId, String group, long timeoutMs
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
}
}
common:
config1: some-spiritmark
說明獲取配置成功。
下一篇 : Spring Cloud Alibaba基礎教程-Nacos(二)
好了 第一篇就先寫到這 ,馬上快過年了,爭取在過年之前寫完 ,這也是 2019年最后的目標的 2020,在接再厲 !