SpringCloud之註冊中心-Eureka詳解

你好我是辰兮,很高興你能來閱讀,本篇文章是關於SpringCloud分佈式微服務框架的學習,主要講究Eureka服務中心的基礎概念和作用,分享獲取新知,大家一起進步。



一、Eureka簡介

Eureka又稱服務中心,管理各種服務功能包括服務的註冊、發現、熔斷、負載、降級等。

Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。

SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。

Eureka包含兩個組件:Eureka Server和Eureka Client。

①Eureka Server提供服務註冊服務,各個節點啓動後,會在Eureka Server中進行註冊,這樣EurekaServer中的服務註冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀的看到。

②Eureka Client是一個java客戶端,用於簡化與Eureka Server的交互,客戶端同時也就是一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。

在這裏插入圖片描述
在應用啓動後,將會向Eureka Server發送心跳,默認週期爲30秒,如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務註冊表中把這個服務節點移除(默認90秒)。

Eureka Server之間通過複製的方式完成數據的同步,Eureka還提供了客戶端緩存機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務的API

綜上,Eureka通過心跳檢查、客戶端緩存等機制,確保了系統的高可用性、靈活性和可伸縮性。


二、服務發現

(1)服務發現與註冊

在微服務架構中,服務發現(Service Discovery)是關鍵原則之⼀。⼿動配置每個客戶端或某種形式的約定是很難做的,並且很脆弱。Spring Cloud提供了多種服務發現的實現方式,例如:Eureka、Consul、Zookeeper。Spring Cloud⽀持得最好的是Eureka,其次是Consul,最次是Zookeeper。

(2)服務發現模式

服務發現有兩種模式,一是客戶端發現模式,二是服務端發現模式。

2.1 客戶端發現模式

使用客戶端發現模式時,客戶端(服務消費者)決定相應服務實例(服務提供者)的網絡位置,並且對請求實現負載均衡。客戶端查詢服務註冊表,服務註冊表是⼀個保存有所有可用服務的⼀個數據庫等具有存儲功能的地方;然後客戶端使⽤負載均衡算法從中選擇⼀個提供者實例,併發出請求。

相當於我們去喫自助,喫什麼,喫多少都是我們自己決定的,哪怕其中的菜每種都有多盤,我們也可以自己決定從哪盤中拿,他們只需要把所有的東西擺放在那裏就行。

下圖顯示了這種模式的架構:

下圖中可以看出左側的消費者(客戶端)⾃⼰從註冊中⼼查詢右側的所有的服務,然後⾃⼰決定去請求哪個服務

在這裏插入圖片描述


2.2 服務端發現模式

與客戶端發現⽅式不同,服務端發現是由專⻔的某個或者某⼏個服務器來發現服務後再對外提供信息的,客戶端(消費者)並不知道這個服務到底有多少個,就像我們在⻝堂打飯,我們只需要告訴打飯的阿姨你喫什麼,阿姨她來決定從哪盤⾥⾯打給你(當然⻝堂⾥⾯你還能看到菜⽽已,我們的服務中你⽆法看到服務)

在這裏插入圖片描述


三、Eureka 基本使用

如何搭建Eureka服務端 ?

1.搭建Eureka服務端

因爲作爲註冊中心⼀定是獨立於其他程序之外的,所以我們需要搭建⼀個Eureka的服務端,與Zookeeper不同的是,Eureka的服務端是⼀個JavaWeb程序

2.導入Pom.xml

<dependencies>
 <!--Eureka server 的依賴-->
   <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
   </dependency>
</dependencies>

3. application.yml

server:
 port: 10000 #程序通過springboot啓動後tomcat的端⼝
eureka:
 client:
 register-with-eureka: false #eureka單機版的配置
 fetchRegistry: false #表示當前是個服務端
 service-url:
 defaultZone: http://localhost:10000/eureka #Eureka對外提供服務的註冊地
址,也就是eureka最終運⾏的地址,此處我們使⽤的是localhost,springboot模式啓動,所以是
localhost:10000/eureka
spring:
 application:
 name: eureka-server #程序的名字

4.啓動主程序

@SpringBootApplication
@EnableEurekaServer//開啓eurekaserver,會⾃動幫我們配置
public class EurekaStartApp {
 public static void main (String[] args){
   SpringApplication.run(EurekaStartApp.class,args);
    }
 }

5.啓動後訪問http://localhost:10000/
在這裏插入圖片描述
注意:除了Eureka,在此免費分享5套2020最新Java架構實戰教程+大廠面試題庫,有興趣的去小編裙: 783802103 免費拿,小白勿進哦!


四、Eurka 工作流程

瞭解完 Eureka 核心概念,自我保護機制,以及集羣內的工作原理後,我們來整體梳理一下 Eureka 的工作流程:

1、Eureka Server 啓動成功,等待服務端註冊。啓動過程中如果配置了集羣,集羣之間定時通過 Replicate 同步註冊表,每個 Eureka Server 都存在獨立完整的服務註冊表信息。

2、Eureka Client 啓動時根據配置的 Eureka Server 地址去註冊中心註冊服務。

3、Eureka Client 會每 30s 向 Eureka Server 發送一次心跳請求,證明客戶端服務正常。

4、當 Eureka Server 90s 內沒有收到 Eureka Client 的心跳,註冊中心則認爲該節點失效,會註銷該實例

5、單位時間內 Eureka Server 統計到有大量的 Eureka Client 沒有上送心跳,則認爲可能爲網絡異常,進入自我保護機制,不再剔除沒有上送心跳的客戶端

6、當 Eureka Client 心跳請求恢復正常之後,Eureka Server 自動退出自我保護模式

7、Eureka Client 定時全量或者增量從註冊中心獲取服務註冊表,並且將獲取到的信息緩存到本地

8、服務調用時,Eureka Client 會先從本地緩存找尋調取的服務。如果獲取不到,先從註冊中心刷新註冊表,再同步到本地緩存

9、Eureka Client 獲取到目標服務器信息,發起服務調用

10、Eureka Client 程序關閉時向 Eureka Server 發送取消請求,Eureka Server 將實例從註冊表中刪除


The best investment is to invest in yourself

在這裏插入圖片描述

2020.06.17 記錄辰兮的第84篇博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章