1拿愧、Eureka簡介
Eureka 是 Netflix 出品的用于實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)的工具欣除,Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)
Eureka采用C-S的設(shè)計架構(gòu),包含Eureka Server 和Eureka Client兩個組件
2坦冠、基本原理
Applecation-server :服務(wù)提供者
Application-cliene:服務(wù)消費者
服務(wù)啟動后向Eureka注冊,Eureka Server會將注冊信息向其他Eureka Server進行同步,當服務(wù)消費者要調(diào)用服務(wù)提供者运翼,則向服務(wù)注冊中心獲取服務(wù)提供者地址,然后會將服務(wù)提供者地址緩存在本地兴枯,下次再調(diào)用時血淌,則直接從本地緩存中取,完成一次調(diào)用财剖。
3悠夯、Eureka自我保護機制
在默認配置中EurekaServer服務(wù)在一定時間(默認為90秒)沒接受到某個服務(wù)的心跳連接后,EurekaServer會注銷該服務(wù)峰伙。但是會存在當網(wǎng)絡(luò)分區(qū)發(fā)生故障疗疟,導(dǎo)致該時間內(nèi)沒有心跳連接,但該服務(wù)本身還是健康運行的情況瞳氓。Eureka通過“自我保護模式”來解決這個問題策彤。
在自我保護模式中,Eureka Server會保護服務(wù)注冊表中的信息匣摘,不再注銷任何服務(wù)實例店诗。
4、Eureka與Zookeeper的區(qū)別
CAP理論指出音榜,一個分布式系統(tǒng)不可能同時滿足C(一致性)庞瘸、A(可用性)和P(分區(qū)容錯性)。由于分區(qū)容錯性P在是分布式系統(tǒng)中必須要保證的赠叼,因此我們只能在A和C之間進行權(quán)衡擦囊。
Zookeeper保證CP
Zookeeper 為主從結(jié)構(gòu)违霞,有l(wèi)eader節(jié)點和follow節(jié)點。當leader節(jié)點down掉之后瞬场,剩余節(jié)點會重新進行選舉买鸽。選舉過程中會導(dǎo)致服務(wù)不可用,丟掉了可用行贯被。
Eureka保證CP
Eureka各個節(jié)點都是平等的眼五,幾個節(jié)點掛掉不會影響正常節(jié)點的工作,剩余的節(jié)點依然可以提供注冊和查詢服務(wù)彤灶。而Eureka的客戶端在向某個Eureka注冊或時如果發(fā)現(xiàn)連接失敗看幼,則會自動切換至其它節(jié)點,只要有一臺Eureka還在幌陕,就能保證注冊服務(wù)可用(保證可用性)诵姜,只不過查到的信息可能不是最新的(不保證強一致性)。
5苞轿、快速使用
Eureka服務(wù)端依賴
<!--eureka-server服務(wù)端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
服務(wù)端配置
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服務(wù)端的實例名稱
client:
register-with-eureka: false #false表示不向注冊中心注冊自己茅诱。
fetch-registry: false #false表示自己端就是注冊中心,我的職責就是維護服務(wù)實例搬卒,并不需要去檢索服務(wù)
service-url:
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ #設(shè)置與Eureka Server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個地址瑟俭。
將微服務(wù)注冊到Eureka中
<!-- 將微服務(wù)provider側(cè)注冊進eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
服務(wù)實例配置
eureka:
client: #客戶端注冊進eureka服務(wù)列表內(nèi)
service-url:
defaultZone: http://localhost:7001/eureka