摘要:多層服務調用常見于微服務架構中較底層的服務如果出現故障,會導致連鎖故障。
Spring Cloud 體驗 簡介
Spring Cloud為開發人員提供了快速構建分布式系統的一些工具,包括配置管理、服務發現、斷路器、路由、微代理、
事件總線、全局鎖、決策競選、分布式會話等等
基于Spring Boot,Spring Cloud將各公司成熟服務框架組合起來,通過Spring Boot風格封裝屏蔽掉了復雜的
配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包創建服務注冊中心
開發工具:Spring Tool Suite
右鍵 > New > Spring Starter Project > name:wind-server >
next:選擇cloud discovery->eureka server > Finish
配置服務application.yml
啟動一個服務注冊中心,使用注解@EnableEurekaServer,這個注解需要在springboot工程的啟動application類上加
訪問:http://localhost:8761 觀察Spring Eureka服務注冊中心
創建服務提供者當client向server注冊時,會提供一些元數據,如主機和端口,URL,主頁等
Eureka server從每個client實例接收心跳信息,如果心跳超時則將該實例從注冊server中刪除
創建wind-client項目,過程同server類似
配置application.yml 端口8762
在啟動類上加@EnableEurekaClient,表明是一個eureka client
在啟動類中添加測試方法:home
啟動并訪問:http://localhost:8762/hi?name...
ribbon在服務架構中,業務都會被拆分成一個獨立的服務,服務和服務的通訊是基于http restful的
cloud有兩種調用方式:ribbon+restTemplate和feign
ribbon是一個負載均衡客戶端,可以很好的控制http和tcp的一些行為
feign也用到了ribbon,當你使用@FeignClient,ribbon自動被應用
啟動wing-server和wind-client,更改wind-client端口為8763并啟動,在服務注冊中心就會有兩個服務,模擬出一個小的集群
創建服務消費者:wind-ribbon 過程同上
配置服務application.yml
在啟動類上加注解@EnableDiscoveryClient,向服務中心注冊一個新的服務,這時wind-ribbon既是服務提供者也是服務消費者
在啟動類中注冊了一個bean: restTemplate;通過@LoadBalanced注冊表明,這個restRemplate是負載均衡的
新建測試類HelloControler和HelloService
啟動并訪問:http://localhost:8764/hi?name...
連續訪問:頁面交替出現Hi Apolo,I am from port:8762和Hi Apolo,I am from port:8763
此時的項目架構:
一個服務注冊中心,wind-server,端口8761
wind-client工程跑了兩個副本,端口分別為8762、8763,分別向服務注冊中心注冊
wind-ribbon端口為8764,向服務注冊中心注冊
當wind-ribbon通過restTemplate調用wind-client的hi接口時,因為用ribbon進行負載均衡,會輪流調用wind-client:8762和8763端口的hi接口
feignFeign是一個聲明式的web服務客戶端,它使得寫web服務變得更簡單
只需創建一個接口并注解,具有可插拔的注解特性,包括Feign注解和JAX-RS注解
同時支持可插拔的編碼器和解碼器
當使用Feign的時候,Spring Cloud整合了Ribbon和Eureka去提供負載均衡
啟動wind-server,端口為8761; 啟動wind-client 兩次,端口分別為8762 、8773.
創建項目:wind-feign 過程同上并添加spring-cloud-starter-feign和spring-boot-starter-web到pom.xml
配置服務application.yml
在啟動類上加注解@EnableFeignClients開啟feign,向服務注冊中心注冊,wind-feign是服務者和消費者
定義一個feign的接口類,使用@FeignClient(“服務名”)來指定調用哪個服務
啟動并訪問:http://localhost:8765/hi?name... 瀏覽器交替顯示不同端口
更改feign配置
在聲明feignclient的時候,不僅要指定服務名,同時需要制定服務配置類 StoreClient
重寫配置,需要加@Configuration注解,并重寫下面的兩個bean 例子:FooConfiguration
斷路器 出現的背景在微服務架構中,將業務拆分成一個個的服務,服務與服務之間可以相互調用(RPC)
為了保證高可用,高并發服務,單個服務需要集群部署
由于網絡原因或服務自身的原因,不能保證100%的可用,若單個服務出現問題,調用這個服務就會出現網絡延遲,
此時若有大量請求,會形成任務累計,導致服務癱瘓,甚至導致服務"雪崩"
為解決服務"雪崩"的問題,出現了斷路器模型
Netflix創建了一個Hystrix庫來實現斷路器模式。多層服務調用常見于微服務架構中
較底層的服務如果出現故障,會導致連鎖故障。當對特定的服務調用達到一個閥值(hystrix是5秒20次)斷路器將會打開
斷路器打開之后,可以避免連鎖故障,fallback方法可以直接返回一個固定值
在ribbon中使用啟動wind-server 工程;啟動wind-client工程,它的端口為8762
改造wind-ribbon工程
pom.xml文件中添加 spring-cloud-starter-hystrix
程序入口(啟動類)添加注解@EnableHystrix
服務類HelloService,服務方法上加注解@HystrixCommand,并指定fallbackMethod,返回固定值
啟動并訪問:http://localhost:8764/hi?name...
正常:Hi Apolo,I am from port:8762
關閉wind-client服務:Hi,Apolo,sorry,error! 斷路器生效了
在feign中使用
feign自帶斷路器,默認是關閉的
打開,添加配置:feign.hystrix.enabled=true
使用,服務接口SchedualServiceHi注解上添加fallback的指定類SchedualServiceHiHystric
啟動并訪問:http://localhost:8765/hi?name...,開啟關閉wind-client服務觀察
為什么默認關閉:
http://www.cnblogs.com/devzxd...
https://github.com/spring-clo...
監控管理
Circuit Breaker: Hystrix Dashboard (斷路器:hystrix 儀表盤)
監控各個hystrixcommand的各種值
通過dashboards的實時監控來動態修改配置
改造wind-ribbon項目
pom文件添加spring-cloud-starter-hystrix-dashboard
啟動類添加注解@EnableHystrixDashboard開啟斷路器儀表盤
啟動訪問:http://localhost:8764/hystrix 看到小熊界面
輸入http://localhost:8764/hystrix... 點擊monitor stream進入監控界面
訪問http://localhost:8764/hi?name...,觀察監控頁面
路由網關(zuul) 介紹微服務架構的關鍵組件:服務注冊與發現、服務消費、負載均衡、斷路器、智能路由、配置管理,由這幾個組件可以組成一個簡單的微服務架構
客戶端請求 --> 經過負載均衡(zuul、Ngnix) --> 到達服務網關(zuul集群) --> 到具體服務
服務統一注冊到高可用服務注冊中心集群
服務的所有配置文件由配置服務管理,配置文件存儲在git倉庫,方便開發人員隨時更改
Zuul簡介Zuul的主要功能是路由和過濾器
路由功能是微服務的一部分,如/api/user映射到user服務,/api/shop映射到shop服務
Zuul也實現了負載均衡
Zuul使用創建wind-zuul項目,pom文件添加spring-cloud-starter-zuul
啟動類上添加注解@EnableZuulProxy,啟動zuul
添加配置文件application.yml
首先向eureka注冊自己,端口8769,服務名service-zuul
以/api-a/開頭的路由指向service-ribbon
以/api-b/開頭的路由指向service-feign
一次啟動5個工程,分別訪問
http://localhost:8769/api-a/h...和
http://localhost:8769/api-b/h...
結果一致,表明路由起作用了
zuul不僅是路由,還能過濾,做安全驗證
增加過濾MyFilter.java 繼承ZuulFilter 加注解@Component
訪問:http://localhost:8769/api-a/h... 結果:token is empty
訪問:http://localhost:8769/api-a/h... 結果:Hi Apolo,I am from port:8763
源碼下載:百度云盤地址:鏈接:http://pan.baidu.com/s/1dEI9oqP 密碼:va9l
參考:http://blog.csdn.net/forezp/a...
春雨中抽出來的柳條,嬌艷欲滴 此時的烈日下,顯得憔悴而慵懶 兩岸的游人稀少,都躲在樹下 烈日、大樹下,一陣風來,童年的記憶浮現 2017-07-14
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67376.html
摘要:而微服務架構能否成功實踐,利用各種工具解決潛在問題是關鍵。因此,微服務本身可以通過庫和運行時代理解決客戶端服務發現負載均衡配置更新統計跟蹤等。與相比,解決了更廣的微服務架構問題。和處理了不同范圍的微服務架構技術點,而且是用了不同的方法。 Spring Cloud vs. Kubernetes,誰才是部署微服務的最佳拍檔? Spring Cloud和Kubernetes都聲稱自己是開發和...
摘要:分布式架構五大核心套件服務發現云端服務發現,一個基于的服務,用于定位服務,以實現云端中間層服務發現和故障轉移。 1 后端技術框架我們選擇Spring Cloud作為微服務的分布式架構:Spring Cloud vs Dubbo? 背景 Dubbo,是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站點。Spring Cloud,是Spring Source的產物...
摘要:分布式架構五大核心套件服務發現云端服務發現,一個基于的服務,用于定位服務,以實現云端中間層服務發現和故障轉移。 1 后端技術框架我們選擇Spring Cloud作為微服務的分布式架構:Spring Cloud vs Dubbo? 背景 Dubbo,是阿里巴巴服務化治理的核心框架,并被廣泛應用于阿里巴巴集團的各成員站點。Spring Cloud,是Spring Source的產物...
摘要:摘要近日,阿里中間件的企業級分布式應用服務宣布再次升級,全面支持應用。在阿里巴巴的使用歷史可以追溯到年,并且成功通過了每年雙海量應用的嚴峻考驗。經過多年的歷練,目前已經成為阿里巴巴主要的分布式應用服務工具,日均調用超千億次。 摘要: 近日,阿里中間件(Aliware)的企業級分布式應用服務EDAS宣布再次升級,全面支持Spring Cloud應用。 點此查看原文:http://clic...
摘要:那么為什么可以帶給我們這樣的完美編碼體驗呢實際上,這完全歸功于的封裝,由于在服務注冊與發現客戶端負載均衡等方面都做了很好的抽象,而上層應用方面依賴的都是這些抽象接口,而非針對某個具體中間件的實現。 通過《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》一文的學習,我們已經學會如何使用Nacos來實現服務的注冊與發現,同時也介紹如何通過LoadBala...
閱讀 3501·2021-11-18 10:07
閱讀 1596·2021-11-04 16:08
閱讀 1525·2021-11-02 14:43
閱讀 1099·2021-10-09 09:59
閱讀 854·2021-09-08 10:43
閱讀 1087·2021-09-07 09:59
閱讀 976·2019-12-27 11:56
閱讀 1033·2019-08-30 15:56