springcloud:注冊中心和Eureka詳解

轉(zhuǎn)載自:https://my.oschina.net/ahusky/blog/1824767

1. 大致介紹

Eureka是Netflix開源的一款提供服務(wù)注冊和發(fā)現(xiàn)的產(chǎn)品窒典,它提供了完整的Service Registry和Service Discovery實現(xiàn)。也是springcloud體系中最重要最核心的組件之一断凶。

Eureka 意思是 可以了,有了,找到了,取這個名字當(dāng)注冊中心,估計老外是嘗試了好久牧挣,終于成功了,然后名字就出來了棚菊〗龋“有了叔汁,I got it ”统求。呵呵,個人猜想

Netflix 是一個外國的公司

2. 背景介紹

服務(wù)中心 也稱注冊中心据块,管理各種服務(wù)包括服務(wù)的 注冊码邻、發(fā)現(xiàn)、熔斷另假、降級等像屋,比如dubbo admin后臺的各種功能。有了服務(wù)中心边篮,調(diào)用關(guān)系的變化如下己莺,畫幾個簡圖來幫助理解

1) A請求項目B

正常項目調(diào)用:

有了服務(wù)中心之后,任何一個服務(wù)都不能直接去掉用戈轿,都需要通過服務(wù)中心來調(diào)用?

2)項目A調(diào)用項目B凌受,項目B在調(diào)用項目C?

這時候調(diào)用的步驟就會為兩步:第一步,項目A首先從服務(wù)中心請求項目B服務(wù)器思杯,然后項目B在從服務(wù)中心請求項目C服務(wù)胜蛉。?

上面的項目只是兩三個相互之間的簡單調(diào)用,但是如果項目超過20個30個呢,在15年底的時候我司分布式的項目就達到了二十幾個誊册,畫一張圖來描述幾十個項目之間的相互調(diào)用關(guān)系全是線條领突,任何其中的一個項目改動,就會牽連好幾個項目跟著重啟案怯,巨麻煩而且容易出錯君旦。通過服務(wù)中心來獲取服務(wù)你不需要關(guān)注你調(diào)用的項目IP地址,由幾臺服務(wù)器組成嘲碱,每次直接去服務(wù)中心獲取可以使用的服務(wù)去調(diào)用既可于宙。

由于各種服務(wù)都注冊到了服務(wù)中心,就有了去做很多高級功能條件悍汛。比如幾臺服務(wù)提供相同服務(wù)來做均衡負載捞魁;監(jiān)控服務(wù)器調(diào)用成功率來做熔斷,移除服務(wù)列表中的故障點离咐;監(jiān)控服務(wù)調(diào)用時間來對不同的服務(wù)器設(shè)置不同的權(quán)重等等

說Eureka之前我先八卦一下Netflix

Netflix

以下介紹來自于百度百科:

Netflix是一家美國公司谱俭,在美國、加拿大提供互聯(lián)網(wǎng)隨選流媒體播放,定制DVD术陶、藍光光碟在線chuzu業(yè)務(wù)凑懂。該公司成立于1997年梧宫,總部位于加利福尼亞州洛斯蓋圖接谨,1999年開始訂閱服務(wù)脓豪。2009年笤闯,該公司可提供多達10萬部DVD電影,并有1千萬的訂戶荤胁。2007年2月25日,Netflix宣布已經(jīng)售出第10億份DVD圆丹。HIS一份報告中表示滩愁,2011年Netflix網(wǎng)絡(luò)電影銷量占據(jù)美國用戶在線電影總銷量的45%。

Netflix的開源框架組件已經(jīng)在Netflix的大規(guī)模分布式微服務(wù)環(huán)境中經(jīng)過多年的生產(chǎn)實戰(zhàn)驗證辫封,正逐步被社區(qū)接受為構(gòu)造微服務(wù)框架的標(biāo)準(zhǔn)組件硝枉。Spring Cloud開源產(chǎn)品,主要是基于對Netflix開源組件的進一步封裝倦微,方便Spring開發(fā)人員構(gòu)建微服務(wù)基礎(chǔ)框架妻味。對于一些打算構(gòu)建微服務(wù)框架體系的公司來說,充分利用或參考借鑒Netflix的開源微服務(wù)組件(或Spring Cloud)欣福,在此基礎(chǔ)上進行必要的企業(yè)定制责球,無疑是通向微服務(wù)架構(gòu)的捷徑。

Eureka

按照官方介紹:

Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.

Eureka 是一個基于 REST 的服務(wù)拓劝,主要在 AWS 云中使用, 定位服務(wù)來進行中間層服務(wù)器的負載均衡和故障轉(zhuǎn)移雏逾。

Spring Cloud 封裝了 Netflix 公司開發(fā)的 Eureka 模塊來實現(xiàn)服務(wù)注冊和發(fā)現(xiàn)。Eureka 采用了 C-S 的設(shè)計架構(gòu)凿将。Eureka Server 作為服務(wù)注冊功能的服務(wù)器校套,它是服務(wù)注冊中心。而系統(tǒng)中的其他微服務(wù)牧抵,使用 Eureka 的客戶端連接到 Eureka Server,并維持心跳連接侨把。這樣系統(tǒng)的維護人員就可以通過 Eureka Server 來監(jiān)控系統(tǒng)中各個微服務(wù)是否正常運行犀变。Spring Cloud 的一些其他模塊(比如Zuul)就可以通過 Eureka Server 來發(fā)現(xiàn)系統(tǒng)中的其他微服務(wù),并執(zhí)行相關(guān)的邏輯秋柄。

Eureka由兩個組件組成:Eureka服務(wù)器和Eureka客戶端获枝。Eureka服務(wù)器用作服務(wù)注冊服務(wù)器。Eureka客戶端是一個java客戶端骇笔,用來簡化與服務(wù)器的交互省店、作為輪詢負載均衡器嚣崭,并提供服務(wù)的故障切換支持。Netflix在其生產(chǎn)環(huán)境中使用的是另外的客戶端懦傍,它提供基于流量雹舀、資源利用率以及出錯狀態(tài)的加權(quán)負載均衡。

用一張圖來認識以下:

上圖簡要描述了Eureka的基本架構(gòu)粗俱,由3個角色組成:

1)说榆、Eureka Server

提供服務(wù)注冊和發(fā)現(xiàn)

2)、Service Provider

服務(wù)提供方

將自身服務(wù)注冊到Eureka寸认,從而使服務(wù)消費方能夠找到

3)签财、Service Consumer

服務(wù)消費方

從Eureka獲取注冊服務(wù)列表,從而能夠消費服務(wù)

案例實踐

Eureka Server

spring cloud已經(jīng)幫我實現(xiàn)了服務(wù)注冊中心偏塞,我們只需要很簡單的幾個步驟就可以完成唱蒸。

1)、pom中添加依賴

org.springframework.cloudspring-cloud-starterorg.springframework.cloudspring-cloud-starter-eureka-serverorg.springframework.bootspring-boot-starter-testtest

2)灸叼、添加啟動代碼中添加@EnableEurekaServer注解

@SpringBootApplication@EnableEurekaServerpublicclassSpringCloudEurekaApplication{publicstaticvoidmain(String[] args){? ? ? ? SpringApplication.run(SpringCloudEurekaApplication.class, args);? ? }}

3)油宜、配置文件

在默認設(shè)置下,該服務(wù)注冊中心也會將自己作為客戶端來嘗試注冊它自己怜姿,所以我們需要禁用它的客戶端注冊行為慎冤,在application.properties添加以下配置:

spring.application.name=spring-cloud-eurekaserver.port=8000eureka.client.register-with-eureka=falseeureka.client.fetch-registry=falseeureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

參數(shù)介紹:

eureka.client.register-with-eureka :表示是否將自己注冊到Eureka Server,默認為true沧卢。

eureka.client.fetch-registry :表示是否從Eureka Server獲取注冊信息蚁堤,默認為true。

eureka.client.serviceUrl.defaultZone :設(shè)置與Eureka Server交互的地址但狭,查詢服務(wù)和注冊服務(wù)都需要依賴這個地址披诗。默認是http://localhost:8761/eureka?;多個地址可使用 , 分隔立磁。

啟動工程后呈队,訪問:http://localhost:8000/,可以看到下面的頁面唱歧,其中還沒有發(fā)現(xiàn)任何服務(wù)?

集群

注冊中心這么關(guān)鍵的服務(wù)宪摧,如果是單點話,遇到故障就是毀滅性的颅崩。在一個分布式系統(tǒng)中几于,服務(wù)注冊中心是最重要的基礎(chǔ)部分,理應(yīng)隨時處于可以提供服務(wù)的狀態(tài)沿后。為了維持其可用性沿彭,使用集群是很好的解決方案。Eureka通過互相注冊的方式來實現(xiàn)高可用的部署尖滚,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現(xiàn)高可用部署喉刘。

雙節(jié)點注冊中心

首次我們嘗試一下雙節(jié)點的注冊中心的搭建瞧柔。

1)、創(chuàng)建application-peer1.properties睦裳,作為peer1服務(wù)中心的配置造锅,并將serviceUrl指向peer2

spring.application.name=spring-cloud-eurekaserver.port=8000eureka.instance.hostname=peer1eureka.client.serviceUrl.defaultZone=http://peer2:8001/eureka/

2、創(chuàng)建application-peer2.properties推沸,作為peer2服務(wù)中心的配置备绽,并將serviceUrl指向peer1

spring.application.name=spring-cloud-eurekaserver.port=8001eureka.instance.hostname=peer2eureka.client.serviceUrl.defaultZone=http://peer1:8000/eureka/

3)、host轉(zhuǎn)換

在hosts文件中加入如下配置

127.0.0.1peer1127.0.0.1peer2

4)鬓催、打包啟動

依次執(zhí)行下面命令

#打包mvn clean package# 分別以peer1和peeer2 配置信息啟動eurekajava -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

依次啟動完成后肺素,瀏覽器輸入:http://localhost:8000/?效果圖如下:?

根據(jù)圖可以看出peer1的注冊中心DS Replicas已經(jīng)有了peer2的相關(guān)配置信息,并且出現(xiàn)在available-replicas中宇驾。我們手動停止peer2來觀察倍靡,發(fā)現(xiàn)peer2就會移動到unavailable-replicas一欄中,表示peer2不可用课舍。

到此雙節(jié)點的配置已經(jīng)完成塌西。

eureka集群使用

在生產(chǎn)中我們可能需要三臺或者大于三臺的注冊中心來保證服務(wù)的穩(wěn)定性,配置的原理其實都一樣筝尾,將注冊中心分別指向其它的注冊中心捡需。這里只介紹三臺集群的配置情況,其實和雙節(jié)點的注冊中心類似筹淫,每臺注冊中心分別又指向其它兩個節(jié)點即可站辉,使用application.yml來配置。

application.yml配置詳情如下:

---spring:application:? ? name: spring-cloud-eureka? profiles: peer1server:port: 8000eureka:instance:? ? hostname: peer1? client:? ? serviceUrl:? ? ? defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/---spring:application:? ? name: spring-cloud-eureka? profiles: peer2server:port: 8001eureka:instance:? ? hostname: peer2? client:? ? serviceUrl:? ? ? defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/---spring:application:? ? name: spring-cloud-eureka? profiles: peer3server:port: 8002eureka:instance:? ? hostname: peer3? client:? ? serviceUrl:? ? ? defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/

分別以peer1损姜、peer2饰剥、peer3的配置參數(shù)啟動eureka注冊中心。

java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar--spring.profiles.active=peer1java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar--spring.profiles.active=peer2java -jar spring-cloud-eureka-0.0.1-SNAPSHOT.jar--spring.profiles.active=peer3

依次啟動完成后摧阅,瀏覽器輸入:http://localhost:8000/?效果圖如下:?

?可以在peer1中看到了peer2汰蓉、peer3的相關(guān)信息。至此eureka集群也已經(jīng)完成了

歡迎學(xué)習(xí)正在學(xué)習(xí)java的大佬棒卷,小白加入一起交流學(xué)習(xí):657741243

點擊鏈接加入群聊【Java技術(shù)交流】:https://jq.qq.com/?_wv=1027&k=5sr0405

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顾孽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子娇跟,更是在濱河造成了極大的恐慌岩齿,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苞俘,死亡現(xiàn)場離奇詭異,居然都是意外死亡龄章,警方通過查閱死者的電腦和手機吃谣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門乞封,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岗憋,你說我怎么就攤上這事肃晚。” “怎么了仔戈?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵关串,是天一觀的道長。 經(jīng)常有香客問我监徘,道長晋修,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任凰盔,我火速辦了婚禮墓卦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘户敬。我一直安慰自己落剪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布尿庐。 她就那樣靜靜地躺著忠怖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抄瑟。 梳的紋絲不亂的頭發(fā)上凡泣,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音锐借,去河邊找鬼问麸。 笑死,一個胖子當(dāng)著我的面吹牛钞翔,可吹牛的內(nèi)容都是我干的严卖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼布轿,長吁一口氣:“原來是場噩夢啊……” “哼哮笆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起汰扭,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤稠肘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萝毛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體项阴,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年笆包,在試婚紗的時候發(fā)現(xiàn)自己被綠了环揽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片略荡。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歉胶,靈堂內(nèi)的尸體忽然破棺而出汛兜,到底是詐尸還是另有隱情,我是刑警寧澤通今,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布粥谬,位于F島的核電站,受9級特大地震影響辫塌,放射性物質(zhì)發(fā)生泄漏漏策。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一璃氢、第九天 我趴在偏房一處隱蔽的房頂上張望哟玷。 院中可真熱鬧,春花似錦一也、人聲如沸巢寡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抑月。三九已至,卻和暖如春舆蝴,著一層夾襖步出監(jiān)牢的瞬間谦絮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工洁仗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留层皱,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓赠潦,卻偏偏與公主長得像叫胖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子她奥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容