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

Eureka 都掛了,微服務還能調通嗎?

開發 架構
如果你做過微服務開發,這個面試題應該能夠立馬答出來,如果你沒做過微服務開發,但是學過一些 Spring Cloud 組件的用法,這個問題可能要稍微想一下,但是也應該能夠答出來。

 [[325130]]

這是一位公眾號讀者遇到的面試題。

老實說,這個問題并不難。

如果你做過微服務開發,這個面試題應該能夠立馬答出來,如果你沒做過微服務開發,但是學過一些 Spring Cloud 組件的用法,這個問題可能要稍微想一下,但是也應該能夠答出來。

今天就來和大家說說這個問題。

1.實踐一下

這種問題,聽別人講 N 遍,不如自己手動實踐一遍記得清楚。

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

服務調通之后,接下來關閉 Eureka,注意不要關閉服務提供者和服務消費者,關閉之后,繼續用服務消費者調用服務提供者,「這個時候你會驚奇的發現,服務竟然還能調通!」

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

2.原因分析

為什么 Eureka 關閉后服務還能調用呢?我們先來看一張簡單的服務調用圖:

 

我來說一下這個流程:

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

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

所以,我們說一旦 Eureka 掛了,微服務是可以調通的,「但是是有前提的」。

什么前提?就是 provider 的地址沒變!如果 provider 換了一個 IP 地址或者端口,這個時候,consumer 就無法及時感知到這種變化,就會調不通。當 Eureka 沒有掛掉的時候,provider 的 IP 變化這種事情,可以通過 Eureka 讓 consumer 感知到,進而對調用地址作出調整,現在 Eureka 掛了,consumer 就無法感知了。

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

3.相關原理

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

我們先來看 Eureka Server:

3.1 Eureka Server

Eureka Server 主要對外提供了三個功能:

服務注冊,所有的服務都注冊到 Eureka Server 上面來,這是 Eureka 基本功能。

提供注冊表,注冊表就是所有注冊上來服務的一個列表,Eureka 內部通過一個二層緩存機制來維護這個注冊表。Eureka Client 在調用服務時,需要獲取這個注冊表,一般來說,這個注冊表會緩存下來,如果緩存失效,則直接獲取最新的注冊表。

同步狀態,Eureka Client 通過注冊、心跳等機制,和 Eureka Server 同步當前客戶端的狀態,以便 Eureka Client 能夠及時感知到變化。

3.2 Eureka Client

服務要注冊到 Eureka 上面去,這種注冊本身就是一個 HTTP 請求,但是自己手寫注冊過程的話太過于繁瑣,Eureka Client 可以幫助我們簡化注冊過程。

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

服務注冊

服務提供者將自己注冊到服務注冊中心(Eureka Server),需要注意,所謂的服務提供者,只是一個業務上的劃分,本質上他就是一個 Eureka Client。當 Eureka Client 向 Eureka Server 注冊時,他需要提供自身的一些元數據信息,例如 IP 地址、端口、名稱、運行狀態等等,將來服務消費者獲取到的也是這些信息。

獲取注冊信息

Eureka Client 從 Eureka Server 上獲取服務的注冊信息,「并將其緩存在本地」,這句是關鍵。

當 Eureka Client 在需要調用遠程服務時,會從該信息中查找遠程服務所對應的 IP 地址、端口等信息。Eureka Client 上緩存的服務注冊信息會定期更新(30 秒),如果 Eureka Server 返回的注冊表信息與本地緩存的注冊表信息不同的話,Eureka Client 會自動處理。

這里,也涉及到兩個屬性:

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

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

服務續約

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

如果 Eureka Server 連續 90 秒都有沒有收到 Eureka Client 的續約消息(連續三次沒發送),它會認為 Eureka Client 已經掉線了,會將掉線的 Eureka Client 從當前的服務注冊列表中剔除。

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

  1. eureka.instance.lease-renewal-interval-in-seconds 表示服務的續約時間,默認是 30 秒。
  2. eureka.instance.lease-expiration-duration-in-seconds 表示服務失效時間,默認是 90 秒。

服務下線

服務下線當 Eureka Client 下線時,它會主動發送一條消息,告訴 Eureka Server ,我下線啦。

從上面的介紹可以看出,Eureka Client 會自動拉取、更新以及緩存 Eureka Server 中的信息,這樣,即使 Eureka Server 所有節點都宕機,Eureka Client 依然能夠獲取到想要調用服務的地址(前提是服務地址沒有發生變化)。

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

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2025-03-31 08:35:00

Eureka微服務架構

2023-10-26 07:47:53

Redis哨兵集群

2019-08-23 10:34:05

微服務Eureka架構

2024-07-10 10:51:39

SpringEureka數據中心

2020-06-29 07:58:18

ZooKeeperConsul 注冊中心

2017-06-25 13:33:25

Spring Clou微服務架構

2021-02-05 11:27:09

微服務源碼加載配置

2023-10-27 18:47:35

微服務底層機制

2022-03-29 08:30:15

微服務架構單體架構

2022-07-26 09:48:55

微服務服務AKF

2020-12-16 08:11:21

服務supervisor進程

2018-10-28 18:09:22

微服務Microservic架構

2022-11-09 16:23:17

Python微服務架構

2023-09-18 14:54:02

2020-12-28 18:20:52

IntelPC芯片

2024-06-04 07:58:31

架構本質微服務

2021-10-18 08:52:42

技術

2021-06-02 08:04:58

微服務初創公司

2024-05-17 16:18:45

微服務灰度發布金絲雀發布

2023-11-27 07:37:50

面試協程池
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩精品亚洲 | 欧美日韩大陆 | 精久久久久 | 国产www.| 国产精品18hdxxxⅹ在线 | 国产精品久久久久久福利一牛影视 | 欧美日韩成人网 | 久草热视频 | 欧美日韩视频一区二区 | 国产成人免费视频网站高清观看视频 | 婷婷五月色综合 | av中文在线 | 亚洲91精品 | 日韩视频―中文字幕 | 国产乡下妇女做爰 | 日韩精品久久久 | 久久久av | 亚洲成人999 | 美女一区 | 色婷婷av777| 久久在线看 | 亚洲一区二区三区观看 | 看羞羞视频| 成人精品视频在线 | 一区中文字幕 | 日韩精品成人 | 激情六月丁香婷婷 | 亚洲成人一区二区三区 | 午夜资源| 久久久久久国产精品久久 | 黄色一级在线播放 | 91在线一区二区三区 | 999国产视频 | 伊人春色在线观看 | 99精品视频一区二区三区 | 91精品国产综合久久久久久 | 久久婷婷色| 日韩一区二区三区视频在线播放 | 粉嫩一区二区三区国产精品 | 亚洲日韩中文字幕 | 亚洲色图婷婷 |