精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇帶個你Spring Cloud微服務架構(gòu)學習

開發(fā) 前端
目前,我所在的項目組已經(jīng)在采用這種技術(shù)架構(gòu)了,服務網(wǎng)格采用的是Linkerd,容器編排采用的是K8S,Spring Cloud已經(jīng)沒用了。But,不代表Spring Cloud沒有學習的意義,對于中小型項目團隊,Spring Cloud仍然是快速首選。

[[376079]]

 一、分布式服務框架的發(fā)展

1.1 第一代服務框架

代表:Dubbo(Java)、Orleans(.Net)等

特點:和語言綁定緊密

1.2 第二代服務框架

代表:Spring Cloud等

現(xiàn)狀:適合混合式開發(fā)(例如借助Steeltoe OSS可以讓ASP.Net Core與Spring Cloud集成),正值當年

1.3 第三代服務框架

代表:Service Mesh(服務網(wǎng)格) => 例如Service Fabric、lstio、Linkerd、Conduit等

現(xiàn)狀:在快速發(fā)展中,更新迭代比較快

1.4 未來(目測不久)主流的服務架構(gòu)和技術(shù)棧

Spring Cloud微服務架構(gòu)學習

基礎的云平臺為微服務提供了資源能力(計算、存儲和網(wǎng)絡等),容器作為最小工作單元被Kubernetes調(diào)度和編排,Service Mesh(服務網(wǎng)格)管理微服務的服務通信,最后通過API Gateway向外暴露微服務的業(yè)務接口。

目前,我所在的項目組已經(jīng)在采用這種技術(shù)架構(gòu)了,服務網(wǎng)格采用的是Linkerd,容器編排采用的是K8S,Spring Cloud已經(jīng)沒用了。But,不代表Spring Cloud沒有學習的意義,對于中小型項目團隊,Spring Cloud仍然是快速首選。

二、Spring Cloud 簡介

2.1 Spring Cloud極簡介紹

 [[376080]]

首先,盡管Spring Cloud帶有“Cloud”這個單詞,但它并不是云計算解決方案,而是在Spring Boot基礎之上構(gòu)建的,用于快速構(gòu)建分布式系統(tǒng)的通用模式的工具集。

其次,使用Spring Cloud開發(fā)的應用程序非常適合在Docker和PaaS(比如Pivotal Cloud Foundry)上部署,所以又叫做云原生應用(Cloud Native Application)。云原生可以簡單地理解為面向云環(huán)境的軟件架構(gòu)。

總結(jié) :Spring Cloud是一個基于Spring Boot實現(xiàn)的云原生應用開發(fā)工具,它為基于JVM的云原生應用開發(fā)中涉及的配置管理、服務發(fā)現(xiàn)、熔斷器、智能路由、微代理、控制總線、分布式會話和集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式。

Spring Cloud具有如下特點:

約定大于配置

適用于各種環(huán)境

隱藏了組件的復雜性,并提供聲明式、無XML式的配置方式

開箱即用,快速啟動

組件豐富,功能齊全

......

Spring Cloud作為第二代微服務的代表性框架,已經(jīng)在國內(nèi)眾多大中小型的公司有實際應用案例。許多公司的業(yè)務線全部擁抱Spring Cloud,部分公司選擇部分擁抱Spring Cloud。例如,拍拍貸資深架構(gòu)師楊波老師就根據(jù)自己的實際經(jīng)驗以及對Spring Cloud的深入調(diào)研,并結(jié)合國內(nèi)一線互聯(lián)網(wǎng)大廠的開源項目應用實踐結(jié)果,認為Spring Cloud技術(shù)棧中的有些組件離生產(chǎn)級開發(fā)尚有一定距離,最后提出了一個可供中小團隊參考的微服務架構(gòu)技術(shù)棧,又被稱為“中國特色的微服務架構(gòu)技術(shù)棧1.0”:

Spring Cloud微服務架構(gòu)學習

上圖中涉及到的組件,這里不做具體介紹

2.2 Spring Cloud核心子項目

Spring Cloud Netflix:核心組件,可以對多個Netflix OSS開源套件進行整合,包括以下幾個組件:

  • Eureka:服務治理組件,包含服務注冊與發(fā)現(xiàn)
  • Hystrix:容錯管理組件,實現(xiàn)了熔斷器
  • Ribbon:客戶端負載均衡的服務調(diào)用組件
  • Feign:基于Ribbon和Hystrix的聲明式服務調(diào)用組件
  • Zuul:網(wǎng)關(guān)組件,提供智能路由、訪問過濾等功能
  • Archaius:外部化配置組件
  • Spring Cloud Config:配置管理工具,實現(xiàn)應用配置的外部化存儲,支持客戶端配置信息刷新、加密/解密配置內(nèi)容等。
  • Spring Cloud Bus:事件、消息總線,用于傳播集群中的狀態(tài)變化或事件,以及觸發(fā)后續(xù)的處理
  • Spring Cloud Security:基于spring security的安全工具包,為我們的應用程序添加安全控制
  • Spring Cloud Consul : 封裝了Consul操作,Consul是一個服務發(fā)現(xiàn)與配置工具(與Eureka作用類似),與Docker容器可以無縫集成
  • ......

三、示例結(jié)構(gòu)說明

3.1 示例環(huán)境版本

  • Java : JDK & JRE 1.8 8u151
  • Spring Boot : 1.5.15.RELEASE

Spring Cloud : Edgware.SR3 (小貼士:Spring Cloud的版本命名是以倫敦地鐵站的名字來命名的)

3.2 示例地址與結(jié)構(gòu)說明

示例

3.2.1 服務注冊與發(fā)現(xiàn) - 基于Eureka

此部分示例位于:part1_service-register-discovery

此部分示例主要演示了如何基于Eureka實現(xiàn)服務的注冊與發(fā)現(xiàn),其中包括兩個版本:

① 單節(jié)點版本 (開發(fā)環(huán)境調(diào)試用) => 位于eureka-service-sn (sn代表single node)項目內(nèi)

Spring Cloud微服務架構(gòu)學習

這里需要注意的地方是:在開發(fā)環(huán)境需要關(guān)閉Eureka的自我保護機制,不然你無法輕易看到服務移除的效果,需要在application.yml中如下設置:

  1. eureka: 
  2.  
  3. server: 
  4.  
  5. enableSelfPreservation: false # 本地調(diào)試環(huán)境下關(guān)閉自我保護機制 

 這是因為Eureka考慮到生產(chǎn)環(huán)境中可能存在的網(wǎng)絡分區(qū)故障,會導致微服務與Eureka Server之間無法正常通信。它的架構(gòu)哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留),也不盲目注銷任何健康的微服務。

Spring Cloud微服務架構(gòu)學習

② HA多節(jié)點版本 (部署/生產(chǎn)環(huán)境用) => 位于eureka-service-ha-1 & eureka-service-ha-2這兩個項目內(nèi)

此版本需要注意的是兩個節(jié)點的application.yml保持一致,但由于其中使用了peer1和peer2的hostname,在本地開發(fā)環(huán)境需要給Windows(我假設你使用的是Windows系統(tǒng))設置hosts文件如下:

 

  1. 127.0.0.1 peer1 peer2 

擴展:除了Eureka之外,還可以選擇通用型較強的Consul,關(guān)于Consul的基本概念與服務端的安裝配置可以看看我的這一篇《.Net Core微服務之基于Consul實現(xiàn)服務注冊于發(fā)現(xiàn)》了解一下。最后,不得不說,Spring Boot 和 Spring Cloud中核心組件封裝的注解真的是太強大了,很多操作一個注解直接搞定,無須過多的coding。

3.2.2 客戶端負載均衡 - 基于Ribbon

此部分示例位于:part2_ client-load-balance

此部分示例主要演示了如何基于Ribbon實現(xiàn)客戶端的負載均衡,建議啟動方式:先啟動Eureka,再啟動UserService和MovieService。通過訪問MovieService的API接口 /log-instance 進行日志查看,測試結(jié)果如下圖所示:

Spring Cloud微服務架構(gòu)學習

從上圖可以看出,通過客戶端的負載均衡算法,依次訪問了不同的服務節(jié)點。

3.2.3 聲明式REST調(diào)用 - 基于Feign

此部分示例位于:part3_feign

Spring Cloud微服務架構(gòu)學習

此部分示例主要演示了基于Feign如何實現(xiàn)聲明式調(diào)用,包括以下內(nèi)容:

(1)基本整合Feign進行單參數(shù)與多參數(shù)的請求:位于movie-service這個項目內(nèi)

需要注意的就是別忘了在啟動類加上@EnableFeignClients注解

  1. @SpringBootApplication 
  2.  
  3. @EnableDiscoveryClient 
  4.  
  5. @EnableFeignClients // 要使用Feign,需要加上此注解 
  6.  
  7. public static void main(String[] args) { 
  8.  
  9. SpringApplication.run (MovieServiceApplication.class, args); 
  10.  
  11.  

 (2)自定義Feign配置的使用:位于movie-service -feign-customizing這個項目內(nèi)

下面的Feign接口就使用了自定義的配置類FeignConfiguration。

  1. @FeignClient(name = "user-service", configuration = FeignConfiguration.class) 
  2.  public interface UserFeignClient { 
  3.  /** 
  4.  * 使用feign自帶的注解@RequestLine 
  5.  * @see https://github.com/OpenFeign/feign 
  6.  * @param id 用戶id 
  7.  * @return 用戶信息 
  8.  */ 
  9.  @RequestLine("GET /{id}"
  10.  User findById(@Param("id") Long id); 
  11.  } 

 (3)Feign的日志的使用:位于movie-service-feign-logging這個項目內(nèi)

需要注意的是:Feign雖然提供了logger,但是其日志打印只會對DEBUG級別做出響應。日志級別一共有4種類型,如下所示:

Logger.Level 可選值:

* NONE: 不記錄任何日志(默認值)

* BASIC: 僅記錄請求方法、URL、響應狀態(tài)碼以及執(zhí)行時間

* HEADERS: 記錄BASIC級別的基礎之上,記錄請求和響應的header

* FULL: 記錄請求和響應的header,body和元數(shù)據(jù)

要輸出日志打印,application.yml內(nèi)要設置DEBUG級別:

  1. logging: 
  2.  level
  3.  # 將Feign接口的日志級別設置為DEBUG,因為Feign的Logger.Level只針對DEBUG做出響應 
  4.  com.mbps.cd.movieservice .feign.UserFeignClient: DEBUG  

 最后,針對FULL級別的日志打印效果如下圖所示:

Spring Cloud微服務架構(gòu)學習

3.2.4 容錯處理 - 基于Hystrix

此部分示例位于:part4_hystrix

此部分示例主要演示如何基于Hystrix實現(xiàn)容錯處理,主要包括以下內(nèi)容:

(1)通用方式整合Hystrix:此示例位于movie-service項目中

針對普通的方法,只需加上HystrixCommand注解及定義回退方法即可,例如:

  1. @HystrixCommand (fallbackMethod = "findByIdFallback"
  2.  
  3. @GetMapping(value = "/user/{id}"
  4.  
  5. public User findById (@PathVariable Long id) { 
  6.  
  7. return restTemplate.getForObject ("http://user-service/" + id, User.class); 
  8.  
  9. public User findByIdFallback(Long id){ 
  10.  
  11. User user = new User(); 
  12.  
  13. user.setId(-1L); 
  14.  
  15. user.setUsername("Default User"); 
  16.  
  17. return user
  18.  

 (2)Feign使用Hystrix:此示例位于movie-service-feign-hystrix項目中

針對Feign,它是以接口形式工作的,好在Spring Cloud已默認為Feign整合了Hystrix,不過默認是關(guān)閉的,需要手動在配置文件中開啟:

  1. feign: 
  2.  
  3. hystrix: 
  4.  
  5. enabled: true 

 在之前的版本(Dalston之前的版本)中是默認開啟的,至于為何要改為默認禁用,可以看看 這里 :

然后直接在FeignClient注解中加入fallback屬性即可,例如下面所示:

  1. @FeignClient (name = "user-service", fallback = FeignClientFallback.class) 
  2.  
  3. public interface UserFeignClient { 
  4.  
  5. @GetMapping(value = "/{id}"
  6.  
  7. User findById(@PathVariable("id") Long id); 
  8.  
  9. @Component 
  10.  
  11. class FeignClientFallback implements UserFeignClient{ 
  12.  
  13. @Override 
  14.  
  15. public User findById(Long id) { 
  16.  
  17. User user = new User(); 
  18.  
  19. user.setId(-1L); 
  20.  
  21. user.setUsername("Default User"); 
  22.  
  23. return user
  24.  
  25.  

 如果想要在Feign發(fā)生回退時能夠留下日志供查看回退原因,那么可以使用FallbackFactory,示例項目:movie-service -feign-fallback-factory.

  1. @FeignClient(name = "user-service", fallbackFactory = FeignClientFallbackFactory.class) 
  2.  
  3. public interface UserFeignClient { 
  4.  
  5. @GetMapping(value = "/{id}"
  6.  
  7. User findById (@PathVariable("id") Long id); 
  8.  
  9. @Component 
  10.  
  11. class FeignClientFallbackFactory implements FallbackFactory { 
  12.  
  13. private static final Logger LOGGER = 
  14.  
  15. LoggerFactory.getLogger (FeignClientFallbackFactory.class); 
  16.  
  17. @Override 
  18.  
  19. public UserFeignClient create(Throwable cause) { 
  20.  
  21. return new UserFeignClient() { 
  22.  
  23. @Override 
  24.  
  25. public User findById(Long id) { 
  26.  
  27. /* 
  28.  
  29. * 日志最好放在各個fallback中,而不要直接放在create方法中 
  30.  
  31. * 否則在引用啟動時,就會打印該日志 
  32.  
  33. */ 
  34.  
  35. FeignClientFallbackFactory.LOGGER.info ("sorry, fallback. reason was: ", cause); 
  36.  
  37. User user = new User(); 
  38.  
  39. user.setId(-1L); 
  40.  
  41. user.setUsername("Default Username"); 
  42.  
  43. return user
  44.  
  45.  
  46. }; 
  47.  
  48.  

 當發(fā)生回退時,日志輸出信息如下:

Spring Cloud微服務架構(gòu)學習

除此之外,關(guān)于Hystrix部分,還有監(jiān)控的主題,這里由于我所在的項目組的技術(shù)架構(gòu)中不會涉及到,也就沒有弄,有興趣的童鞋可以關(guān)注一下Hystrix自帶的監(jiān)控以及基于Turbine的聚合監(jiān)控。參考文章:《Hystrix監(jiān)控面板(Dalston版)》與《Hystrix監(jiān)控數(shù)據(jù)聚合》。

3.2.5 API網(wǎng)關(guān) - 基于Zuul

此部分示例位于:part5_zuul

此部分示例主要演示如何基于Zuul實現(xiàn)API網(wǎng)關(guān),主要包括以下內(nèi)容:

(1)整合Zuul編寫API網(wǎng)關(guān):位于zuul-service項目中

可以測試驗證的內(nèi)容:

路由規(guī)則:依次啟動eureka,user-service,movie-service,zuul-service,然后通過zuul訪問user-service接口

負載均衡:依次啟動eureka,多個user-service,zuul-service,然后多次訪問user-service,最后查看日志信息(兩個user-service都會打印hibernate日志信息),驗證是否達到負載均衡的效果。PS:Zuul內(nèi)置了Ribbon來實現(xiàn)負載均衡。

路由端點:依次啟動eureka,user-service,movie-service,zuul-service,然后瀏覽器訪問zuul-service(http://localhost:5000/routes)可以得到路由端點信息

對于路由端點,需要改一下以下配置,才能正常顯示路由端點信息,否則會報401的錯誤:

  1. management: 
  2.  
  3. security: 
  4.  
  5. enabled: false # 默認為true,改為false以便可以看到routes 
  6.  
  7. 路由配置:示例主要演示了路由前綴、全局敏感設置以及路由規(guī)則設置 
  8.  
  9. 大文件上傳設置:針對超大文件上傳(比如500M),需要在Zuul中提升超時設置 
  10.  
  11. # 下面的設置針對超大文件上傳(比如500M),提升了超時設置 
  12.  
  13. hystrix: 
  14.  
  15. command: 
  16.  
  17. default
  18.  
  19. execution: 
  20.  
  21. isolation
  22.  
  23. thread: 
  24.  
  25. ribbon: 
  26.  
  27. ConnectionTimeout: 3000 
  28.  
  29. ReadTimeout: 60000 

 (2)Zuul的過濾器:主要位于zuul-service-filter這個項目中

對于Zuul的請求聲明周期來說,一共有4種標準過濾器類型:

PRE:在請求被路由之前調(diào)用,可利用這種過濾器實現(xiàn)身份驗證、記錄調(diào)試信息等操作;

ROUTING:將請求路由到微服務,可利用這種過濾器用于構(gòu)建發(fā)送給微服務的請求;

POST:在路由到微服務以后執(zhí)行,可用來為響應添加標準的HTTP Header、收集統(tǒng)計信息和指標、將響應從微服務發(fā)送給客戶端等;

ERROR:在其他階段發(fā)生錯誤時執(zhí)行該過濾器;

Spring Cloud微服務架構(gòu)學習

此示例中演示了PRE類型的過濾器,部分場景下,想要禁用部分過濾器,只需要在配置文件中設置即可,例如這里禁用PreRequestLogFilter過濾器:

  1. zuul: 
  2.  
  3. # 禁用指定過濾器設置 
  4.  
  5. PreRequestLogFilter: 
  6.  
  7. pre: 
  8.  
  9. disable: true # 禁用我們創(chuàng)建的PreRequestLogFilter過濾器 

 (3)Zuul的容錯與回退:主要位于zuul-service-fallback這個項目中

Zuul自身就帶有Hystrix,但是它監(jiān)控的粒度是微服務級別,而不是某個API,當某個API不可用時,會統(tǒng)一拋500錯誤碼的異常頁。我們可以為Zuul添加回退,以實現(xiàn)更友好的返回信息。實現(xiàn)也很簡單,只需要實現(xiàn)FallbackProvider接口即可。這里要注意的是,對于Edgware之前的版本(即Dalston及更低版本)需要實現(xiàn)的是ZuulFallbackProvider接口,而Edgware及之后的版本要實現(xiàn)的是FallbackProvider接口。因為FallbackProvider是ZuulFallbackProvider的子接口,而它的好處就是多了一個接口可以獲取可能造成回退的原因,具體可以參考這一篇文章:《Spring Cloud Edgware新特性之八:Zuul回退的改進》。下面是本示例中訪問user-service接口(user-service被我手動關(guān)閉)后的返回結(jié)果:

Spring Cloud微服務架構(gòu)學習

(4)Zuul的高可用架構(gòu)

生產(chǎn)環(huán)境中一般都需要部署高可用的Zuul以避免單點故障,實際開發(fā)中有兩種情況:

① Zuul的客戶端也注冊到了Eureka Server上(比如:MVC App, SPA 等)

Spring Cloud微服務架構(gòu)學習

此時Zuul的高可用和其他微服務沒區(qū)別,都是借助Eureka和Ribbon來實現(xiàn)負載均衡。

② Zuul的客戶端未注冊到Eureka Server上(比如手機App端等)

現(xiàn)實中這種場景或許更常見,此時需要借助一個額外的負載均衡器來實現(xiàn)Zuul的高可用,比如:Nginx、HAProxy以及F5等。

Spring Cloud微服務架構(gòu)學習

(5)使用Zuul聚合微服務:此示例位于zuul-service-aggregation項目中

許多場景下可能一個外部請求要查詢Zuul后端的多個服務,這時可以使用Zuul來聚合服務請求,即只需請求一次,由Zuul來請求各個服務,然后組織好數(shù)據(jù)發(fā)送給客戶端(比如App客戶端)。示例中主要基于RxJava與Zuul來結(jié)合實現(xiàn)的微服務請求的聚合。

3.2.6 統(tǒng)一配置管理 - 基于Spring Cloud Config

Spring Cloud Config為分布式系統(tǒng)外部化配置提供了服務端和客戶端的支持,包括Config Server和Config Client兩部分,其架構(gòu)圖如下圖所示:

Spring Cloud微服務架構(gòu)學習

其中,各個微服務在啟動時會請求Config Server以獲取所需要的配置屬性,然后緩存這些屬性以提高性能,如下圖所示:

Spring Cloud微服務架構(gòu)學習

此部分示例位于:part6_config

此部分示例主要演示如何基于Spring Cloud Config實現(xiàn)統(tǒng)一配置中心,主要包括以下內(nèi)容:

(1)基本的Config Server與Config Client編寫:此示例位于config-service與config-client中

此示例需要用到一些已放到git的配置文件,這里我已將其放到了github方便大家可以直接拿來測試用,倉庫 地址

端點與配置文件的映射規(guī)則如下:

  1. /{application}/{profile}[/{label}] 
  2.  
  3. /{application}-{profile}.yml 
  4.  
  5. /{label}/{application}-{profile}.yml 
  6.  
  7. /{application}-{profile}.properties 
  8.  
  9. /{label}/{application} -{profile}.properties 
  10.  
  11. 其中,application: 表示微服務的虛擬主機名,即配置的spring.application.name 
  12.  
  13. profile: 表示當前的環(huán)境,dev, test or production? 
  14.  
  15. label: 表示git倉庫分支,master or relase or others repository name? 默認是master 
  16.  
  17. 項目中,config-service的配置文件如下: 
  18.  
  19. server: 
  20.  
  21. spring: 
  22.  
  23. application: 
  24.  
  25. name: sampleservice-config-server 
  26.  
  27. cloud: 
  28.  
  29. config: 
  30.  
  31. server: 
  32.  
  33. git: 
  34.  
  35. # 配置Git倉庫地址 
  36.  
  37. uri: https://github.com/EdisonChou/ EDC.SpringCloud.Samples.Config 
  38.  
  39. # Git倉庫賬號(如果需要認證) 
  40.  
  41. username: 
  42.  
  43. # Git倉庫密碼(如果需要認證) 
  44.  
  45. password

 啟動順序:先啟動config-server,再啟動config-client,因為config-client在啟動時就回去config-server獲取配置,如果這時config-server未啟動則會報錯。

這里需要注意的就是在config-client中,對于spring cloud config的配置應該放在bootstrap.yml中而不是application.yml中,否則會不起作用。這里涉及到一個spring cloud的“引導上下文”的概念。

(2)使用/refresh端點手動刷新配置:仍然位于config-client項目中

要想在運行期間刷新配置,需要兩點改造:加上@RefreshScope注解

  1. @RestController 
  2.  
  3. @RefreshScope // @RefreshScope注解不能少,否則即使調(diào)用/refresh,配置也不會刷新 
  4.  
  5. public class ConfigClientController { 
  6.  
  7. @Value("${profile}"
  8.  
  9. @GetMapping("/profile"
  10.  
  11. public String hello(){ 
  12.  
  13. return this.profile; 
  14.  
  15.  

 此外,針對Spring Boot 1.5.x,還需要給config-client端關(guān)閉安全認證,否則無法正常refresh:

  1. management: 
  2.  
  3. security: 
  4.  
  5. enabled: false 

 之后,就可以通過對config-client發(fā)起POST請求刷新配置了:

Spring Cloud微服務架構(gòu)學習

不過,如果所有微服務都需要手動刷新配置,工作量會很大。所以,在實際環(huán)境中,一般會實現(xiàn)配置的自動刷新。

(3)使用Spring Cloud Bus自動刷新配置:此示例位于config-server-cloud-bus與config-client-cloud-bus項目中

此示例使用到的架構(gòu)如下圖所示,它將Config Server加入消息總線之中,并使用Config Server的/bus/refersh端點來實現(xiàn)配置的刷新。這樣,各個微服務只需要關(guān)注自身的業(yè)務邏輯,而無需再自己手動刷新配置。

Spring Cloud微服務架構(gòu)學習

Tip:Spring Cloud Bus基于輕量級地消息代理(例如RabbitMQ、Kafka等)連接分布式系統(tǒng)的節(jié)點,就可以通過廣播的方式來傳播狀態(tài)的更改(例如配置的更新)或者其他的管理指令。我們可以將Spring Cloud Bus想象成一個分布式的Spring Boot Actuator。

運行順序:先啟動config-service-cloud-bus,再啟動兩個config-client-cloud-bus(第一個默認端口8081,第二個端口改為8082),修改github中sampleservice-foo-dev.properties中的profile值后commit & push,然后POST請求config-service-cloud-bus的/bus/refersh端點,最后再次訪問兩個client的/profile端點進行驗證。

如果部分場景想要知道Spring Cloud Bus事件傳播的細節(jié),可以通過以下設置來跟蹤事件總線:

  1. spring: 
  2.  
  3. cloud: 
  4.  
  5. bus: 
  6.  
  7. trace: 
  8.  
  9. enabled: true # 開啟cloud bus跟蹤 

 (4)與Eureka的配合使用:此示例位于config-service-eureka與config-client-eureka兩個項目中

(5)Config Server的高可用:涉及到Git倉庫的高可用、RabbitMQ的高可用以及Config Server自身的高可用。

對于Git倉庫的高可用,第三方Git倉庫類似于GitHub等本身已經(jīng)實現(xiàn)了高可用,而針對自建Git倉庫如GitLab,可以參考GitLab官方 文檔搭建高可用

對于Config Server自身的高可用,也可以分為未注冊到Eureka和注冊到Eureka兩種情形

此外,對于配置內(nèi)容的加密,此示例沒有涉及,它依賴于JCE(Java Cryptography Extension)

擴展:關(guān)于統(tǒng)一配置中心,還可以選擇更好用的Apollo(攜程的開源項目),

3.2.7 微服務跟蹤 - 基于Spring Cloud Sleuth

首先,值得一提的是Spring Cloud Sleuth大量借用了Google Dapper,Twitter Zipkin和Apache HTrace的設計,我們得了解一些術(shù)語,例如:span、trace、annotation等.

此示例位于: part7_sleuth

此部分示例主要演示如何基于Spring Cloud Sleuth實現(xiàn)分布式鏈路監(jiān)控,主要包括以下內(nèi)容:

(1)基礎整合Spring Cloud Sleuth:位于user-service-trace與m ovie-service-trace項目中,主要查看控制臺輸出日志

(2)Spring Cloud Sleuth與Zipkin的配合使用:位于zipkin-service-server、 user-service-trace-zipkin與movie-service-trace-zipkin三個項目中

Zipkin是Twitter開源的分布式跟蹤系統(tǒng),基于Dapper論文設計而來,主要功能是收集系統(tǒng)的時序數(shù)據(jù),從而追蹤微服務架構(gòu)的系統(tǒng)延時問題,此外還提供了一個非常友好的界面來幫助追蹤分析數(shù)據(jù)。

下圖是一個接入Zipkin之后的服務調(diào)用簡易流程圖:

Spring Cloud微服務架構(gòu)學習

運行順序:首先運行zipkin-service-server,其次運行user-service-zipkin與movie-service-zipkin,然后訪問http://localhost:8010/user/1得到數(shù)據(jù)結(jié)果,最后訪問zipkin server首頁,填入起始時間、結(jié)束時間等篩選條件后,點擊Find a trace按鈕,可以看到trace列表,如下圖所示:

Spring Cloud微服務架構(gòu)學習

點擊“依賴分析”,可以得到下圖,有助于我們分析依賴關(guān)系:

Spring Cloud微服務架構(gòu)學習

需要注意的是,在開發(fā)調(diào)試時,因為默認的采樣百分比是10%,Sleuth會忽略大量span,因此我們可以在開發(fā)環(huán)境將其設置為100%:

  1. spring: 
  2.  
  3. sleuth: 
  4.  
  5. sampler: 
  6.  
  7. # 指定需采樣的請求的百分比,默認是0.1(即10%),這里方便查看設為100%(實際環(huán)境不要這樣設置) 
  8.  
  9. percentage: 1.0 

 (3)使用RabbitMQ收集數(shù)據(jù):此示例位于zipkin-service-server-stream 與 user-service-trace-zipkin-stream兩個項目中

[[376086]]

此外,Spring Cloud Sleuth還可以與ELK配合使用,不過此示例沒有涉及.當然,示例中的跟蹤數(shù)據(jù)都是存放到內(nèi)存中,但是跟蹤數(shù)據(jù)還是建議存放到ElasticSearch中,生產(chǎn)環(huán)境切莫只存儲到內(nèi)存中。

 

責任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-02-22 08:15:59

微服務架構(gòu)單體架構(gòu)

2024-05-21 09:26:54

微服務DDD建模架構(gòu)

2017-06-26 09:06:10

Spring Clou微服務架構(gòu)

2023-02-27 09:32:00

微服務Nacos

2021-06-07 12:06:19

SpringCloud Sleuth微服務

2017-09-04 16:15:44

服務網(wǎng)關(guān)架構(gòu)

2017-08-10 11:15:05

Spring Clou微服務架構(gòu)

2017-08-09 15:50:47

Spring Clou微服務架構(gòu)

2017-02-17 08:58:54

微服務架構(gòu)

2017-07-03 09:50:07

Spring Clou微服務架構(gòu)

2017-09-05 14:05:11

微服務spring clou路由

2023-02-20 09:55:00

微服務框架單體架構(gòu)

2017-12-20 15:37:39

Spring Clou微服務架構(gòu)

2018-07-09 09:27:10

Spring Clou微服務架構(gòu)

2018-05-31 09:44:01

微服務架構(gòu)數(shù)據(jù)

2017-07-04 17:35:46

微服務架構(gòu)Spring Clou

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤

2017-06-25 13:33:25

Spring Clou微服務架構(gòu)

2018-06-01 23:08:01

Spring Clou微服務服務器

2024-02-06 18:05:54

微服務SpringCloud
點贊
收藏

51CTO技術(shù)棧公眾號

jjzz黄色片| 性生活免费观看视频| 亚洲va在线观看| 成人亚洲一区| 91麻豆精品国产自产在线观看一区 | 日韩欧美中文字幕一区二区| 欧美**vk| 日韩三区在线观看| 久久国产成人精品国产成人亚洲| 97人人在线| 成人免费视频国产在线观看| 热99在线视频| 黑鬼狂亚洲人videos| 色天天色综合| 日韩一区二区三区在线| 少妇性饥渴无码a区免费| v天堂福利视频在线观看| 91丨porny丨最新| 91大片在线观看| 国产免费一级视频| 影音先锋久久精品| 日韩在线免费高清视频| 69xxx免费视频| 日韩一区二区三免费高清在线观看| 亚洲超碰精品一区二区| 中文字幕中文字幕在线中心一区 | 尤物yw午夜国产精品视频明星| 亚洲欧美日韩中文字幕在线观看| 欧美va视频| 天天综合色天天综合色h| 久久免费一级片| 天天综合视频在线观看| 久久综合九色综合欧美就去吻 | 91高清视频在线免费观看| 三年中国中文观看免费播放| 六月丁香久久丫| 日韩欧美二区三区| 国产福利精品一区二区三区| 日韩一区二区三区在线免费观看| 香蕉影视欧美成人| 免费看日b视频| 免费大片黄在线观看视频网站| 久久精品欧美一区二区三区不卡 | 久久久久久久久久久9不雅视频 | 在线播放视频一区| 高清一区二区视频| 欧美三区四区| 色婷婷精品久久二区二区蜜臂av| 欧美日韩黄色一级片| 欧洲精品二区| 亚洲精品国久久99热| 国产福利片一区二区| 免费黄色在线网站| 亚洲三级在线看| 亚洲一区二区三区精品动漫| melody高清在线观看| 欧美激情综合五月色丁香小说| 欧美日韩一区综合| 男人的天堂在线视频| 久久影音资源网| 欧美三级电影在线播放| 国产在线观看精品一区| 中文字幕电影一区| 一本色道久久综合亚洲精品婷婷| 免费a级毛片在线播放| 综合av第一页| 成人av在线播放观看| wwww亚洲| 色婷婷国产精品久久包臀| 麻豆av免费在线| 久久精品 人人爱| 7777精品伊人久久久大香线蕉| 日本r级电影在线观看| 美女精品久久| 337p日本欧洲亚洲大胆精品| 亚洲国产第一区| 综合伊思人在钱三区| 亚洲欧洲在线观看| 正在播放国产对白害羞| 亚洲国产精品91| 久久久视频免费观看| 中文在线第一页| 美女爽到高潮91| 亚洲自拍高清视频网站| 四虎免费在线观看| 欧美国产精品中文字幕| 国产免费xxx| 国产激情在线播放| 欧美性受极品xxxx喷水| 亚洲制服在线观看| 台湾色综合娱乐中文网| 中文字幕一区电影| 久久精品www| 欧美中文字幕| 2022国产精品| 日本视频在线观看一区二区三区| 中文一区一区三区高中清不卡| 蜜臀av.com| 欧美日韩成人影院| 日韩欧美自拍偷拍| 国产肉体xxxx裸体784大胆| 日韩电影一区| 高清亚洲成在人网站天堂| 久久这里只有精品9| 国产成人在线看| 深夜福利成人| 国产99在线| 欧美丰满高潮xxxx喷水动漫| 亚洲av网址在线| 忘忧草精品久久久久久久高清| 久久久欧美精品| 艳妇乳肉豪妇荡乳av| 成人免费视频一区| 伊甸园精品99久久久久久| 九色porny丨入口在线| 欧美人与z0zoxxxx视频| 国产一级二级在线观看| 天天做天天爱综合| 国产精品99久久久久久久久 | 日本熟妇乱子伦xxxx| 免费成人性网站| 久久久久久国产精品mv| 羞羞的视频在线观看| 欧美色图一区二区三区| 久久精品老司机| 激情久久久久| 亚洲free嫩bbb| jizz在线观看视频| 日韩欧美国产一区二区| 性久久久久久久久久久| 国产精品九九| 91成人伦理在线电影| 日本三级视频在线观看| 欧美亚洲愉拍一区二区| free性中国hd国语露脸| 狠狠爱综合网| 成人蜜桃视频| 中文字幕资源网在线观看| 欧美日韩国产三级| 久久久久99精品成人| 日本网站在线观看一区二区三区 | 成人免费高清在线播放| 色综合久久66| 疯狂揉花蒂控制高潮h| 国产一区日韩一区| av色综合网| 青青在线视频| 欧美成人猛片aaaaaaa| 欧美精品一级片| 丰满白嫩尤物一区二区| 日本高清视频免费在线观看| 激情视频亚洲| 久久6免费高清热精品| www.五月婷| 亚洲一区免费视频| 亚洲色图欧美日韩| 国产一区二区三区久久久久久久久| 国产伦精品一区二区三区高清版| 久草在线资源站资源站| 亚洲第一精品夜夜躁人人爽| 国产成人在线播放视频| 久久久久久久久久美女| 中文字幕一区二区三区四区在线视频| 第一会所sis001亚洲| 国产一区二区视频在线观看| 精品自拍一区| 日韩欧美成人一区| 日韩久久中文字幕| 国产清纯白嫩初高生在线观看91 | 色av中文字幕一区| 国产精品自拍电影| 亚洲图片欧美综合| 中文字幕一区二区久久人妻网站| 丝袜美腿亚洲一区| 最新不卡av| xvideos.蜜桃一区二区| 欧美伊久线香蕉线新在线| 国产69精品久久app免费版| 7777女厕盗摄久久久| 国产又大又黑又粗免费视频| 久久蜜桃av一区二区天堂| 婷婷激情5月天| 亚洲国产国产亚洲一二三| 日本成人黄色| 精品一区二区三区四区五区| 午夜精品在线视频| 在线免费看黄网站| 精品国产乱码久久久久久免费 | 好吊日av在线| 一区二区三区精品99久久 | 成人av网在线| 免费看黄色一级大片| 伊人久久大香线| 久久伦理网站| 懂色av色香蕉一区二区蜜桃| 午夜精品99久久免费| 91青青在线视频| 亚洲精品福利在线| 一级特黄特色的免费大片视频| 亚洲va韩国va欧美va精品| 四虎成人免费影院| 99久久精品99国产精品| av噜噜在线观看| 国产视频亚洲| 777久久精品一区二区三区无码| 一区二区美女| 粉嫩av一区二区三区免费观看| 草民电影神马电影一区二区| 午夜精品久久久久久久99黑人| 在线激情网站| 亚洲欧美日韩视频一区| 亚洲精品字幕在线| 欧美日韩国产综合久久 | 最新日本在线观看| 中文字幕自拍vr一区二区三区| 婷婷综合激情网| 日韩欧美国产综合在线一区二区三区| 欧美brazzers| 激情久久av一区av二区av三区 | 精品福利一区二区| 农村妇女精品一区二区| 欧美激情一区二区三区不卡 | 亚洲欧美校园春色| 91视频免费进入| 日本免费成人| 国产成人一区二区三区小说| av日韩中文| 欧美激情精品久久久久久久变态| 日本高清在线观看wwwww色| 亚洲欧美国产高清va在线播| 亚洲 欧美 激情 另类| 精品噜噜噜噜久久久久久久久试看| 国产精品永久久久久久久久久| 欧美日韩三级一区| 精品久久久久久久久久久国产字幕 | 激情亚洲影院在线观看| 欧美与欧洲交xxxx免费观看| free性m.freesex欧美| 欧美国产精品日韩| 久草在线视频网站| 欧美第一黄色网| 亚洲性图自拍| 欧美超级免费视 在线| 国产婷婷视频在线| 久久福利视频网| 少女频道在线观看高清 | 欧美电影网站| 青青草原一区二区| 电影一区二区三| 日本精品免费观看| 欧亚一区二区| 国产精品久久久久高潮| 成人在线免费av| 国产在线拍揄自揄视频不卡99| 91精品国产自产观看在线 | 国产特级黄色片| 欧美一区二区三区视频在线| 国产激情视频在线播放| 日韩一区二区精品| 亚洲精品国产精品乱码不卡| 精品国产乱码久久久久久老虎| 人妻精品无码一区二区| 日韩成人在线视频| 男女污污视频在线观看| 最近更新的2019中文字幕| 韩国av网站在线| 欧美黑人xxx| 色在线中文字幕| 国产精品吊钟奶在线| 日韩美香港a一级毛片| 999在线免费观看视频| 黄色欧美在线| 日韩三级电影网站| 91亚洲国产成人久久精品| 久久国产精品免费观看| 日韩午夜精品| 亚洲免费看av| 国产精品自拍毛片| 黄色工厂在线观看| 国产精品福利一区二区| 精品一区在线视频| 91福利在线播放| www.污视频| 亚洲色在线视频| sm国产在线调教视频| 97在线视频观看| 日韩美女在线| 国产欧美欧洲| 色135综合网| 国产在线xxxx| 免费在线看成人av| 无码av免费精品一区二区三区| 国产亚洲综合av| 欧美色图亚洲天堂| 色综合久久99| 亚洲爱情岛论坛永久| 亚洲欧美日韩中文在线制服| 18av在线播放| 国产精品久久97| 成人av动漫| 中文字幕一区二区三区有限公司 | 国产精品久久久久77777| 久久综合偷偷噜噜噜色| 奇米精品在线| 欧美色图首页| www.夜夜爽| 久久综合999| 久久99久久98精品免观看软件 | 无限资源日本好片| 91在线视频观看| 亚洲成人生活片| 欧美日本在线看| 久草在线青青草| 国内精品美女av在线播放| 日韩福利影视| 日韩中文一区| 久久国产免费| 久久精品女同亚洲女同13| 亚洲欧美日韩在线| 中文字幕人妻丝袜乱一区三区| 国产视频精品va久久久久久| 国产福利在线免费观看| 亚洲精品欧美一区二区三区| 成久久久网站| 欧美污视频网站| 成人福利电影精品一区二区在线观看| 日韩福利小视频| 欧美日韩午夜在线视频| 风间由美一区| 国产成人精品免费视频| 亚洲人成网77777色在线播放| 欧美狂野激情性xxxx在线观| 国产精品香蕉一区二区三区| 三级黄色录像视频| 欧美日韩一区二区三区高清 | 国产最新免费视频| 成人av中文字幕| 国产亚洲精品码| 精品国产人成亚洲区| 丰乳肥臀在线| 国产欧美日韩在线播放| 亚洲激情在线| 亚洲av成人无码一二三在线观看| 亚洲一区二区欧美| 免费看av毛片| 午夜欧美大片免费观看| 蜜桃久久久久| 国产精品va无码一区二区| 99久久精品国产导航| 国产剧情在线视频| 国产亚洲欧美一区| 不卡亚洲精品| www亚洲国产| 国产不卡视频一区二区三区| 久久综合久久鬼| 日韩av最新在线观看| 欧美gay囗交囗交| 亚洲bbw性色大片| 国产在线国偷精品产拍免费yy| 国产这里有精品| 亚洲第一av在线| 亚洲一区二区三区四区| 欧美日韩在线免费观看视频| 国产美女娇喘av呻吟久久| 国产一级理论片| 精品调教chinesegay| 九九热线视频只有这里最精品| 亚洲成人在线视频网站| 国模少妇一区二区三区| 精品一区在线视频| 亚洲视频777| 中文字幕成人| 大伊香蕉精品视频在线| 久久久久国产一区二区三区四区 | 精品电影一区二区三区| 忘忧草在线日韩www影院| 日本一区视频在线播放| 国产在线国偷精品免费看| 国产又大又黑又粗免费视频| 中文字幕久精品免费视频| 久久久国产精品入口麻豆| 免费国产a级片| 国产精品美女久久久久av爽李琼 | 色一情一乱一乱一区91| 97se亚洲国产综合自在线观| 在线观看免费视频一区| 九九久久久久99精品| 欧美人与物videos另类xxxxx| 久久久九九九热| 欧美性猛交xxxx富婆| 黄色av电影在线观看| 久久久国产精品一区二区三区| 免费久久99精品国产| 日本亚洲色大成网站www久久| 在线性视频日韩欧美| 琪琪久久久久日韩精品| 在线黄色免费看| 色伊人久久综合中文字幕| 中文在线免费| 少妇特黄a一区二区三区|