Eureka 简介和使用
Eureka 服務注冊與發現
- 服務注冊與發現
- Eureka與Zookeeper的比較
- ZooKeeper保證CP
- Eureka保證AP
- Eureka是什么?
- Eureka原理
- SpringBoot、Spring Cloud 和 Eureka 版本選擇
- Eureka單機搭建
- 搭建Eureka服務端
- 搭建Eureka客戶端的服務提供者
- 搭建Eureka客戶端的服務消費者
- Eureka集群搭建
- eureka 的一些其他配置
服務注冊與發現
在微服務架構中,服務注冊與發現是核心組件之一。Spring Cloud提供了多種服務注冊于發現的實現方式,例如Eureka、Consul、Zookeeper。
服務注冊:將服務所在主機、端口、版本號、通信協議等信息登記到注冊中心上;
服務發現:服務消費者向注冊中心請求已經登記的服務列表,然后得到某個服務的主機、端口號、版本號、通信協議等信息,從而實現對具體服務的調用。
Eureka與Zookeeper的比較
著名的CAP理論指出,一個分布式系統不可能同時滿足C(一致性)、A(可用性)、P(分區容錯性)。
由于分區容錯性在分布式系統中是必須要保證的,因此我們只能在A和C之間進行權衡,ZooKeeper保證的是CP,Eureka保證的是AP。
ZooKeeper保證CP
在ZooKeeper中,當master節點因為網絡故障與其他節點失去聯系時,剩余的節點會重新進行leader選舉,但問題在于,選舉leader需要一定的時間,且選舉期間ZooKeeper集群都是不可用的,這就導致在選舉期間注冊服務癱瘓。在云部署的環境下,因為網絡問題使得ZooKeeper集群失去master節點是大概率事件,雖然服務最終能夠恢復,但是在選舉期間內導致服務注冊長期不可用是難以容忍的。
Eureka保證AP
Eureka優先保證可用性,Eureka各個節點是平等的,某幾個節點掛掉不會影響正常節點的工作,剩余的節點依然可以提供注冊和查詢服務。而Eureka的客戶端在向某個Eureka注冊時如果發現連接失敗,則會自動切換至其他節點,只要有一臺Eureka還在,就能保證注冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)。
所以Eureka在網絡故障導致部分節點失去聯系的情況下,只要有一個節點可用,那么注冊和查詢服務就可以正常使用,而不會像zookeeper那樣使得整個注冊服務癱瘓,Eureka優先保證了可用性。
Eureka是什么?
- Eureka是一個服務治理組件,它主要包括服務注冊與發現,主要用來搭建服務注冊中心。
- Eureka是一個基于REST的服務,用來定位服務,進行中間層服務的負載均衡和故障轉移;
- Eureka是Netflix公司開發的,Spring Cloud封裝了Netflix公司開發的Eureka模塊來實現服務注冊與發現,也就是說Spring Cloud對Netflix Eureka進行了二次封裝;
Eureka原理
- Eureka采用了C-S(客戶端/服務端)的設計架構,也就是Eureka由兩個組件組成:Eureka客戶端和Eureka服務端。
- Eureka Server:作為服務注冊的服務端,他是服務注冊中心,系統中其他的微服務,使用Eureka的客戶端連接到Eureka 服務端,并維持心跳連接。這樣在EurekaServer中的服務注冊列表就可以看到所有可用服務的信息。
- Eureka Client:一個Java客戶端,用來簡化與服務器的交互、負載均衡,服務的故障切換等。客戶端同時也內置一個使用輪詢負載均衡的負載均衡算法器,在啟動應用后,向Eureka Server發送心跳(默認周期是30s)。如果Eureka在多個心跳周期內沒有接收到某個節點的心跳,就會將其從服務注冊表中移除(默認周期是90s)。
- 三大角色
- Eureka Server:提供服務的注冊與發現
- Eureka Client - Service Provider:將自身的服務注冊到Eureka Server中,從而使消費者能夠找到。
- Eureka Clinet - Service Consumer:服務消費方從Eureka Server中獲取服務注冊列表,從而找到消費服務。
SpringBoot、Spring Cloud 和 Eureka 版本選擇
方式一:手動添加依賴
比如:我使用的Spring Boot的版本是2.4.2,那么對應的Spring Cloud的版本是2020.0.0
https://mvnrepository.com
方式二:Idea自動添加依賴(推薦)
在項目構建中添加模塊Model,選擇Spring
先在下拉框選擇Spring Boot的版本,然后在Web中選擇Spring Web,在Spring Cloud Discovery中選擇Eureka的Client或者Server。
這樣,Idea會為我們自己找到和Spring Boot版本對應的Spring Cloud和Eureka版本。
Eureka單機搭建
搭建Eureka服務端
1、添加Spring Boot、Spring Cloud、Eureka Server的相關依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eurekaCluster-server-7001</artifactId><version>0.0.1-SNAPSHOT</version><name>eurekaCluster-server-7001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement> </project>2、配置文件進行配置
# 端口 server.port=7001 # 應用名稱,會在Eureka中顯示 spring.application.name=eurekaserver-7001 # 注冊中心的hostname eureka.instance.hostname=eureka7002 eureka.instance.non-secure-port=${server.port} # 是否注冊自己的信息到EurekaServer,默認是true eureka.client.register-with-eureka=false # 是否拉取其它服務的信息,默認是true eureka.client.fetch-registry=false # EurekaServer的地址,現在是自己的地址,如果是集群,需要加上其它Server的地址。 eureka.client.service-url.defaultZone=http://localhost:7001/eureka3、主入口添加注解 @EnableEurekaServer啟用eureka server
4、啟動eureka服務端,瀏覽器訪問 http://localhost:7001,可以看到看到Eureka Server 監控頁面。(目前紅框為空,之后服務注冊進來會看到類似下面的內容)
搭建Eureka客戶端的服務提供者
1、添加Spring Boot、Spring Cloud、Eureka Client的相關依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ex</groupId><artifactId>eureka-client-provider-8001</artifactId><version>0.0.1-SNAPSHOT</version><name>eureka-client-provider-8001</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><spring-cloud.version>2020.0.0</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement> </project>2、配置文件中進行相關配置
server.port=8001#指定該服務的名字,該名稱將在服務被調用時使用 spring.application.name=eureka-client-provider#Eureka配置:服務注冊到哪里 eureka.client.service-url.defaultZone=http://localhost:7001/eureka3、主入口添加注解 @EnableEurekaClient啟用eureka client
4、添加controller類,配合使用@RestController注解(Eureka是基于REST的)
5、啟動客戶端服務提供者
搭建Eureka客戶端的服務消費者
1、添加Spring Boot、Spring Cloud、Eureka Client的相關依賴(同上)
2、配置文件中進行配置
3、主入口添加注解 @EnableEurekaClient啟用eureka client
4、創建一個controller來訪問服務提供者的服務
5、啟動服務消費者
6、訪問 http://localhost:80/test 可以看到網頁輸出:
hello, Eureka Client 服務消費----Eureka Client 服務提供者
Eureka集群搭建
1、項目結構(1個消費者、2個服務提供者、3個注冊中心)
2、修改本機host文件
3、修改配置文件
Eureka Server:
# 指定服務注冊中心的位置 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eurekaEureka Client:(服務提供者和消費者)
#Eureka配置:服務注冊到哪里 #同時指定多個注冊地址,springcloud底層算法會選擇將數據注冊到某一個注冊中心 eureka.client.service-url.defaultZone=http://eureka7001:7001/eureka,http://eureka7002:7002/eureka,http://eureka7003:7003/eureka4、啟動項目,先啟動Eureka Server集群,再啟動Eureka Client。
5、在瀏覽器訪問 http://eureka7001:7001、http://eureka7002:7002、http://eureka7003:7003
eureka 的一些其他配置
# 自我保護模式:關閉以后當服務不能正常向注冊中心提交心跳信息時,在指定的時間點以后注冊中心就會將這個服務移除掉;開啟以后當服務不能正常提交自己的心跳也不會將服務移除;默認是true eureka.server.enable-self-preservation=false # 每隔2s向服務端發送一次心跳,證明自己還活著,默認30s eureka.instance.lease-renewal-interval-in-seconds=2 # 告訴服務端如果我10s之內沒有給你發送心跳代表我故障了,把我移除 eureka.instance.lease-expiration-duration-in-seconds=10總結
以上是生活随笔為你收集整理的Eureka 简介和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android系统原生应用解析之桌面闹钟
- 下一篇: 热点事件发现、演化及时间线Timelin