03-服務註冊Eureka基礎
阿新 • • 發佈:2022-04-02
目錄
1、微服務的註冊中心
1.1、註冊中心的主要作用
1.2、常見的註冊中心
2、Eureka的概述
2.1、Eureka的基礎知識
2.2、Eureka的互動流程與原理
3、搭建Eureka註冊中心
3.1、搭建Eureka服務中心
3.2、服務註冊中心管理後臺
4、服務註冊到Eureka註冊中心
4.1、商品服務註冊
4.2、訂單服務註冊
4.3、使用者服務註冊
5、Eureka中的自我保護
6、Eureka中的元資料
Zookeeper
zookeeper它是一個分散式服務框架,是Apache Hadoop 的一個子專案,它主要是用來解決分散式應
用中經常遇到的一些資料管理問題,如:統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等。簡單來說zookeeper=檔案系統+監聽通知機制。
Eureka
Eureka是在Java語言上,基於Restful Api開發的服務註冊與發現元件,Springcloud Netflix中的重要元件
Consul
Consul是由HashiCorp基於Go語言開發的支援多資料中心分散式高可用的服務釋出和註冊服務軟體,採用Raft演算法保證服務的一致性,且支援健康檢查
Nacos
Nacos是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。簡單來說Nacos 就是註冊中心 + 配置中心的組合,提供簡單易用的特性集,幫助我們解決微服務開發必會涉及到的服務註冊與發現,服務配置,服務管理等問題。Nacos 還是 Spring Cloud Alibaba 元件之一,負責服務註冊與發現。
總結
圖是來自Eureka官方的架構圖,大致描述了Eureka叢集的工作過程。圖中包含的元件非常多,可能比
較難以理解,我們用通俗易懂的語言解釋一下:
Application Service 相當於本書中的服務提供者,Application Client相當於服務消費者;
Make Remote Call,可以簡單理解為呼叫RESTful API;
us-east-1c、us-east-1d等都是zone,它們都屬於us-east-1這個region;
由圖可知,Eureka包含兩個元件:Eureka Server 和 Eureka Client,它們的作用如下:
Eureka Client是一個Java客戶端,用於簡化與Eureka Server的互動;
Eureka Server提供服務發現的能力,各個微服務啟動時,會通過Eureka Client向Eureka Server
進行註冊自己的資訊(例如網路資訊),Eureka Server會儲存該服務的資訊;
微服務啟動後,會週期性地向Eureka Server傳送心跳(預設週期為30秒)以續約自己的資訊。如
果Eureka Server在一定時間內沒有接收到某個微服務節點的心跳,Eureka Server將會登出該微服務節點(預設90秒);
每個Eureka Server同時也是Eureka Client,多個Eureka Server之間通過複製的方式完成服務注
冊表的同步;
Eureka Client會快取Eureka Server中的資訊。即使所有的Eureka Server節點都宕掉,服務消費
者依然可以使用快取中的資訊找到服務提供者。
綜上,Eureka通過心跳檢測、健康檢查和客戶端快取等機制,提高了系統的靈活性、可伸縮性和可用
性。
3、搭建Eureka註冊中心
3.1、搭建Eureka服務中心
(1) 建立shop_eureka_server子模組
在 shop_parent 下建立子模組 shop_eureka_server
(2) 引入maven座標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
(3) 配置application.yml
1、微服務的註冊中心
1.1、註冊中心的主要作用
服務註冊中心(下稱註冊中心)是微服務架構非常重要的一個元件,在微服務架構裡主要起到了協調者的一個作用。註冊中心一般包含如下幾個功能: 1. 服務發現: 服務註冊/反註冊:儲存服務提供者和服務呼叫者的資訊 服務訂閱/取消訂閱:服務呼叫者訂閱服務提供者的資訊,最好有實時推送的功能 服務路由(可選):具有篩選整合服務提供者的能力。 2. 服務配置: 配置訂閱:服務提供者和服務呼叫者訂閱微服務相關的配置 配置下發:主動將配置推送給服務提供者和服務呼叫者 3. 服務健康檢測 檢測服務提供者的健康情況 1.2、常見的註冊中心
最後我們通過一張表格大致瞭解Eureka、Consul、Zookeeper的異同點。選擇什麼型別的服務註冊與 發現元件可以根據自身專案要求決定。 2、Eureka的概述 2.1、Eureka的基礎知識
上圖簡要描述了Eureka的基本架構,由3個角色組成: 1、Eureka Server 提供服務註冊和發現 2、Service Provider 服務提供方 將自身服務註冊到Eureka,從而使服務消費方能夠找到 3、Service Consumer 服務消費方 從Eureka獲取註冊服務列表,從而能夠消費服務 2.2、Eureka的互動流程與原理
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ registerWithEureka: 是否將自己註冊到Eureka服務中,本身就是所有無需註冊 fetchRegistry : 是否從Eureka中獲取註冊資訊 serviceUrlEureka: 客戶端與Eureka服務端進行互動的地址 (4) 配置啟動類 在 cn.itcast.eureka 下建立啟動類 EurekaServerApplication @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
EnableEurekaServer : 啟用Eureka Server端配置 3.2、服務註冊中心管理後臺 開啟瀏覽器訪問 http://localhost8761即可進入EurekaServer內建的管理控制檯,顯示效果如下
4、服務註冊到Eureka註冊中心 4.1、商品服務註冊 (1) 商品模組中引入座標 在 shop_service_product 的pom檔案中新增eureka client的相關座標 <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies>
(2) 配置application.yml檔案 在工程的 application.yml 中新增Eureka Server的主機地址 eureka: client: serviceUrl: # eureka server的路徑 defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true #使用ip註冊
(3) 修改啟動類新增服務註冊註解 @SpringBootApplication //@EnableDiscoveryClient //@EnableEurekaClient public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }
從Spring Cloud Edgware版本開始, @EnableDiscoveryClient 或 @EnableEurekaClient 可 省略。只需加上相關依賴,並進行相應配置,即可將微服務註冊到服務發現元件上 4.2、訂單服務註冊 和商品微服務一樣,只需要引入座標依賴,在工程的 application.yml 中新增Eureka Server的主機地址即可 4.3、使用者服務註冊 和商品微服務一樣,只需要引入座標依賴,在工程的 application.yml 中新增Eureka Server的主機地址即可 5、Eureka中的自我保護 微服務第一次註冊成功之後,每30秒會發送一次心跳將服務的例項資訊註冊到註冊中心。通知 Eureka Server 該例項仍然存在。如果超過90秒沒有傳送更新,則伺服器將從註冊資訊中將此服務移除。 Eureka Server在執行期間,會統計心跳失敗的比例在15分鐘之內是否低於85%,如果出現低於的情況(在單機除錯的時候很容易滿足,實際在生產環境上通常是由於網路不穩定導致),Eureka Server會將當前的例項註冊資訊保護起來,同時提示這個警告。保護模式主要用於一組客戶端和Eureka Server之間存在網路分割槽場景下的保護。一旦進入保護模式,Eureka Server將會嘗試保護其服務登錄檔中的資訊,不再刪除服務登錄檔中的資料(也就是不會登出任何微服務) 驗證完自我保護機制開啟後,並不會馬上呈現到web上,而是預設需等待 5 分鐘(可以通過 eureka.server.wait-time-in-ms-when-sync-empty 配置),即 5 分鐘後你會看到下面的提示資訊: 如果關閉自我保護 通過設定 eureka.enableSelfPreservation=false 來關閉自我保護功能。
6、Eureka中的元資料 Eureka的元資料有兩種:標準元資料和自定義元資料 標準元資料:主機名、IP地址、埠號、狀態頁和健康檢查等資訊,這些資訊都會被髮布在服務注 冊表中,用於服務之間的呼叫。 自定義元資料:可以使用eureka.instance.metadata-map配置,符合KEY/VALUE的儲存格式。這 些元資料可以在遠端客戶端中訪問。 在程式中可以使用DiscoveryClient 獲取指定微服務的所有元資料資訊 @SpringBootTest @RunWith(SpringJUnit4ClassRunner.class) public class RestTemplateTest { @Autowired private DiscoveryClient discoveryClient; @Test public void test() { //根據微服務名稱從註冊中心獲取相關的元資料資訊 List<ServiceInstance> instances = discoveryClient.getInstances("shop- service-product"); for (ServiceInstance instance : instances) { System.out.println(instance); } } }
搜尋
複製