天天看點

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

哈喽各位同學們大家好呀,今天是開發者學院中課程“Spring Cloud微服務架構設計與開發實戰”的章節三的“Spring Cloud微服務注冊與發現 ”幹貨總結~是一起學習新課程吧!

課程連結以及圖譜位址小編已經為大家指路了,搭配學習效果更佳👇

課程名稱:Spring Cloud微服務注冊與發現 

課程位址:

https://developer.aliyun.com/learning/course/60/detail/1095

圖譜名稱:Alibaba Java 技術圖譜

圖譜位址:

https://developer.aliyun.com/graph/java

Spring Cloud微服務注冊與發現 

一、Spring Cloud服務注冊與發現 

對于微服務業務需要先進行拆分,微服務執行個體部署數量不固定,可以彈性伸縮,與傳統架構不一樣,比較靠攏雲計算、雲原生。 

(一)服務注冊與發現 

解決大規模服務叢集的注冊和發現問題,主要為了友善用戶端調用。比如開發一個微服務是訂單服務,開始隻啟用一台伺服器,用戶端和用戶端直接調用微服務就可以了。但如果啟用兩台以上,用戶端直接寫多台服務的IP位址做輪巡是不行的,因為如果遇到類似雙11促銷場景,需要增加很多台服務,且是彈性不定數量增加,這時候最好有一種方案能夠解決這個問題,把用戶端和服務叢集結耦。 

結耦裡面很重要的就是注冊中心,注冊中心可以幫助管理服務,當隻有一個、兩個服務的時候,用戶端可以直接和服務建立連接配接,當服務數量不固定,且伸縮範圍很大時,需要一個專門的機構幫助管理這些服務。 

服務注冊與發現總結: 

1. 大規模微服務叢集架構; 

2. 許多服務執行個體; 

3. 用戶端要找到自己調用的服務; 

4. 新服務上線; 

5. 某個服務當機,下線; 

6. 實時監控服務的狀态。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

(二)Spring Cloud Eureka服務發現與注冊 

在微服務架構體系裡, Netflix公司貢獻了其中一個很重要的項目叫Eureka,主要解決服務注冊中心的問題。在大資料裡面,有同類型的産品ZooKeeper,Spring Cloud通過擴充元件也可以進行內建。 

本節課主要講實戰開發,建立注冊中心以後,怎麼樣把微服務注冊進去,怎麼讓注冊中心管理服務。總結: 

1. Netflix公司開源的項目, 

2. Eureka:注冊中心, 

3. 一個基于 REST 的中心服務,管理服務, 

4. 實作雲端的服務注冊和服務發現。 

5. Eureka元件組成:Eureka伺服器和Eureka用戶端; 

6. 競争對手ZooKeeper; 

7. 服務發現子產品(Eureka)是Netflix的核心; 

8. Spring Cloud Netflix提供的簡化開發模闆; 

9. 直接使用spring boot,建立項目; 

10. 添加 @ EnableEurekaServer開發注冊服務中心。 

(三)Spring Cloud 架構圖 

下圖所示,是微服務架構圖,有注冊中心,用戶端微服務上線注冊,微服務執行個體數量是動态的,有可能是一台,也有可能是很多台,靈活彈性根據用戶端的壓力做彈性伸縮。 

用戶端調用時不是直接找微服務,先找注冊中心,有哪些好的微服務,有哪些比對的,每次搜尋最新的報表,然後調用。用戶端也可以按照各種負載均衡的政策去調用,或者結合一些負責運作的算法靈活排程。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

二、Eureka注冊中心開發實戰 

(一)Spring Eureka注冊中心 

1. 建立Eureka服務注冊中心項目;  

2. 添加@ EnableEurekaServer;  

3. 将spring boot應用改造成Eureka服務注冊中心; 

4. application.properties增加配置;  

5. 打包項目;  

6. 運作;  

7. 測試頁面;  

8. 參考

https://spring.io/guides/gs/service-

registration-and-discovery/。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

(二)application.properties配置 

• server.port=8761; 

• eureka.client.register-with-eureka=false; 

• eureka.client.fetch-registry=false; 

• eureka.client.serviceUrl.defaultZone=http://localhost:${ser 

ver.port}/eureka/; 

• logging.level.com.netflix.eureka=OFF; 

• logging.level.com.netflix.discovery=OFF; 

(三)建立Spring Eureka服務項目 

示範部分: 

下圖所示,是正常運作界面。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

這裡還沒有服務執行個體,下面示範開發微服務,再把微服務注冊進來。打開Eclipse開發工具,建立項目,插件裡面會有New Spring Sttarter Project模闆,Name 欄加入Eureka,下面直接配公司的域名就行,Group 欄輸入com.alibaba,點選下一步,如下圖所示: 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

Available欄輸入Eureka,加入注冊中心、服務端,為了開發調試再加入dev,用于加載動态調試工具,做動态調試服務。示範版本是2.4.1,再下一步: 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

下一步: 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

。 

這裡面會生成項目,Maven會自動來去拉包,第一次拉包時間比較久,網絡好應該會快一點,把Maven倉庫改成阿裡或其他公司,國内應該有很多Maven倉庫鏡像。 

先來改配置檔案,這裡關鍵是加注解,啟用EurekaServer, EurekaServer自動跟進配置,制作在某個端口上,包括注冊中心的界面,會提供注冊位址,在之前的例子上是提供Rest API, 供用戶端注冊。 

第一步是,啟動@ EnableEurekaServer,使伺服器具備注冊中心的能力,這一步非常重要。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

接下配一下配置檔案,配置檔案有幾個核心參數,程式名和端口,程式名輸入EurekaServer。端口不配的話就是預設的8080,因為官方例子是8761,我們也配置8761。還需要配置Eureka的注冊用戶端,如下圖所示:“http://localhost:8761/eureka”是注冊中心的位址,給用戶端注冊和查找用的。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

接下來啟動程式,直接右鍵,選Run As ,有兩種啟動方式,1.jave Application,2.Spring Boot APP,兩種都可以啟動。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

啟動成功之後,打開浏覽器,輸入http://localhost:8761回車,出現Eureka注冊中心的界面。裡面一有個服務執行個體,這個執行個體預設沒有關掉,自己可以往自己中心的注冊,正常并不需要,自己往自己中心的注冊實際是多餘的。在比較底的版本會顯示出錯。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

可以配置關閉上面的服務執行個體,輸入“eureka.client.fetch-registry=false”,“eureka.client.register-with-eurka=falsr”。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

重新加載後,打開eureka界面,可以看到,自己往自己中心注冊的執行個體就沒有了。 

開發者學堂課程幹貨總結——Spring Cloud微服務架構設計與開發實戰(二十三)

三、Eureka底層原理與源碼分析 

(一)Netflix Eureka源碼 

•Eureka 官方源碼; 

https://github.com/Netflix/eureka

; 

•Spring Cloud Netflix 适配 Eureka 的代碼; 

https://github.com/spring-cloud/spring-cloud-netflix

(二)Eureka源碼分析 

Eureka通信基于Http(s)協定的架構 

1. 純正的 servlet 應用,需建構成war包部署; 

2. 使用了 架構實作自身的 HTTP接口; 

3. peer之間的同步與服務的注冊全部通過 HTTP 協定實作; 

4. 定時任務(發送 、定時清理過期服務、節點同步等)通過 JDK 自帶的 Timer 實作; 

5. 記憶體緩存使用Google的 包實作; 

(三)服務執行個體Instance的狀态 

1. Up; 

2. Down; 

3. Starting; 

4. Out_Of_Service; 

5. Unknown。