成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Eureka 都掛了,微服務(wù)還能調(diào)通嗎?

開發(fā) 架構(gòu)
如果你做過微服務(wù)開發(fā),這個(gè)面試題應(yīng)該能夠立馬答出來,如果你沒做過微服務(wù)開發(fā),但是學(xué)過一些 Spring Cloud 組件的用法,這個(gè)問題可能要稍微想一下,但是也應(yīng)該能夠答出來。

 [[325130]]

這是一位公眾號(hào)讀者遇到的面試題。

老實(shí)說,這個(gè)問題并不難。

如果你做過微服務(wù)開發(fā),這個(gè)面試題應(yīng)該能夠立馬答出來,如果你沒做過微服務(wù)開發(fā),但是學(xué)過一些 Spring Cloud 組件的用法,這個(gè)問題可能要稍微想一下,但是也應(yīng)該能夠答出來。

今天就來和大家說說這個(gè)問題。

1.實(shí)踐一下

這種問題,聽別人講 N 遍,不如自己手動(dòng)實(shí)踐一遍記得清楚。

大家可以快速搭建一個(gè) Eureka 服務(wù)注冊(cè)中心,然后搭建一個(gè)服務(wù)消費(fèi)者和服務(wù)提供者,將兩個(gè)服務(wù)注冊(cè)到 Eureka 上去,最后在服務(wù)消費(fèi)者上面簡(jiǎn)單的調(diào)用一下服務(wù)提供者。這個(gè)過程很簡(jiǎn)單,相信大家稍微學(xué)過 Spring Cloud 的小伙伴都能搞定,如果搞不定,可以參考松哥的視頻(Spring Boot + Vue + Spring Cloud 系列視頻教程))。

服務(wù)調(diào)通之后,接下來關(guān)閉 Eureka,注意不要關(guān)閉服務(wù)提供者和服務(wù)消費(fèi)者,關(guān)閉之后,繼續(xù)用服務(wù)消費(fèi)者調(diào)用服務(wù)提供者,「這個(gè)時(shí)候你會(huì)驚奇的發(fā)現(xiàn),服務(wù)竟然還能調(diào)通!」

Demo 過于簡(jiǎn)單,我就不寫了,如果小伙伴們自己懶得寫,也可以直接下載松哥寫好的直接運(yùn)行:https://github.com/lenve/springcloud-video-samples

2.原因分析

為什么 Eureka 關(guān)閉后服務(wù)還能調(diào)用呢?我們先來看一張簡(jiǎn)單的服務(wù)調(diào)用圖:

 

我來說一下這個(gè)流程:

  1. Eureka 作為一個(gè)服務(wù)注冊(cè)中心啟動(dòng)。
  2. Provider 和 Consumer 分別作為服務(wù)啟動(dòng),并且注冊(cè)到 Eureka 上面去,以 provider 為例,provider 注冊(cè)時(shí)會(huì)告訴 eureka,我叫 provider,我的地址是 xx.xx.xx.xx,我的端口是 xx,我的 xx 是 xx,就是說,provider 會(huì)將自己的一些元數(shù)據(jù)信息告訴 eureka;同理,consumer 也是如此。
  3. 接下來,consumer 要調(diào)用 provider 的接口,但是它不知道 provider 的地址是什么,他只知道要調(diào)用的服務(wù)叫 provider,于是 consumer 找到 eureka,從 eureka 上查詢出來 provider 的具體地址和端口,這個(gè)具體的地址和端口,可能是一個(gè),也可能是多個(gè)(集群化部署)。
  4. consumer 獲取到 provider 的地址和端口之后,接下來就直接去調(diào)用 provider 了。

從上面一個(gè)流程圖中,大家可以看出來,一旦 consumer 獲取到 provider 的具體地址,接下來的調(diào)用其實(shí)就沒有 eureka 什么事了。

所以,我們說一旦 Eureka 掛了,微服務(wù)是可以調(diào)通的,「但是是有前提的」。

什么前提?就是 provider 的地址沒變!如果 provider 換了一個(gè) IP 地址或者端口,這個(gè)時(shí)候,consumer 就無法及時(shí)感知到這種變化,就會(huì)調(diào)不通。當(dāng) Eureka 沒有掛掉的時(shí)候,provider 的 IP 變化這種事情,可以通過 Eureka 讓 consumer 感知到,進(jìn)而對(duì)調(diào)用地址作出調(diào)整,現(xiàn)在 Eureka 掛了,consumer 就無法感知了。

文章既然都寫到這兒了,我們就來順便說下 Spring Cloud 在這里涉及到的一些原理。

3.相關(guān)原理

Eureka 本身可以分為兩大部分,Eureka Server 和 Eureka Client。

我們先來看 Eureka Server:

3.1 Eureka Server

Eureka Server 主要對(duì)外提供了三個(gè)功能:

服務(wù)注冊(cè),所有的服務(wù)都注冊(cè)到 Eureka Server 上面來,這是 Eureka 基本功能。

提供注冊(cè)表,注冊(cè)表就是所有注冊(cè)上來服務(wù)的一個(gè)列表,Eureka 內(nèi)部通過一個(gè)二層緩存機(jī)制來維護(hù)這個(gè)注冊(cè)表。Eureka Client 在調(diào)用服務(wù)時(shí),需要獲取這個(gè)注冊(cè)表,一般來說,這個(gè)注冊(cè)表會(huì)緩存下來,如果緩存失效,則直接獲取最新的注冊(cè)表。

同步狀態(tài),Eureka Client 通過注冊(cè)、心跳等機(jī)制,和 Eureka Server 同步當(dāng)前客戶端的狀態(tài),以便 Eureka Client 能夠及時(shí)感知到變化。

3.2 Eureka Client

服務(wù)要注冊(cè)到 Eureka 上面去,這種注冊(cè)本身就是一個(gè) HTTP 請(qǐng)求,但是自己手寫注冊(cè)過程的話太過于繁瑣,Eureka Client 可以幫助我們簡(jiǎn)化注冊(cè)過程。

一般來說,Eureka Client 有這樣一些功能:

服務(wù)注冊(cè)

服務(wù)提供者將自己注冊(cè)到服務(wù)注冊(cè)中心(Eureka Server),需要注意,所謂的服務(wù)提供者,只是一個(gè)業(yè)務(wù)上的劃分,本質(zhì)上他就是一個(gè) Eureka Client。當(dāng) Eureka Client 向 Eureka Server 注冊(cè)時(shí),他需要提供自身的一些元數(shù)據(jù)信息,例如 IP 地址、端口、名稱、運(yùn)行狀態(tài)等等,將來服務(wù)消費(fèi)者獲取到的也是這些信息。

獲取注冊(cè)信息

Eureka Client 從 Eureka Server 上獲取服務(wù)的注冊(cè)信息,「并將其緩存在本地」,這句是關(guān)鍵。

當(dāng) Eureka Client 在需要調(diào)用遠(yuǎn)程服務(wù)時(shí),會(huì)從該信息中查找遠(yuǎn)程服務(wù)所對(duì)應(yīng)的 IP 地址、端口等信息。Eureka Client 上緩存的服務(wù)注冊(cè)信息會(huì)定期更新(30 秒),如果 Eureka Server 返回的注冊(cè)表信息與本地緩存的注冊(cè)表信息不同的話,Eureka Client 會(huì)自動(dòng)處理。

這里,也涉及到兩個(gè)屬性:

一個(gè)是是否允許獲取注冊(cè)表信息:eureka.client.fetch-registry=true。

另一個(gè)是 Eureka Client 上緩存的服務(wù)注冊(cè)信息,定期更新的時(shí)間間隔,默認(rèn) 30 秒,可以通過如下屬性自行修改:eureka.client.registry-fetch-interval-seconds=30。

服務(wù)續(xù)約

Eureka Client 注冊(cè)到 Eureka Server 上之后,默認(rèn)情況下,Eureka CLient 每隔 30 秒就要向 Eureka Server 發(fā)送一條心跳消息,來告訴 Eureka Server 我還在運(yùn)行。

如果 Eureka Server 連續(xù) 90 秒都有沒有收到 Eureka Client 的續(xù)約消息(連續(xù)三次沒發(fā)送),它會(huì)認(rèn)為 Eureka Client 已經(jīng)掉線了,會(huì)將掉線的 Eureka Client 從當(dāng)前的服務(wù)注冊(cè)列表中剔除。

這里有兩個(gè)相關(guān)的屬性(一般不建議修改):

  1. eureka.instance.lease-renewal-interval-in-seconds 表示服務(wù)的續(xù)約時(shí)間,默認(rèn)是 30 秒。
  2. eureka.instance.lease-expiration-duration-in-seconds 表示服務(wù)失效時(shí)間,默認(rèn)是 90 秒。

服務(wù)下線

服務(wù)下線當(dāng) Eureka Client 下線時(shí),它會(huì)主動(dòng)發(fā)送一條消息,告訴 Eureka Server ,我下線啦。

從上面的介紹可以看出,Eureka Client 會(huì)自動(dòng)拉取、更新以及緩存 Eureka Server 中的信息,這樣,即使 Eureka Server 所有節(jié)點(diǎn)都宕機(jī),Eureka Client 依然能夠獲取到想要調(diào)用服務(wù)的地址(前提是服務(wù)地址沒有發(fā)生變化)。

好了,本文就先說這么多,其實(shí)東西不難,感興趣的小伙伴感覺去試試吧~

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2025-03-31 08:35:00

Eureka微服務(wù)架構(gòu)

2023-10-26 07:47:53

Redis哨兵集群

2024-07-10 10:51:39

SpringEureka數(shù)據(jù)中心

2019-08-23 10:34:05

微服務(wù)Eureka架構(gòu)

2020-06-29 07:58:18

ZooKeeperConsul 注冊(cè)中心

2017-06-25 13:33:25

Spring Clou微服務(wù)架構(gòu)

2021-02-05 11:27:09

微服務(wù)源碼加載配置

2022-03-29 08:30:15

微服務(wù)架構(gòu)單體架構(gòu)

2023-10-27 18:47:35

微服務(wù)底層機(jī)制

2022-07-26 09:48:55

微服務(wù)服務(wù)AKF

2020-12-16 08:11:21

服務(wù)supervisor進(jìn)程

2018-10-28 18:09:22

微服務(wù)Microservic架構(gòu)

2023-09-18 14:54:02

2022-11-09 16:23:17

Python微服務(wù)架構(gòu)

2020-12-28 18:20:52

IntelPC芯片

2024-06-04 07:58:31

架構(gòu)本質(zhì)微服務(wù)

2021-10-18 08:52:42

技術(shù)

2021-06-02 08:04:58

微服務(wù)初創(chuàng)公司

2024-05-17 16:18:45

微服務(wù)灰度發(fā)布金絲雀發(fā)布

2023-11-27 07:37:50

面試協(xié)程池
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品一区在线 | 欧美啊v在线观看 | 精品国产一区二区在线 | 欧美视频xxx | 免费久| 国产精品成人69xxx免费视频 | 欧美日韩国产在线 | 国产超碰人人爽人人做人人爱 | 久热精品在线观看视频 | 成人免费观看男女羞羞视频 | 亚洲国产成人精品女人久久久 | 日韩伦理一区二区 | 欧美日韩高清一区 | 国产激情免费视频 | 亚洲 中文 欧美 日韩 在线观看 | 国产精品久久久久无码av | 日本成人福利 | 成人久久久久久久久 | 日韩中文字幕在线视频 | 日韩精品在线一区 | 国产成人免费视频网站高清观看视频 | 91视频在线| 波多野结衣一区二区 | 久久久www成人免费无遮挡大片 | 一区二区三区四区电影视频在线观看 | 欧美性受xxx| 日日碰狠狠躁久久躁96avv | 欧美一二区 | 国内精品伊人久久久久网站 | www.亚洲一区二区 | 亚洲精品一区在线观看 | 午夜看看 | 在线国产中文字幕 | 欧美性极品xxxx做受 | 亚洲精品综合 | 欧美日韩视频在线第一区 | 精品一区二区三区不卡 | 精品国产一区二区三区久久影院 | 在线永久看片免费的视频 | 黄在线免费观看 | 日韩视频中文字幕 |