《瘋狂Spring Cloud微服務架構實戰》讀書筆記

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

Spring Cloud 下的“Spring Cloud Netflix” 模塊, 主要封裝了 Netflix 的以下項目:

  • Eureka: 基於 REST 服務的分佈式中間件, 主要用於服務管理。
  • Hystrix: 容錯框架, 通過添加延遲閥值以及容錯的邏輯, 來幫助我們控制分佈式系統間組件的交互。
  • Feign: 一個 REST 客戶端, 目的是為了簡化 Web Service 客戶端的開發。Dubbo 是基於私有二進制協議;Feign - 是Http 客戶端。
  • Ribbon: 負載均衡框架, 在微服務集群中為各個客戶端的通信提供支持, 它主要實現中間層應用程序的負載均衡。
  • Zuul: 為微服務集群提供過代理、 過濾、 路由等功能。

除了 Spring Cloud Netflix 模塊外, Spring Cloud 還包括以下幾個重要的模塊:

  • Spring Cloud Config: 為分佈式系統提供了配置服務器和配置客戶端, 通過對它們的配置, 可以很好的管理集群中的配置文件。
  • Spring Cloud Sleuth: 服務跟蹤框架, 可以與 Zipkin、 Apache HTrace 和 ELK 等數據分析、 服務跟蹤系統進行整合, 為服務跟蹤、 解決問題提供了便利。
  • Spring Cloud Stream: 用於構建消息驅動微服務的框架, 該框架在 Spring Boot 的基礎上, 整合了“Spring Integration” 來連接消息代理中間件。
  • Spring Cloud Bus: 連接 RabbitMQ、 Kafka 等消息代理的集群消息總線。

Maven - 項目的構建,最為重要的是對依賴包的管理

使用Aliyun 提供的Maven 參考,修改 apache-maven-3.5.0/conf 目錄下的 setting.xml, 在 mirrors 節點下加入以下配置:

<mirror>

alimaven

<name>aliyun maven/<name>

http://maven.aliyun.com/nexus/content/groups/public/;

<mirrorof>central/<mirrorof>

配置完後, 以後在使用過程中, Maven 會先到阿里雲的倉庫中下載依賴包。

在 Eclipse 配置 Maven

Eclipse→window→Preferences→Maven→Installations

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

安裝Maven後我們會在用戶目錄下發現.m2 文件夾。默認情況下,該文件夾下放置了Maven本地倉庫.m2/repository。所有的Maven構件(artifact)都被存儲到該倉庫中,以方便重用。

修改配置文件,位置為%MAVEN_HOME%/conf/setting.xml

<localrepository>D:/maven_repo/<localrepository>

Eclipse→window→Preferences→Maven→Installations→User Sittings

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

熱部署 - Hot Swapping

<dependencies>

<dependency>

<groupid>org.springframework.boot/<groupid>

<artifactid>spring-boot-devtools/<artifactid>

<optional>true/<optional>

Eureka 介紹

服務管理框架

Eureka 提供基於REST 的服務,在集群中主要用於服務管理。

Eureka 服務器 - 並沒有提供後臺的存儲,註冊的服務實例保存在內存的註冊中心,它們通過心跳來保存其最新狀態;

客戶端存在著相同的機制,同樣在內存中保存了註冊表信息,這樣的機制提升了Eureka 組件的性能,每次服務的請求都不必經過服務器端的註冊中心。

服務提供者:

1. 向服務器註冊服務;

2. 發送心跳給服務器;

3. 向服務器獲取註冊列表信息;

服務調用者:

服務調用者也是作為客戶端存在的,其職責主要是發現與調用服務。

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

REST 客戶端

1. Apache CXF

CXF 是目前一個較為流行的 Web Service 框架, 是 Apache 下的一個開源項目。 使用CXF 可以發佈和調用各種協議的服務, 包括 SOAP 協議、 XML/HTTP 等, 當前 CXF 已經對 REST 風格的 Web Service 提供支持, 可以發佈或調用 REST 風格的 Web Service。

2. Restlet

Restlet 是一個輕量級的 REST 框架, 使用它可以發佈和調用 REST 風格的 Web Service。

3. Spring 框架自帶RestTemplate,使用 HttpClient 發送請求;

4. Feign 框架(Netflix 項目)

Feign 框架的主要優點在於,它的插件式機制可以靈活地被整合到項目中。

Spring Cloud 對其進行了封裝,本來使用就很簡單的Feign,在Spring Cloud 中使用更為簡單。

Feign 自帶Ribbon 模塊,本身就具有負載均衡的能力,可以訪問集群的服務。

Feign簡介

Feign是一個聲明式的偽Http客戶端,它使得寫Http客戶端變得更簡單。

使用Feign,只需要創建一個接口並註解,它具有可插拔的註解特性,可使用Feign 註解和JAX-RS註解,Feign支持可插拔的編碼器和解碼器,Feign默認集成了Ribbon,並和Eureka結合,默認實現了負載均衡的效果。

Feign 具有如下特性:

* 可插拔的註解支持,包括Feign註解和JAX-RS註解

* 支持可插拔的HTTP編碼器和解碼器

* 支持Hystrix和它的Fallback

* 支持Ribbon的負載均衡

* 支持HTTP請求和響應的壓縮Feign是一個聲明式的Web Service客戶端,它的目的就是讓Web Service調用更加簡單。它整合了Ribbon和Hystrix,從而不再需要顯式地使用這兩個組件。Feign還提供了HTTP請求的模板,通過編寫簡單的接口和註解,就可以定義好HTTP請求的參數、格式、地址等信息。接下來,Feign會完全代理HTTP的請求,我們只需要像調用方法一樣調用它就可以完成服務請求。

簡而言之:Feign能幹Ribbon和Hystrix的事情,但是要用Ribbon和Hystrix自帶的註解必須要引入相應的jar包才可以。

Feign 與 Hystrix 整合

在application.yml 中打開 Feign的Hystrix 開關:

feign:

hystrix:

enabled: true

和普通的Feign 客戶端無異,僅僅設置了處理回退的類,回退類實現了客戶端接口。

Hystrix 監控

為服務調用者加入 Actuator,可以對服務調用者的健康情況進行實時健康。

http://localhost:port/hystrix.stream -- 可以看到Hystrix 輸出的stream 數據;【port 端口號是服務調用者service invoker項目的端口】

新建一個監控的web 項目,hystrix-dashboard,在項目的啟動類中:

@SpringBootApplication

@EnableHystrixDashboard -- 開啟 Hystrix 控制檯

http://localhost:port2/hystrix 顯示 Hystrix Dashboard 界面 【port2 端口號是hystrix-dashboard web 項目的端口】

在文本框中輸入需要監控的地址,如輸入上述的URL。

《瘋狂Spring Cloud微服務架構實戰》讀書筆記

如果需要監控整個集群的情況,可以使用 Turbine 框架。

Spring Cloud Zuul

Spring Cloud Zuul路由是微服務架構的不可或缺的一部分,提供動態路由,監控,彈性,安全等的邊緣服務。Zuul是Netflix出品的一個基於JVM路由和服務端的負載均衡器。

實際上在實現微服務架構時,服務名與服務實例地址的關係在eureka server中已經存在了,所以只需要將Zuul註冊到eureka server上去發現其他服務,就可以實現對serviceId的映射。

網關的默認路由規則

默認情況下,Zuul會代理所有註冊到Eureka Server的微服務,並且Zuul的路由規則如下:http://ZUUL_HOST:ZUUL_PORT/微服務在Eureka上的serviceId/**會被轉發到serviceId對應的微服務。

Spring Cloud Sleuth 框架

用於跟蹤微服務的調用過程;

Zipkin - 服務跟蹤系統;

用Sleuth 整合Zipkin,將微服務產生的日誌交給 Zipkin 去分析。

Zipkin 是一個分佈式跟蹤系統,主要用於收集、管理微服務產生的數據。

ELK - 數據分析平臺;

Sleuth 整合 ELK,將微服務的日誌傳送給 ELK 平臺進行分析。

使用Zipkin 與 ELK 查看、分析服務所產生的數據,以便更快速地定位、解決問題。


分享到:


相關文章: