<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## **1. 分布式微服務架構面臨的問題** 在微服務架構中,根據業務來拆分成一個個的服務,而**服務與服務之間存在著依賴關系**(比如用戶調商品,商品調庫存,庫存調訂單等等),在Spring Cloud中多個微服務之間可以用 RestTemplate+Ribbon 和 Feign 來調用 ![](https://img.kancloud.cn/fa/96/fa96850078423095e72b853ee76f2d01_664x540.png) 1. 在服務之間調用的鏈路上由于網絡原因、資源繁忙或者自身的原因,服務并不能保證100%可用 2. **如果單個服務出現問題,調用這個服務就會出現線程阻塞,** 導致響應時間過長或不可用,此時若有大量的請求涌入,容器的線程資源會被消耗完畢,**導致服務癱瘓**。 3. **服務與服務之間的依賴性,故障會傳播**,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的 **“雪崩”效應** 。 為了解決這個問題,業界提出了熔斷器模型。 ## 2. Hystrix 作用 Hystrix 是Netflix公司開源項目( https://github.com/Netflix/Hystrix),實現了熔斷器模型,Spring Cloud 對這一 組件進行了整合。 * 服務熔斷 * 服務監控 ### 2.1 什么是服務熔斷 1. 熔斷機制**是應對雪崩效應的一種微服務鏈路保護機制。** 在微服務架構中,一個請求需要調用多個服務是非常常見的,如下圖: ![](https://img.kancloud.cn/b1/2c/b12c7b328dfe48ca474777836558a0d5_477x303.png) 2. 當服務之間調用的鏈路上某個微服務不可用或者響應時間太長時,會導致連鎖故障。**當失敗的調用到一定閾值(缺省是5秒內20次調用失敗) 就會啟動熔斷機制。** 3. 在 SpringCloud 框架里熔斷機制通過Hystrix實現,Hystrix會監控微 服間調用的狀況。熔斷機制的注解是 @HystrixCommand ![](https://img.kancloud.cn/79/13/7913d2bc3c6c4debbfb36475938fd7f4_631x420.png) * **熔斷器打開后,可用避免連鎖故障,fallback方法可以直接返回一個固定值。這樣其他調用者就不用等待(阻塞),不至于拖垮整個系統!** ### **2.2 服務端熔斷** **1. 服務提供端引入熔斷相關依賴** ``` <!-- 導入hystrix依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> ``` **2. 修改 ProductController** 出現異常后如何處理? 使用` @HystrixCommand` 注解 ,一旦調用服務方法失敗并拋出了錯誤信息后,會自動調用 @HystrixCommand 注解中 fallbackMethod 屬性指定的當前類中的方法 ![](https://img.kancloud.cn/df/25/df25e620e4b284e9cada037f87cb246d_824x530.png) * 如果不報錯(返回null),也不超時就不會調用fallback方法 **3. 修改啟動類,開啟Hystrix** @EnableHystrix //開啟Hystrix的熔斷機制 ~~~ @EnableHystrix //開啟Hystrix的熔斷機制 @EnableEurekaClient @MapperScan("com.tuna.springcloud.server.mapper") @SpringBootApplication public class ProductProvider_8001 { public static void main(String[] args) { SpringApplication.run(ProductProvider_8001.class, args); } } ~~~ ![](https://img.kancloud.cn/17/43/174376cd483cfeb513b218a23900bccc_866x491.png) 沒有異常時 ![](https://img.kancloud.cn/7d/97/7d971d6f42cf2b73eb039e4bbd55ef7e_505x104.png) 當id=7,發生異常時 ![](https://img.kancloud.cn/71/ae/71aece776d6e655a6839b38366679a34_836x127.png) ### **2.3 Feign 客戶端服務熔斷** **1. 修改yml,開啟Feign自帶的熔斷** Feign 是自帶斷路器的,也就是針對**消費者(客戶端)**進行服務熔斷,需要在配置文件中開啟它,在配置文件加以下代碼 ``` feign: hystrix: enabled: true # 開啟服務熔斷器 ``` **2. 指定熔斷處理類** Service 接口上的 @FeignClient 注解中,加上 fallback 指定熔斷處理類即可: ProductClientServiceFallBack.class ~~~ @FeignClient(value = "microservice-product", fallback = ProductClientServiceFallBack.class) ~~~ ~~~ //@FeignClient(value = "microservice-product") //指定調用的微服務名稱 // fallback 作用,指定熔斷處理類,如果被調用的方法處理異常,就會交給熔斷處理類中的方法進行處理 @FeignClient(value = "microservice-product", fallback = ProductClientServiceFallBack.class) //指定調用的微服務名稱 public interface ProductClientService { @RequestMapping(value = "/product/add", method = RequestMethod.POST) boolean add(@RequestBody Product product); @RequestMapping(value = "/product/get/{id}", method = RequestMethod.GET) Product get(@PathVariable("id") Long id); @RequestMapping(value = "/product/list", method = RequestMethod.GET) List<Product> list(); } ~~~ **3. 創建熔斷處理類** 需要繼承對應的service ~~~ @Component //一定要加上它,將它納入到容器中 public class ProductClientServiceFallBack implements ProductClientService{ @Override public boolean add(Product product) { return false; } @Override public Product get(Long id) { return new Product(id, "id=" + id + "無數據--@feignclient&hystrix", "無有效數據庫"); } @Override public List<Product> list() { return null; } } ~~~ **4. 測試** [http://localhost/consumer/product/get/6](http://localhost/consumer/product/get/6) ![](https://img.kancloud.cn/d6/0e/d60e2308c0be7c4fa52397b0cd8e1d5f_494x140.png) 當關閉服務提供端 ![](https://img.kancloud.cn/7f/22/7f226e40875046f4468844f679b652d9_609x192.png) ### **2.4 Hystrix Dashboard監控平臺搭建** #### **2.4.1 創建 Hystrix Dashboard模塊** ![](https://img.kancloud.cn/f4/4a/f44af44e278ec68b966f6a15367c0064_286x262.png) **2.4.1.1 修改pom加入 Hystrix Dashboard啟動器** ~~~ <!--導入 hystrix 與 hystrix-dashboard 依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency> ~~~ **2.4.1.2 配置application.yml文件** ~~~ server: port: 9001 ~~~ **2.4.1..3 創建啟動類 ** 創建一個啟動類 HystrixDashboard_9001,添加 @EnableHystrixDashboard 注解開啟服務監控 ~~~ @EnableHystrixDashboard //開啟服務監控 @SpringBootApplication public class HystrixDashboard_9001 { public static void main(String[] args) { SpringApplication.run(HystrixDashboard_9001.class, args); } } ~~~ **2.4.1.4 啟動微服務** 訪問[http://localhost:9001/hystrix](http://localhost:9001/hystrix) ![](https://img.kancloud.cn/97/47/97478552c0dd2b48441cb4f05db65cf5_1056x607.png) #### 2.4.2 服務端搭建 在需要監控的服務 pom.xml 中的 dependencies 節點中新增 spring\-boot\-starter\-actuator 監控依賴, 以開啟監控相關的端點,并確保已經引入斷路器的依賴 spring\-cloud\-starter\-netflix\-hystrix **1. 服務端pom加入熔斷監控依賴** ``` <!--hystrix監控依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` **2. 在需要監控的服務 application.yml 配制中添加暴露端點** 在服務提供者 microservice-cloud-server 的application.yml配置文件添加如下配置: ~~~ # hystrix 在被監控服務上添加暴露端點 management: endpoints: web: exposure: include: hystrix.stream ~~~ **3. 啟動服務提供者、Eureka、hystrix服務測試** 1\. 啟動監控服務: microservice-cloud-hystrix-dashboard-9001 2\. 啟動2個Eureka 3\. 啟動 microservice-cloud-08-provider-product-8001 先訪問:http://localhost:8001/product/get/1 ![](https://img.kancloud.cn/c0/50/c050e49c06f1ea136565dae7d7daccae_533x113.png) 再訪問:http://localhost:8001/actuator/hystrix.stream 看效果 ![](https://img.kancloud.cn/53/3a/533a8f6b82c7e7187ba4ce67693dd3a6_1177x672.png) 每隔2秒進行ping獲取json格式數據(9001 監控 8001),但是閱讀性不好,如果數據可以圖形化顯示效 果就更完美 **4. Hystrix Dashboard** ![](https://img.kancloud.cn/ed/5d/ed5d126cab5e7abedcb2ee6fcb9d8113_1170x649.png) 第一個輸入框填寫監控地址: http://localhost:8001/actuator/hystrix.stream Delay:控制服務器上輪詢監控信息的延遲時間,默認為2000毫秒,可以通過配置該屬性來降低客 戶端的網絡和CPU消耗。 Title:可以通過配置該信息來展示更合適的標題,默認會使用具體監控實例的URL **監控結果** ![](https://img.kancloud.cn/07/9c/079c35608eca741880055b8fb13c06a1_1035x458.png) 如果沒有請求會一直顯示 “Loading…” 這時訪問一下 http://localhost:8001/product/get/1,可以看到出現了上圖的效果: **如何查看監控頁面 ** 7色 :右上角 1圈 實心圓:共有兩種含義。 它通過顏色的變化代表了實例的健康程度,它的健康度從綠色<黃色<橙色<紅色遞減。 該實心圓除了顏色的變化之外,它的大小也會根據實例的請求流量發生變化,流量越大該實心圓就越 大。所以通過該實心圓的展示,就可以在大量的實例中快速的發現故障實例和高壓力實例。 1線 曲線:用來記錄2分鐘內流量的相對變化,可以通過它來觀察到流量的上升和下降趨勢。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看