1.背景
- 注冊(cè)中心是微服務(wù)中必須要使用的組件,考察我們使用微服務(wù)的程度。
- 注冊(cè)中心的核心作用是:服務(wù)注冊(cè)和發(fā)現(xiàn)。
- 常見的注冊(cè)中心:Eureka、Nacos、Zookeeper
下面我們以 Eureka 注冊(cè)中心為例,說一下注冊(cè)中心的作用:
2.Eureka 注冊(cè)中心
假如我們有一個(gè)訂單服務(wù) order-service
,需要消費(fèi)用戶服務(wù) user-service
,而 user-service
是集群部署,有三個(gè)節(jié)點(diǎn):8081,8082,8083,那么我們的訂單服務(wù)應(yīng)該調(diào)用哪一臺(tái)呢?如果后續(xù)又增加了 8084、8085 兩個(gè)節(jié)點(diǎn)后又該怎么調(diào)用呢?
所以這時(shí)候我們就需要用到注冊(cè)中心來對(duì)服務(wù)進(jìn)行管理了。這里涉及兩個(gè)概念:
- user-service 用戶服務(wù),是作為
服務(wù)提供者
。 - order-service 訂單服務(wù),是作為
服務(wù)消費(fèi)者
。
我們?nèi)绾卫米?cè)中心來共享服務(wù)的地址呢?
1)首先,當(dāng)服務(wù)提供者啟動(dòng)服務(wù)的時(shí)候,就會(huì)把自己的信息注冊(cè)到注冊(cè)中心中,注冊(cè)中心就會(huì)保存服務(wù)提供者的這三個(gè)節(jié)點(diǎn)的地址和端口了。
2)其次,因?yàn)槟壳暗倪h(yuǎn)程調(diào)用都是相對(duì)的,假如有其他微服務(wù)也需要去調(diào)用 order-service 微服務(wù),那么就需要將訂單服務(wù)也注冊(cè)到注冊(cè)中心上。注冊(cè)中心也就會(huì)保存 order-service 微服務(wù)的地址了。
3)當(dāng)注冊(cè)中心保存好這些信息之后,服務(wù)消費(fèi)者就回去注冊(cè)中心拉取這些信息了。比如說,order-service 調(diào)用 user-service 就會(huì)拉取到 8081、8082、8083 三個(gè)地址,那么應(yīng)該選擇哪個(gè)地址去調(diào)用呢?這時(shí)候,在 user-service 內(nèi)部會(huì)做一個(gè)負(fù)載均衡,假設(shè)選中了8081,那么 order-service 就會(huì)直接調(diào)用 8081 的 user-service 服務(wù)。
以上就是 Eureka 的基本工作流程。服務(wù)注冊(cè)主要指的是服務(wù)提供者把自己的信息注冊(cè)到注冊(cè)中心中,然后由服務(wù)提供者去注冊(cè)中心去拉取,發(fā)現(xiàn)服務(wù)提供者的信息。
假如三臺(tái) user-service 服務(wù)提供者中,有一臺(tái)宕機(jī)了,那么這時(shí)候應(yīng)該怎么辦呢?
是這樣的,服務(wù)提供者的每一個(gè)微服務(wù)都會(huì)每隔30秒向注冊(cè)中心發(fā)送一個(gè)心跳進(jìn)行續(xù)約
,證明當(dāng)前是一個(gè)健康的實(shí)例。假如某個(gè)實(shí)例一直沒有發(fā)送請(qǐng)求,比如8083節(jié)點(diǎn)掛了,注冊(cè)中心如果90秒沒有收到心跳,注冊(cè)中心就會(huì)認(rèn)為某一臺(tái)實(shí)例掛機(jī)了,然后在服務(wù)列表中把8083的服務(wù)干掉了。那么相對(duì)應(yīng)的 order-service 服務(wù)消費(fèi)者去注冊(cè)中心拉取信息的時(shí)候,就會(huì)發(fā)現(xiàn)8083節(jié)點(diǎn)不在了,只剩下8081和8082了,這個(gè)實(shí)際上就是服務(wù)的健康監(jiān)控
。
3.Nacos 注冊(cè)中心
Nacos 和 Eureka 的思路還是基本一致的,我們的服務(wù)提供者需要把自己的信息注冊(cè)到 Nacos,服務(wù)消費(fèi)者需要去注冊(cè)中心去拉取數(shù)據(jù),通過這種方式來獲取服務(wù)列表信息,比如 IP和端口地址等。同樣 Nacos 也有健康檢測(cè),服務(wù)提供者也會(huì)定期發(fā)送自己的心跳到 Nacos,證明當(dāng)前某個(gè)節(jié)點(diǎn)是存活的。這里不同的是有一個(gè)名稱:臨時(shí)實(shí)例
。
下面這是正常在微服務(wù)中 Nacos 的配置:
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.200.130:8848
ephemeral: false # 設(shè)置為非臨時(shí)實(shí)例,默認(rèn)true
ephemeral
意思是臨時(shí)的,平時(shí)我們不會(huì)去設(shè)置它,那么Nacos默認(rèn)就是采用臨時(shí)實(shí)例。如果使用的是臨時(shí)實(shí)例,那么和我們的 Eureka 差不多,它的健康檢測(cè)也是通過心跳去檢測(cè)的。假如我們這里設(shè)置了 false
,那么當(dāng)前這個(gè)實(shí)例就是非臨時(shí)實(shí)例
了。
如果是非臨時(shí)實(shí)例
,Nacos 注冊(cè)中心會(huì)主動(dòng)地詢問,查看當(dāng)前的服務(wù)提供者是否存活。之前是由服務(wù)提供者主動(dòng)發(fā)送心跳告訴注冊(cè)中心還活著,非臨時(shí)實(shí)例中就反過來了。而 Eureka 中沒有非臨時(shí)實(shí)例的概念,這就是一點(diǎn)不同。
另外一點(diǎn),如果服務(wù)提供者的地址發(fā)生變更了,Nacos 注冊(cè)中心會(huì)主動(dòng)推送變更的信息到服務(wù)消費(fèi)者,也就是說 Nacos 不僅僅有 pull,還有 push。
由于 Nacos 注冊(cè)中心的主動(dòng)推送,那么服務(wù)消費(fèi)者中服務(wù)列表的更新就會(huì)更加的及時(shí),從而減少服務(wù)不可用的時(shí)間。文章來源:http://www.zghlxwxcb.cn/news/detail-512801.html
4.常見面試題
1)服務(wù)注冊(cè)和發(fā)現(xiàn)是什么意思?Spring Cloud 如何實(shí)現(xiàn)服務(wù)注冊(cè)發(fā)現(xiàn)?
- 我們當(dāng)時(shí)項(xiàng)目采用的 Eureka 作為注冊(cè)中心,這個(gè)也是 Spring Cloud 體系中的一個(gè)核心組件。
- 服務(wù)注冊(cè): 服務(wù)提供者需要把自己的信息注冊(cè)到 Eureka,由 Eureka 來保存這些信息,比如服務(wù)名稱、IP、端口等等。
- 服務(wù)發(fā)現(xiàn): 服務(wù)消費(fèi)者向 Eureka 拉取服務(wù)列表信息,如果服務(wù)提供者有集群,則消費(fèi)者會(huì)利用負(fù)載均衡算法,選擇其中一個(gè)進(jìn)行調(diào)用。
- 服務(wù)監(jiān)控: 服務(wù)提供者會(huì)每隔30秒向 Eureka 發(fā)送心跳,報(bào)告健康狀態(tài),如果 Eureka 服務(wù) 90 秒沒接收到心跳,服務(wù)就會(huì)從 Eureka 中刪除。
2)Nacos 和 Eureka 有什么區(qū)別?
- Nacos 與 Eureka 的共同點(diǎn):
- 都支持服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn);
- 都支持服務(wù)提供者心跳方式做健康檢測(cè)。
- Nacos 與 Eureka 的區(qū)別:
- Nacos 支持服務(wù)端主動(dòng)檢測(cè)提供者狀態(tài):臨時(shí)實(shí)例采用
心跳模式
,非臨時(shí)實(shí)例采用主動(dòng)檢測(cè)模式
; - 臨時(shí)實(shí)例心跳不正常會(huì)被剔除,非臨時(shí)實(shí)例則不會(huì)被剔除;
- Nacos 支持服務(wù)列表變更的消息推送模式,服務(wù)列表更新更及時(shí);
- Nacos 集群默認(rèn)采用
AP
方式,當(dāng)集群中存在非臨時(shí)實(shí)例時(shí),采用CP
模式;Eureka 采用AP
方式。
- Nacos 支持服務(wù)端主動(dòng)檢測(cè)提供者狀態(tài):臨時(shí)實(shí)例采用
- Nacos 還支持了
配置中心
, Eureka 則只有注冊(cè)中心,這也是很多人選擇使用 Nacos 的一個(gè)重要原因。
整理完畢,完結(jié)撒花~ ??文章來源地址http://www.zghlxwxcb.cn/news/detail-512801.html
到了這里,關(guān)于SpringCloud(2) 注冊(cè)中心Eureka、Nacos的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!