1 啟動(dòng)配置 & Maven依賴
引入SpringBoot 和 SpringCloud
引入Eureka Server
<dependency>
? ? ? <groupId>org.springframework.cloud</groupId>
? ? ? <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
resource目錄下創(chuàng)建啟動(dòng)配置文件application.yml
spring:
? application:
? ? name: eureka-server
server:
? port: 9999? ? #指定服務(wù)端口
eureka:
? instance:
? ? hostname: localhost
? client:
? ? registerWithEureka: false? #是否將eureka自身作為應(yīng)用注冊(cè)到eureka注冊(cè)中心
? ? fetchRegistry: false? ? ? #為true時(shí)述雾,可以啟動(dòng)模软,但報(bào)異常:Cannot execute request on any known server
? ? serviceUrl:
? ? ? defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
? server:
? ? enableSelfPreservation: false
? ? evictionIntervalTimerInMs: 4000
logging:
? config: classpath:logback.xml
創(chuàng)建啟動(dòng)類 DiscoveryServer
其中@EnableEurekaServer 代表啟用EurekaServer
@EnableEurekaClient非必須配置,當(dāng)需要將EurekaServer本身作為服務(wù)注冊(cè)到注冊(cè)中心時(shí)需要配置此注解建钥,適用于注冊(cè)中心集群模式。
客戶端配置
<dependency>
? ? ? ? ? ? <groupId>org.springframework.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
? </dependency>
2 Eureka的原理和優(yōu)點(diǎn)
eureka 原理
優(yōu)點(diǎn)
1糖埋、在Eureka平臺(tái)中忿项,如果某臺(tái)服務(wù)器宕機(jī),Eureka不會(huì)有類似于ZooKeeper的選舉leader的過程长豁;客戶端請(qǐng)求會(huì)自動(dòng)切換到新的Eureka節(jié)點(diǎn)钧唐;當(dāng)宕機(jī)的服務(wù)器重新恢復(fù)后,Eureka會(huì)再次將其納入到服務(wù)器集群管理之中蕉斜;而對(duì)于它來說逾柿,所有要做的無非是同步一些新的服務(wù)注冊(cè)信息而已。所以宅此,再也不用擔(dān)心有“掉隊(duì)”的服務(wù)器恢復(fù)以后机错,會(huì)從Eureka服務(wù)器集群中剔除出去的風(fēng)險(xiǎn)了。Eureka甚至被設(shè)計(jì)用來應(yīng)付范圍更廣的網(wǎng)絡(luò)分割故障父腕,并實(shí)現(xiàn)“0”宕機(jī)維護(hù)需求。(多個(gè)zookeeper之間網(wǎng)絡(luò)出現(xiàn)問題,造成出現(xiàn)多個(gè)leader,發(fā)生腦裂)當(dāng)網(wǎng)絡(luò)分割故障發(fā)生時(shí)斥难,每個(gè)Eureka節(jié)點(diǎn),會(huì)持續(xù)的對(duì)外提供服務(wù)(注:ZooKeeper不會(huì)):接收新的服務(wù)注冊(cè)同時(shí)將它們提供給下游的服務(wù)發(fā)現(xiàn)請(qǐng)求哑诊。這樣一來,就可以實(shí)現(xiàn)在同一個(gè)子網(wǎng)中(same side of partition)及刻,新發(fā)布的服務(wù)仍然可以被發(fā)現(xiàn)與訪問。
2缴饭、正常配置下,Eureka內(nèi)置了心跳服務(wù)颗搂,用于淘汰一些“瀕死”的服務(wù)器;如果在Eureka中注冊(cè)的服務(wù)丢氢,它的“心跳”變得遲緩時(shí),Eureka會(huì)將其整個(gè)剔除出管理范圍(這點(diǎn)有點(diǎn)像ZooKeeper的做法)卖丸。這是個(gè)很好的功能纺且,但是當(dāng)網(wǎng)絡(luò)分割故障發(fā)生時(shí),這也是非常危險(xiǎn)的稍浆;因?yàn)樵芈担切┮驗(yàn)榫W(wǎng)絡(luò)問題(注:心跳慢被剔除了)而被剔除出去的服務(wù)器本身是很”健康“的,只是因?yàn)榫W(wǎng)絡(luò)分割故障把Eureka集群分割成了獨(dú)立的子網(wǎng)而不能互訪而已衅枫。
幸運(yùn)的是嫁艇,Netflix考慮到了這個(gè)缺陷。如果Eureka服務(wù)節(jié)點(diǎn)在短時(shí)間里丟失了大量的心跳連接(注:可能發(fā)生了網(wǎng)絡(luò)故障)弦撩,那么這個(gè)Eureka節(jié)點(diǎn)會(huì)進(jìn)入”自我保護(hù)模式“步咪,同時(shí)保留那些“心跳死亡“的服務(wù)注冊(cè)信息不過期。此時(shí)益楼,這個(gè)Eureka節(jié)點(diǎn)對(duì)于新的服務(wù)還能提供注冊(cè)服務(wù)猾漫,對(duì)于”死亡“的仍然保留,以防還有客戶端向其發(fā)起請(qǐng)求感凤。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后悯周,這個(gè)Eureka節(jié)點(diǎn)會(huì)退出”自我保護(hù)模式“。所以Eureka的哲學(xué)是陪竿,同時(shí)保留”好數(shù)據(jù)“與”壞數(shù)據(jù)“總比丟掉任何”好數(shù)據(jù)“要更好禽翼,所以這種模式在實(shí)踐中非常有效。
3、Eureka還有客戶端緩存功能(注:Eureka分為客戶端程序與服務(wù)器端程序兩個(gè)部分闰挡,客戶端程序負(fù)責(zé)向外提供注冊(cè)與發(fā)現(xiàn)服務(wù)接口)锐墙。所以即便Eureka集群中所有節(jié)點(diǎn)都失效,或者發(fā)生網(wǎng)絡(luò)分割故障導(dǎo)致客戶端不能訪問任何一臺(tái)Eureka服務(wù)器长酗;Eureka服務(wù)的消費(fèi)者仍然可以通過Eureka客戶端緩存來獲取現(xiàn)有的服務(wù)注冊(cè)信息溪北。甚至最極端的環(huán)境下,所有正常的Eureka節(jié)點(diǎn)都不對(duì)請(qǐng)求產(chǎn)生相應(yīng)花枫,也沒有更好的服務(wù)器解決方案來解決這種問題
時(shí)刻盐;得益于Eureka的客戶端緩存技術(shù),消費(fèi)者服務(wù)仍然可以通過Eureka客戶端查詢與獲取注冊(cè)服務(wù)信息劳翰,這點(diǎn)很重要。
4馒疹、Eureka的構(gòu)架保證了它能夠成為Service發(fā)現(xiàn)服務(wù)佳簸。它相對(duì)與ZooKeeper來說剔除了Leader節(jié)點(diǎn)的選取或者事務(wù)日志機(jī)制,這樣做有利于減少使用者維護(hù)的難度也保證了Eureka的在運(yùn)行時(shí)的健壯性颖变。而且Eureka就是為發(fā)現(xiàn)服務(wù)所設(shè)計(jì)的生均,它有獨(dú)立的客戶端程序庫,同時(shí)提供心跳服務(wù)腥刹、服務(wù)健康監(jiān)測(cè)马胧、自動(dòng)發(fā)布服務(wù)與自動(dòng)刷新緩存的功能。但是衔峰,如果使用ZooKeeper你必須自己來實(shí)現(xiàn)這些功能佩脊。Eureka的所有庫都是開源的,所有人都能看到與使用這些源代碼垫卤,這比那些只有一兩個(gè)人能看或者維護(hù)的客戶端庫要好威彰。
5歇盼、維護(hù)Eureka服務(wù)器也非常的簡(jiǎn)單评抚,比如慨代,切換一個(gè)節(jié)點(diǎn)只需要在現(xiàn)有EIP下移除一個(gè)現(xiàn)有的節(jié)點(diǎn)然后添加一個(gè)新的就行。Eureka提供了一個(gè)web-based的圖形化的運(yùn)維界面鸣剪,在這個(gè)界面中可以查看Eureka所管理的注冊(cè)服務(wù)的運(yùn)行狀態(tài)信息:是否健康筐骇,運(yùn)行日志等。Eureka甚至提供了Restful-API接口厌均,方便第三方程序集成Eureka的功能棺弊。
3 其他注冊(cè)中心:Zookeeper,Consul,Etcd...
4 (@_@)拓展知識(shí):CAP理論
C(一致性)擒悬、A(可用性)和P(分區(qū)容錯(cuò)性),一個(gè)系統(tǒng)不可能同時(shí)滿足這三點(diǎn),這就好比性能優(yōu)化時(shí)常常會(huì)考慮的時(shí)間與空間的關(guān)系懂牧。所以Zookeeper保證的是CP,而Eureka保證的是AP,在互聯(lián)網(wǎng)應(yīng)用中,大部分系統(tǒng)需要7*24小時(shí)不間斷提供服務(wù)(我們IT人只賣藝不賣身),個(gè)人覺得AP要更加重要些。