1.爲何須要 Hystrix斷路器?git
雪崩現象: 複雜的分佈式架構的應用程序有不少的依賴,當依賴的某個服務出現失敗時(線程池阻塞),很容易拖垮整個應用。web
解決辦法:spring
對依賴作隔離,Hystrix就是處理依賴隔離的框架,同時也是能夠幫咱們作依賴服務的治理和監控數據庫
hysrix(豪豬):保證微服務羣的健壯,作了隔離,熔斷,降級,緩存等操做。編程
最終達到不會因爲某個服務出問題而致使雪崩,讓整個集羣死掉。後端
資源隔離(限流):線程池隔離,信號量隔離。分配每一個服務的資源,互不影響。緩存
熔斷:失敗率達到閾值時自動觸發降級安全
降級:超時降級,資源不足時降級,降級後配合降級接口返回託底數據。減小損失服務器
緩存:提供了請求緩存,請求合併實現。架構
所謂降級,就是當某個服務熔斷以後,服務器將再也不被調用,此時客戶端能夠本身準備一個本地的fallback回調,返回一個缺省值。
熔斷(服務提供方作)調用時不能用feign(有本身的機制),使用ribbon
1.導jar包依賴
2.啓動斷路器(@EnableHystrix)
3.配置斷路註解(@HystrixCommand(fallbackMethod = "getUserFailBack") //出現短路(超時,異常,屢次訪問都失敗),託底數據訪問(經過方法調用獲取的))
4.返回託底數據的方法(public User getUserFailBack(Long id){ return new User(id,"出現異常了親!");})
爲何使用Feign?
每一個方法都要加回調而且耦合。
解決方案:
可使用spring面向切面編程,爲feign的接口建立一個代理對象,完成對服務調用,當發現熔斷後就調用同名託底方法。
若是咱們服務消費者實現的技術爲ribbon,必須在服務提供者方經過Hystrix的斷路器.
若是咱們服務消費者實現的技術爲feign,必須在服務消費者經過feign的斷路器,feign斷路器底層仍是Hystrix的斷路器.
Zuul 是netflix開源的一個API Gateway 服務器, 本質上是一個web servlet應用。
Zuul 在雲平臺上提供動態路由,監控,彈性,安全等邊緣服務的框架。Zuul 至關因而設備和 Netflix 流應用的 Web 網站後端全部請求的前門,也要註冊入Eureka。
路由訪問映射規則 :
安全加固:不用服務名,映射路徑
忽略原來訪問:原來模式不能夠訪問
加上統一前綴
yml配置
zuul: routes: myUser.serviceId: user-provider myUser.path: /user/** #以/user/開頭的全部路徑都轉發給user-provider ignored-services: "*" #能夠一個一個配置,可是很麻煩,用*來通配 prefix: "/services" #加上統一前綴
微服務架構中,每一個項目都有一個yml配置,管理起來麻煩。要使用spring cloud config來統一管理。
在整個項目中須要一個config-server 全部的其餘項目都對應一個config-clent,不管是provider consumer eureka等。
實現
gitjhub上面的數據就用yhptest的 服務端:能經過url訪問配置 客戶端:可以經過服務端最終訪問配置信息 注意:config-server、和Eureka-sever的配置文件不能交給spring cloud config。注意前後
事務: 指做爲單個邏輯工做單元執行的一系列操做,要麼徹底地執行,要麼徹底地不執行.
本地事務: SqlSessionfactory
一個數據庫範圍類事務管理.
分佈式事務:
跨了多個數據庫事務管理,在微服務架構每一個服務都有本身數據庫,在微服務架構中必然要用到分佈式事務.
爲何須要?
微服務架構所必須
實現方案
二階段提交(耗時耗資源)
tcc(強一致性)
異步確保型(最終一致性-不實時)