一、簡介
1、應用場景
當服務調(diào)用越來越多,服務的地址需要管理起來,并實現(xiàn)動態(tài)調(diào)用而不是硬編碼在接口中。此時需要一個注冊中心來幫助我們管理服務。
?
?流程如下:
- 商品微服務注冊IP和端口到注冊中心
- 訂單微服務先從注冊中心獲取到商品微服務的IP和端口
- 訂單微服務中使用獲取到的IP和端口執(zhí)行遠程調(diào)用
2、簡單介紹
NACOS是一個更易于構(gòu)建云原生應用的動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺。簡單來說:NACOS就是一個注冊中心 ,用來實現(xiàn)服務的注冊與發(fā)現(xiàn)。
在什么情況下能夠使用?
- 有一個注冊,有兩個微服務,并且向注冊中心進行注冊并發(fā)現(xiàn)服務來實現(xiàn)遠程調(diào)用。
使用步驟:
- 搭建nacos注冊中心
- 搭建微服務并向nacos進行注冊
- 實現(xiàn)遠程調(diào)用。
二、如何下載
官方下載地址:Github:https://github.com/alibaba/Nacos
下載使用步驟:
(1)下載zip如圖所示
?(2)解壓zip
?(3)雙擊腳本啟動
(4)訪問地址驗證是否啟動成功
瀏覽器中訪問:http://localhost:8848/nacos
默認用戶名和密碼都是nacos
出現(xiàn)如下畫面說明搭建正確:
?三、實現(xiàn)服務的注冊與發(fā)現(xiàn)
1、步驟
- 搭建微服務consumer 并實現(xiàn)注冊與發(fā)現(xiàn)
- 搭建微服務provider 并實現(xiàn)注冊與發(fā)現(xiàn)
- 修改feign 實現(xiàn)遠程調(diào)用(非硬編碼方式)
2、示例
1)引入依賴
在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地址
在user-service和order-service的application.yml中添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848
3)在啟動類添加注解
?4)重啟
重啟微服務后,登錄nacos管理頁面,可以看到微服務信息:
?到這里就配置成功了
四、集群
一個服務可以有多個實例,例如我們的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就將同一機房內(nèi)的實例 劃分為一個集群。
也就是說,user-service是服務,一個服務可以包含多個集群,如杭州、上海,每個集群下可以有多個實例,形成分級模型,如圖:
微服務互相訪問時,應該盡可能訪問同集群實例,因為本地訪問速度更快。當本集群內(nèi)不可用時,才訪問其它集群。例如:?
?杭州機房內(nèi)的order-service應該優(yōu)先訪問同機房的user-service。
那么如何配置集群呢
杭州機房內(nèi)的order-service應該優(yōu)先訪問同機房的user-service。
1)首先在userservice(服務提供者)中配置集群名稱
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名稱
2)給order-service(消費者)配置集群信息
修改order-service的application.yml文件,添加集群配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名稱
3)修改負載均衡規(guī)則
修改order-service的application.yml文件,修改負載均衡規(guī)則:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規(guī)則
這樣就會優(yōu)先訪問同一個集群的,如果同一個集群的服務掛了,再去訪問其他的
五、權(quán)重配置
實際部署中會出現(xiàn)這樣的場景:
服務器設備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。
但默認情況下NacosRule是同集群內(nèi)隨機挑選,不會考慮機器的性能問題。
因此,Nacos提供了權(quán)重配置來控制訪問頻率,權(quán)重越大則訪問頻率越高。
?在nacos控制臺,找到user-service的實例列表,點擊編輯,即可修改權(quán)重:
?在彈出的編輯窗口,修改權(quán)重:
注意:如果權(quán)重修改為0,則該實例永遠不會被訪問
六、環(huán)境隔離
Nacos提供了namespace來實現(xiàn)環(huán)境隔離功能。
(這里的環(huán)境我們可以理解為開發(fā)環(huán)境,測試環(huán)境.....)
- nacos中可以有多個namespace
- namespace下可以有g(shù)roup、service等
- 不同namespace之間相互隔離,例如不同namespace的服務互相不可見
那么如何實現(xiàn)呢?
1.創(chuàng)建namespace
默認情況下,所有service、data、group都在同一個namespace,名為public:
?我們可以點擊頁面新增按鈕,添加一個namespace:
?然后,填寫表單:
?就能在頁面看到一個新的namespace:
2.給微服務配置namespace
給微服務配置namespace只能通過修改配置來實現(xiàn)。
例如,修改order-service的application.yml文件:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空間,填I(lǐng)D
六、Nacos與Eureka的區(qū)別
Nacos的服務實例分為兩種類型:
-
臨時實例:如果實例宕機超過一定時間,會從服務列表剔除,默認的類型。
-
非臨時實例(永久):如果實例宕機,不會從服務列表剔除,也可以叫永久實例。
配置一個服務實例為永久實例:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 設置為非臨時實例
Nacos和Eureka整體結(jié)構(gòu)類似,服務注冊、服務拉取、心跳等待,但是也存在一些差異,如圖:
?總結(jié):
Nacos與eureka的共同點文章來源:http://www.zghlxwxcb.cn/news/detail-539974.html
- 都支持服務注冊和服務拉取
- 都支持服務提供者心跳方式做健康檢測
Nacos與Eureka的區(qū)別文章來源地址http://www.zghlxwxcb.cn/news/detail-539974.html
- Nacos支持服務端主動檢測提供者狀態(tài):臨時實例采用心跳模式,非臨時實例采用主動檢測模式
- 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
- Nacos支持服務列表變更的消息推送模式,服務列表更新更及時
- Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式
到了這里,關(guān)于Nacos(一):簡介 如何安裝 服務注冊與發(fā)現(xiàn) 集群 權(quán)重 與Eureka區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!