網(wǎng)站首頁 編程語言 正文
文章目錄
- Nacos注冊中心
- 1.認識和安裝Nacos
- 2.服務(wù)注冊到nacos
- 1)引入依賴
- 2)配置nacos地址
- 3)重啟
- 3.服務(wù)分級存儲模型
- 3.1.給user-service配置集群
- 3.2.同集群優(yōu)先的負載均衡
- 4.權(quán)重配置
- 5.環(huán)境隔離
- 5.1.創(chuàng)建namespace
- 5.2.給微服務(wù)配置namespace
- 6.Nacos與Eureka的區(qū)別
Nacos注冊中心
國內(nèi)公司一般都推崇阿里巴巴的技術(shù),比如注冊中心,SpringCloudAlibaba也推出了一個名為Nacos的注冊中心。
Nacos YYDS!
1.認識和安裝Nacos
Nacos是阿里巴巴的產(chǎn)品,現(xiàn)在是SpringCloud中的一個組件。相比Eureka功能更加豐富,在國內(nèi)受歡迎程度較高。
安裝方式可以參考我整理的另兩篇博客:
Windows安裝Nacos、docker安裝Nacos
2.服務(wù)注冊到nacos
Nacos是SpringCloudAlibaba的組件,而SpringCloudAlibaba也遵循SpringCloud中定義的服務(wù)注冊、服務(wù)發(fā)現(xiàn)規(guī)范。因此使用Nacos和使用Eureka對于微服務(wù)來說,并沒有太大區(qū)別。
主要差異在于:
- 依賴不同
- 服務(wù)地址不同
1)引入依賴
在父工程的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>
然后在微服務(wù)子模塊中的pom文件中引入nacos-discovery依賴:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
注意:不要忘了注釋掉eureka的依賴。
2)配置nacos地址
在user-service和order-service的application.yml中添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848
注意:不要忘了注釋掉eureka的地址
3)重啟
重啟微服務(wù)后,登錄nacos管理頁面,可以看到微服務(wù)信息:
3.服務(wù)分級存儲模型
一個服務(wù)可以有多個實例,例如我們的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是服務(wù),一個服務(wù)可以包含多個集群,如杭州、上海,每個集群下可以有多個實例,形成分級模型,如圖:
微服務(wù)互相訪問時,應(yīng)該盡可能訪問同集群實例,因為本地訪問速度更快。當本集群內(nèi)不可用時,才訪問其它集群。例如:
杭州機房內(nèi)的order-service應(yīng)該優(yōu)先訪問同機房的user-service。
3.1.給user-service配置集群
修改user-service的application.yml文件,添加集群配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名稱
重啟兩個user-service實例后,我們可以在nacos控制臺看到下面結(jié)果:
我們再次復制一個user-service啟動配置,添加屬性:
-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH
配置如圖所示:
啟動UserApplication3后再次查看nacos控制臺:
3.2.同集群優(yōu)先的負載均衡
默認的ZoneAvoidanceRule
并不能實現(xiàn)根據(jù)同集群優(yōu)先來實現(xiàn)負載均衡。
因此Nacos中提供了一個NacosRule
的實現(xiàn),可以優(yōu)先從同集群中挑選實例。
1)給order-service配置集群信息
修改order-service的application.yml文件,添加集群配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名稱
2)修改負載均衡規(guī)則
修改order-service的application.yml文件,修改負載均衡規(guī)則:
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規(guī)則
重啟應(yīng)用我們再訪問一下請求,多訪問幾次,我們發(fā)現(xiàn),HZ集群的都優(yōu)先被訪問了,SH集群的沒被訪問
4.權(quán)重配置
實際部署中會出現(xiàn)這樣的場景:
服務(wù)器設(shè)備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。
但默認情況下NacosRule是同集群內(nèi)隨機挑選,不會考慮機器的性能問題。
因此,Nacos提供了權(quán)重配置來控制訪問頻率,權(quán)重越大則訪問頻率越高。
在nacos控制臺,找到user-service的實例列表,點擊編輯,即可修改權(quán)重:
在彈出的編輯窗口,修改權(quán)重:
我們再訪問個十次:
權(quán)重為1的就被訪問了一次
注意:如果權(quán)重修改為0,則該實例永遠不會被訪問
5.環(huán)境隔離
Nacos提供了namespace來實現(xiàn)環(huán)境隔離功能。
- nacos中可以有多個namespace
- namespace下可以有g(shù)roup、service等
- 不同namespace之間相互隔離,例如不同namespace的服務(wù)互相不可見
5.1.創(chuàng)建namespace
默認情況下,所有service、data、group都在同一個namespace,名為public:
我們可以點擊頁面新增按鈕,添加一個namespace:
然后,填寫表單:
就能在頁面看到一個新的namespace:
5.2.給微服務(wù)配置namespace
給微服務(wù)配置namespace只能通過修改配置來實現(xiàn)。
例如,修改order-service的application.yml文件:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 5794e19f-3d80-4f54-b263-8b19c2ed27e4 # 命名空間,填I(lǐng)D
重啟order-service后,訪問控制臺,可以看到下面的結(jié)果:
此時訪問order-service,因為namespace不同,會導致找不到userservice,控制臺會報錯,找到不userservice+:
6.Nacos與Eureka的區(qū)別
Nacos的服務(wù)實例分為兩種類型:
-
臨時實例(撿來的):如果實例宕機超過一定時間,會從服務(wù)列表剔除,默認的類型。
-
非臨時實例(親兒子):如果實例宕機,不會從服務(wù)列表剔除,也可以叫永久實例。
配置一個服務(wù)實例為永久實例:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 設(shè)置為非臨時實例
Nacos和Eureka整體結(jié)構(gòu)類似,服務(wù)注冊、服務(wù)拉取、心跳等待,但是也存在一些差異:
我們先回顧一下Eureka的整體結(jié)構(gòu):
在對比一下Nacos 的:
-
Nacos 的消費者會定時拉取服務(wù),以避免原來的服務(wù)提供者宕機
-
Nacos 對于服務(wù)提供者:
- 如果是非臨時實例(親兒子),那么注冊中心自己會采用主動監(jiān)測模式定時自動詢問服務(wù)提供者是否健康
- 如果是臨時實例(撿來的),那么就是服務(wù)提供者主動向注冊中心發(fā)送心跳檢測
-
Nacos與eureka的共同點
- 都支持服務(wù)注冊和服務(wù)拉取
- 都支持服務(wù)提供者心跳方式做健康檢測
-
Nacos與Eureka的區(qū)別
- Nacos支持服務(wù)端主動檢測提供者狀態(tài):臨時實例采用心跳模式,非臨時實例采用主動檢測模式
- 臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除
- Nacos支持服務(wù)列表變更的消息推送模式,服務(wù)列表更新更及時
- Nacos集群默認采用AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP方式
原文鏈接:https://blog.csdn.net/weixin_45525272/article/details/125851371
- 上一篇:git代碼沖突解決
- 下一篇:Ribbon負載均衡深入探究
相關(guān)推薦
- 2022-07-21 hadoop本地數(shù)據(jù)統(tǒng)計
- 2022-07-04 .NET性能優(yōu)化之為結(jié)構(gòu)體數(shù)組使用StructLinq的問題解析_實用技巧
- 2022-12-05 Android自定義view實現(xiàn)有header和footer作為layout使用的滾動控件_Andr
- 2023-03-26 python命令行參數(shù)argparse模塊基本用法詳解_python
- 2022-03-23 Android?Camera2開啟自動曝光功能_Android
- 2023-11-21 Ubuntu/Linux解壓文件、壓縮文件(.tar .tgz .tar.gz .tar.Z .ta
- 2023-01-18 解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式_python
- 2022-02-27 Postgres -- 報錯:right sibling‘s left-link doesn‘t m
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支