5.1 Nacos服務(wù)分級存儲模型
Nacos服務(wù)分級存儲模型:
服務(wù)跨集群調(diào)用問題:
服務(wù)調(diào)用盡可能選擇本地集群的服務(wù),跨集群調(diào)用延遲較高。
本地集群不可訪問時,再去訪問其他集群。
服務(wù)集群屬性:
- 修改application.yml,添加如下內(nèi)容
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos服務(wù)端地址
discovery:
cluster-name: HZ # 配置集群名稱,也就是機房位置:例如杭州 HZ
- 在nacos控制臺可以看到集群變化
總結(jié):
- Nacos服務(wù)分級存儲模型
一級是服務(wù),例如userservice
二級是集群,例如杭州或上海
三級是實例,例如杭州機房的某臺部署了userservice的服務(wù)器 - 如何設(shè)置實例的集群屬性
修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name屬性即可
5.2 根據(jù)集群負載均衡
實現(xiàn)orderservice優(yōu)先選擇本地集群中的userservice
- 修改order-service中的application.yml,設(shè)置集群為HZ:
spring:
cloud:
nacos:
service-addr: localhost:8848
discovery:
cluster-name: HZ
- 然后在order-service中設(shè)置負載均衡的Rule為NacosRule,這個規(guī)則優(yōu)先會尋找與自己同集群的服務(wù):
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 負載均衡規(guī)則
- 注意將user-service的權(quán)重都設(shè)置為1
Nacos的訪問特點:優(yōu)先訪問本地集群,然后隨機訪問本地集群中的服務(wù)。本地沒有就跨集群訪問,跨集群訪問會出現(xiàn)警告:
總結(jié)
NacosRule負載均衡策略
優(yōu)先選擇同集群服務(wù)實例列表
本地集群找不到提供者,才去其他集群尋找,并且會報警告
確定了可用實例列表后,再采用隨機負載均衡挑選實例
5.3 Nacos服務(wù)實例的權(quán)重設(shè)置
根據(jù)權(quán)重負載均衡
實際部署中會出現(xiàn)這樣的場景:
服務(wù)器設(shè)備性能有差異,部分實例所在機器性能較好,另一些較差,我們希望性能好的機器承擔更多的用戶請求。
Nacos提供了權(quán)重配置來控制訪問頻率,權(quán)重越大則訪問頻率越高
權(quán)重設(shè)置為0時,服務(wù)就不會被訪問
總結(jié):
實例的權(quán)重控制:
Nacos控制臺可以設(shè)置實例的權(quán)重值,0~1之間。
同集群內(nèi)的多個實例,權(quán)重越高被訪問的頻率越高
權(quán)重設(shè)置為0則完全不會被訪問
5.6 環(huán)境隔離namespace
Nacos中服務(wù)存儲和數(shù)據(jù)存儲的最外層都是一個名為namespace的東西,用來做最外層隔離
在設(shè)置命名空間時,服務(wù)都在public命名空間中
- 在Nacos控制臺中可以創(chuàng)建namespace,用來隔離不同環(huán)境
- 然后填寫一個新的命名空間信息:
- 保存后會在控制臺看到這個命名空間的id
- 修改order-service的application.yml,添加namespace
- 重啟order-service后,再來查看控制臺
- 此時訪問order-service,因為namespace不同,會導(dǎo)致找不到userservice,控制臺會報錯
總結(jié)
Nacos環(huán)境隔離
namespace用來做環(huán)境隔離
每個namespace都有唯一的id
不同namespace下的服務(wù)不可見
5.7 Nacos和Eureka的對比
nacos注冊中心細節(jié)分析
默認情況下,所有的實例都是臨時實例
如果臨時實例服務(wù)到時間沒有發(fā)送心跳,nacos就會把臨時服務(wù)從列表中剔除。
nacos不會把非臨時實例從列表中剔除,只會標注實例不健康了,等著服務(wù)恢復(fù)。
臨時實例和非臨時實例
服務(wù)注冊到Nacos時,可以選擇注冊為臨時或非臨時實例,通過下面的配置來設(shè)置:文章來源:http://www.zghlxwxcb.cn/news/detail-697630.html
spring:
cloud:
nacos:
discovery:
ephemeral: false # 設(shè)置為非臨時實例
臨時實例宕機時,會從nacos的服務(wù)列表中剔除,而非臨時實例則不會文章來源地址http://www.zghlxwxcb.cn/news/detail-697630.html
總結(jié)
- Nacos和eureka的共同點:
都支持服務(wù)注冊和服務(wù)拉取
都支持服務(wù)提供者心跳方式做健康檢測 - Nacos和Eureka的區(qū)別:
Nacos支持服務(wù)端主動檢測提供者的狀態(tài):臨時實例采用心跳模式,非臨時實例采用主動檢測模式。
臨時實例心跳不正常會被剔除,非臨時實例則不會被剔除。
Nacos支持服務(wù)列表變更的消息推送模式,服務(wù)列表更新更及時。
Nacos集群默認采取AP方式,當集群中存在非臨時實例時,采用CP模式;Eureka采用AP模式。
到了這里,關(guān)于【微服務(wù)】五. Nacos服務(wù)注冊的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!