国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤

這篇具有很好參考價值的文章主要介紹了第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.熔斷/降級/限流

1.1.簡介

1.1.1.熔斷

A服務調用B服務某個功能,由于網(wǎng)絡不穩(wěn)定問題,或者B服務卡機,導致功能時間超長。如果這樣的次數(shù)太多,我們就可以直接將B服務斷路(A不再請求B接口),凡是調用B服務就直接返回降級數(shù)據(jù),不必等待B服務的超長執(zhí)行,這樣B服務的故障問題,就不會級聯(lián)影響到A。

1.1.2.降級

整個網(wǎng)站處于流量高峰期,服務器壓力劇增,根據(jù)當前業(yè)務情況及流量,對一些服務和頁面進行有策略的降級(停止服務,所有調用直接返回降級數(shù)據(jù)),以此緩解服務器資源的壓力,以保證核心業(yè)務的正常運行,同時也保持了客戶和大部分客戶得到正確的響應。

1.1.3.熔斷和降級的異同

相同點:

  • 為了保證集群大部分服務的可用性和可靠性,防止崩潰,犧牲小我
  • 用戶最終都是體驗到某個功能不可用

不同點:

  • 熔斷是被調用方故障,觸發(fā)的系統(tǒng)主動規(guī)則
  • 降級是基于全局考慮,人工停止一些正常服務,釋放資源

1.1.3.限流

對打入服務的請求流量進行控制,使服務能夠承擔不超過自己能力的流量壓力


1.2.Spring Cloud Alibaba - Sentinel

1.2.1.簡介

項目地址:https://github.com/alibaba/Sentinel

官方文檔:https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5

隨著微服務的流行,服務和服務之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式服務架構的流量控制組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統(tǒng)負載保護、熱點防護等多個維度來幫助開發(fā)者保障微服務的穩(wěn)定性。

1.2.2.Sentinel與Hystrix對比

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java
Sentinel 以流量為切入點,從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度保護服務的穩(wěn)定性;可以在控制臺中看到接入應用的單臺機器秒級數(shù)據(jù),甚至 500 臺以下規(guī)模的集群的匯總運行情況;Sentinel提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合;Sentinel 提供簡單易用、完善的 SPI 擴展接口,可以通過擴展接口來定制業(yè)務邏輯。

Hystrix是一個延遲和容錯庫,旨在隔離遠程系統(tǒng)、服務和第三方庫的訪問點,停止級聯(lián)故障,并在故障不可避免的復雜分布式系統(tǒng)中實現(xiàn)恢復能力;

Resilience4j是一個為Java8和函數(shù)式編程設計的容錯庫。提供高階函數(shù)(decorators)來增強任何功能接口、lambda表達式或方法引用,包括斷路器、速率限制器、重試或隔板??梢栽谌魏魏瘮?shù)接口、lambda表達式或方法引用上堆疊多個裝飾器。優(yōu)點是您可以選擇所需的裝飾器,而無需其他任何東西。

1.2.3.Sentinel使用步驟

官方文檔:https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8

  1. 定義資源
    • 主流框架的默認適配
    • 拋出異常的方式定義資源
    • 返回布爾值方式定義資源
    • 注解方式定義資源
    • 異步調用支持
  2. 定義規(guī)則
    • 流量控制規(guī)則、熔斷降級規(guī)則、系統(tǒng)保護規(guī)則、來源訪問控制規(guī)則 和 熱點參數(shù)規(guī)則。
  3. 檢驗規(guī)則是否生效

1.2.4.Sentinel控制臺

下載地址:https://github.com/alibaba/Sentinel/releases/download/v1.8.0/sentinel-dashboard-1.8.0.jar

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

注意:Sentinel控制臺版本需要與引入的Sentinel依賴版本保持一致

啟動:

java -jar sentinel-dashboard-1.8.0.jar --server.port=8111

訪問:

http://192.168.139.10:8111

用戶名/密碼:sentinel/sentinel

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

1.2.5.Spring Boot整合Sentinel

1)導入依賴

gmall-common

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

gmall-seckill

<!--Endpoint 支持,顯示圖表->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2)配置Sentinel控制臺地址信息

spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 192.168.139.10:8111
# Endpoint 支持,暴露的 endpoint 路徑
management:
  endpoints:
    web:
      exposure:
        include: '*'

3)在Sentinel控制臺調整參數(shù),(默認所有的流控設置保存在內存中,重啟失效)

流控設置:資源名(/請求路徑)

  • 簇點鏈路 -> 流控
  • 流控規(guī)則 -> 新增流控規(guī)則

1.2.6.自定義Sentinel全局異常

package com.atguigu.gmall.seckill.config;

import com.alibaba.csp.sentinel.adapter.spring.webflux.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.spring.webflux.callback.WebFluxCallbackManager;
import com.atguigu.common.exception.BizCode;
import com.atguigu.common.utils.R;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;

/**
 * Sentinel 配置 {@link SentinelConfig}
 *
 * @author zhangwen
 * @email: 1466787185@qq.com
 */
@Configuration
public class SentinelConfig {

    /**
     * 自定義Sentinel異常
     */
    @PostConstruct
    private void initBlockHandler(){
        BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {

            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                R error = R.error(BizCode.TOO_MANY_REQUESTS.getCode(), BizCode.TOO_MANY_REQUESTS.getMessage());

                return ServerResponse.status(HttpStatus.OK)
                        .contentType(MediaType.APPLICATION_JSON)
                        .body(BodyInserters.fromValue(error));
            }
        };

        WebFluxCallbackManager.setBlockHandler(blockRequestHandler);
    }
}

1.2.7.全服務引入Sentinel

1)導入依賴

<!--Endpoint 支持,顯示圖表->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

2)配置Sentinel控制臺地址信息

spring:
  cloud:
    sentinel:
      transport:
        port: 8719
        dashboard: 192.168.139.10:8111
# Endpoint 支持,暴露的 endpoint 路徑
management:
  endpoints:
    web:
      exposure:
        include: '*'

3)商城核心鏈路完整走一遍,查看Sentinel控制臺

  • 首頁 -> 登錄 -> 商品檢索 -> 商品詳情 -> 加入購物車 -> 結算確認訂單 -> 提交訂單 -> 支付 -> 訂單列表
  • 首頁 -> 秒殺 -> 商品詳情 -> 立即搶購 -> 搶購成功(創(chuàng)建訂單)-> 支付 -> 訂單列表

1.2.8.流控模式與效果

流控模式:

  • 直接
  • 關聯(lián)
  • 鏈路

流控效果:

  • 快速失敗
  • Warm Up(預熱啟動/冷啟動)
  • 排隊等待

1.2.9.Feign支持(熔斷)

使用Sentinel來保護feign遠程調用

1)調用方熔斷保護

feign:
  sentinel:
	enabled: true

gmall-product

package com.atguigu.gmall.product.feign;

import com.atguigu.common.utils.R;
import com.atguigu.gmall.product.fallback.SeckillFeignServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * 秒殺服務遠程接口 {@link SeckillFeignService}
 *
 * @author zhangwen
 * @email: 1466787185@qq.com
 */
@FeignClient(value = "gmall-seckill", fallback = SeckillFeignServiceFallback.class)
public interface SeckillFeignService {

    /**
     * 獲取商品秒殺信息
     * @param skuId
     * @return
     */
    @GetMapping("/sku/seckill/{skuId}")
    R getSkuSeckillInfo(@PathVariable("skuId") Long skuId);
}
package com.atguigu.gmall.product.fallback;

import com.atguigu.common.exception.BizCode;
import com.atguigu.common.utils.R;
import com.atguigu.gmall.product.feign.SeckillFeignService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 秒殺接口調用失敗熔斷處理 {@link SeckillFeignServiceFallback}
 *
 * @author zhangwen
 * @email: 1466787185@qq.com
 */
@Slf4j
@Component
public class SeckillFeignServiceFallback implements SeckillFeignService {
    @Override
    public R getSkuSeckillInfo(Long skuId) {
        log.info("熔斷方法調用...getSkuSeckillInfo");
        return R.error(BizCode.TOO_MANY_REQUESTS.getCode(), BizCode.TOO_MANY_REQUESTS.getMessage());
    }
}

2)調用方手動指定遠程服務的降級策略。遠程服務被降級,就會觸發(fā)熔斷回調方法。

3)超大流量的時候,必須犧牲一些遠程服務。在服務的提供方(遠程服務)指定降級策略。提供方是在運行,但是不運行自己的業(yè)務邏輯,返回的是默認的熔斷數(shù)據(jù)(限流的數(shù)據(jù))。

1.2.10.自定義受保護資源

1)拋出異常的方式定義資源(基于代碼)

public List<SeckillSkuRedisTO> getCurrentSeckillSkus() {
	//seckillSkus 資源名
	try(Entry entry = SphU.entry("seckillSkus")) {
		//業(yè)務邏輯
	} catch (BlockException e) {
		log.error("資源被限流,{}", e.getMessage())
	}
}

Sentinel控制臺為資源 seckillSkus 添加流控,,降級規(guī)則

2)注解方式定義資源(基于注解)

/**
 * blockHandler 函數(shù)會在原方法被限流/降級/系統(tǒng)保護的時候調用
 * fallback 函數(shù)會針對所有類型的異常
 */
@SentinelResource(value = "getCurrentSeckillSkusResource",
blockHandler = "getCurrentSeckillSkusBlockHandler")
public List<SeckillSkuRedisTO> getCurrentSeckillSkus() {
	//seckillSkus 資源名
	try(Entry entry = SphU.entry("seckillSkus")) {
		//業(yè)務邏輯
	} catch (BlockException e) {
		log.error("資源被限流,{}", e.getMessage())
	}
}

private List<SeckillSkuRedisTO> getCurrentSeckillSkusBlockHandler(BlockException e) {
	log.error("getCurrentSeckillSkusResource被限流了");
	return null;
}

Sentinel控制臺為資源 getCurrentSeckillSkusResource 添加流控,降級規(guī)則

1.3.網(wǎng)關流控

1.3.1.簡介

官方文檔:
https://github.com/alibaba/Sentinel/wiki/%E7%BD%91%E5%85%B3%E9%99%90%E6%B5%81

Sentinel 支持對 Spring Cloud Gateway、Zuul 等主流的 API Gateway 進行限流。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

1.3.2.Spring Cloud Gateway

gmall-gataway 引入依賴

<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
	<version>2.2.3.RELEASE</version>
</dependency>

1.3.3.自定義Sentinel異常處理

1)配置方式

spring:
   cloud:
      sentinel:
		  scg:
			  fallback:
				mode: response
				response-body: '{"code":403,"msg":"請求流量過大,系統(tǒng)限流"}'

2)GatewayCallbackManager注冊回調進行定制

SentinelConfig

package com.atguigu.gmall.gateway.config;

import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
import com.atguigu.common.exception.BizCode;
import com.atguigu.common.utils.R;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.ServerResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import javax.annotation.PostConstruct;

/**
 * Sentinel 配置 {@link SentinelConfig}
 *
 * @author zhangwen
 * @email: 1466787185@qq.com
 */
@Configuration
public class SentinelConfig {

    /**
     * GatewayCallbackManager注冊回調進行異常定制
     */
    @PostConstruct
    private void initBlockHandler(){
        BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {

            @Override
            public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
                R error = R.error(BizCode.TOO_MANY_REQUESTS.getCode(), BizCode.TOO_MANY_REQUESTS.getMessage());

                return ServerResponse.ok()
                        .contentType(MediaType.APPLICATION_JSON)
                        .body(BodyInserters.fromValue(error));
            }
        };

        // GatewayCallbackManager注冊回調進行異常定制
        GatewayCallbackManager.setBlockHandler(blockRequestHandler);
    }
}

1.3.4.網(wǎng)關流控原理

當通過 GatewayRuleManager 加載網(wǎng)關流控規(guī)則( GatewayFlowRule )時,無論是否針對請求屬性進行限流,Sentinel 底層都會將網(wǎng)關流控規(guī)則轉化為熱點參數(shù)規(guī)則( ParamFl owRule ),存儲在GatewayRuleManager 中,與正常的熱點參數(shù)規(guī)則相隔離。轉換時 Sentinel 會根據(jù)請求屬性配置,為網(wǎng)關流控規(guī)則設置參數(shù)索引( idx ),并同步到生成的熱點參數(shù)規(guī)則中。

外部請求進入 API Gateway 時會經(jīng)過 Sentinel 實現(xiàn)的 filter,其中會依次進行 路由/API 分組匹配、請求屬性解析參數(shù)組裝。Sentinel 會根據(jù)配置的網(wǎng)關流控規(guī)則來解析請求屬性,并依照參數(shù)索引順序組裝參數(shù)數(shù)組,最終傳入 SphU.entry(res, args) 中。Sentinel API Gateway Adapter Common 模塊向Slot Chain 中添加了一個 GatewayFlowSlot ,專門用來做網(wǎng)關規(guī)則的檢查。 GatewayFlowSlot 會從 GatewayRuleManager 中提取生成的熱點參數(shù)規(guī)則,根據(jù)傳入的參數(shù)依次進行規(guī)則檢查。若某條規(guī)則不針對請求屬性,則會在參數(shù)最后一個位置置入預設的常量,達到普通流控的效果。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

上圖的整體流程如下:

  1. 外部請求進入API Gateway時會經(jīng)過Sentinel實現(xiàn)的filter,其中會依次進行路由/API分組匹配、請求屬性解析和參數(shù)組裝。
  2. Sentinel 會根據(jù)配置的網(wǎng)關流控規(guī)則來解析請求屬性,并依照參數(shù)索引順序組裝參數(shù)數(shù)組,最終傳入SphU.entry(res, args) 中。
  3. Sentinel API Gateway Adapter Common模塊向 Slot Chain 中添加了一個 GatewayFlowSlot,專門用來做網(wǎng)關規(guī)則的檢查。
  4. GatewayFlowSlot會從GatewayRuleManager中提取生成的熱點參數(shù)規(guī)則,根據(jù)傳入的參數(shù)依次進行規(guī)則檢查。若某條規(guī)則不針對請求屬性,則會在參數(shù)最后一個位置置入預設的常量,達到普通流控的效果。

注意:當通過 GatewayRuleManager加載網(wǎng)關流控規(guī)則GatewayFlowRule時,無論是否針對請求屬性進行限流,Sentinel底層都會將網(wǎng)關流控規(guī)則轉化為熱點參數(shù)規(guī)則ParamFlowRule,存儲GatewayRuleManager中,與正常的熱點參數(shù)規(guī)則相隔離。轉換時Sentinel會根據(jù)請求屬性配置,為網(wǎng)關流控規(guī)則設置參數(shù)索引idx,并同步到生成的熱點參數(shù)規(guī)則中。


1.3.5.網(wǎng)關流控控制臺

  • 查看 API Gateway 實時的 route 和自定義 API 分組監(jiān)控
  • 管理網(wǎng)關規(guī)則和 API 分組配置

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

快速刷新鏈接

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java



2.Sleuth+Zipkin服務鏈路追蹤


2.1.為什么用?

微服務架構是一個分布式架構,它按業(yè)務劃分服務單元,一個分布式系統(tǒng)往往有很多個服務單元。由于服務單元數(shù)量眾多,業(yè)務的復雜性,如果出現(xiàn)了錯誤和異常,很難去定位。主要體現(xiàn)在,一個請求可能需要調用很多個服務,而內部實現(xiàn)分布式鏈路追蹤,去跟進一個請求到底有哪些服務參與,參與的順序又是怎樣的,從而達到每個請求的步驟清晰可見,出了問題,很快定位。

對于一個大型的幾十個、幾百個微服務構成的微服務架構系統(tǒng),通常會遇到下面一些問題,比如:

  • 如何串聯(lián)整個調用鏈路,快速定位問題?
  • 如何理清各個微服務之間的依賴關系?
  • 如何進行各個微服務接口的性能分折?
  • 如何跟蹤整個業(yè)務流程的調用處理順序?

鏈路追蹤組件有:

  • Dapper(Google)
  • Zipkin(Twitter)
  • Eagleeye(Alibaba)
  • SkyWalking(Apache)

Spring Cloud Sleuth為Spring Cloud提供了分布式跟蹤的解決方案,它大量借用了Google Dapper、Twitter Zipkin和Apache HTrace的設計,幫我們解決像上面提到的問題。Spring Cloud Sleuth可以追蹤10種類型的組件:async、Hystrix,messaging,WebSocket,rxjava,scheduling,Web(SpringMVC Controller,Servlet),WebClient(Spring RestTemplate)、Feign/OpenFegin、Zuul;

Spring Cloud Sleuth對于分布式鏈路的跟蹤僅僅是生成一些數(shù)據(jù),這些數(shù)據(jù)不便于人類閱讀,所以我們一般把這種跟蹤數(shù)據(jù)上傳給Zipkin Server,由Zipkin通過UI頁面統(tǒng)一進行數(shù)據(jù)的展示。


2.2.基本術語

官方文檔:https://docs.spring.io/spring-cloud-sleuth/docs/3.0.1/reference/htmlsingle/

  • Span(跨度):基本工作單元,發(fā)送一個遠程調度任務就會產生一個Span,Span是一個64位ID唯一標識,Trace是用另一個64位ID唯一標識,Span還有其他數(shù)據(jù)信息,比如摘要,時間戳時間,Span的ID,及進度ID
  • Trace(跟蹤):一系列Span組成的一個樹狀結構。請求一個微服務系統(tǒng)的API接口,這個API接口,需要調用多個微服務,調用每個微服務都會產生一個新的Span,所有由這個請求產生的Span組成了這個Trace。
  • Annotation(標注):用來及時記錄一個事件,一些核心注解用來定義一個請求的開始和結束,這些注解包括以下:
    • cs: Client Sent,客戶端發(fā)送一個請求,這個注解描述了這個Span的開始
    • sr:Server Received,服務器獲得請求并準備開始處理,如果將其sr減去cs時間戳,便可得到網(wǎng)絡傳輸時間
    • ss:Server Sent,服務端發(fā)送響應,該注解表明請求處理的完成(當請求返回客戶端),如果ss的時間戳減去sr時間戳,就可以得到服務器請求的時間
    • cr:Client Received,客戶端接收響應,此時Span的結束,如果cr時間戳減去cs時間戳,就可以得到整個請求所消耗的時間

2.3.Zipkin架構

2.3.1.架構概述

追蹤器駐留在你的應用程序里,并且記錄發(fā)生操作的時間和元數(shù)據(jù)。他們經(jīng)常裝配在庫上,所以對用戶來說是透明的。舉個例子,一個裝配過的 Web 服務器,會在接收請求和發(fā)送響應進行記錄。收集的追蹤數(shù)據(jù)叫做 Span(跨度)。

生產環(huán)境中的裝配器應該是安全并且低負載的。為此,帶內(in-band)只傳輸 ID,并且告訴接收器仍有一個追蹤在處理。完成的跨度在帶外(out-of-band)匯報給 Zipkin,類似于應用程序異步匯報指標一樣。

舉個例子,當追蹤一個操作的時候,該操作對外發(fā)送了一個 HTTP 請求,那么,為了傳輸 ID 就會添加一些額外的頭部信息。頭部信息并不是用于發(fā)送像是操作明這樣的詳細信息的。

裝配應用中用于向 Zipkin 發(fā)送數(shù)據(jù)的組件叫做 Reporter。Reporter 通過 Transport 發(fā)送追蹤數(shù)據(jù)到Zipkin 的 Collector,Collector 持久化數(shù)據(jù)到 Storage 中。之后,API 從 Storage 中查詢數(shù)據(jù)提供給 UI。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java
其中左邊部分代表了客戶端分別為:

  • InstrumentedClient:使用了Zipkin客戶端工具的服務調用方
  • InstrumentedServer:使用了Zipkin客戶端工具的服務提供方
  • Non-InstrumentedServer:未使用Trace工具的服務提供方,當然還可能存在未使用工具的調用方
  • 總結:一個調用鏈路是貫穿InstrumentedClient->InstrumentedServer的,每經(jīng)過一個服務都會以Span的形式通過Transport把經(jīng)過自身的請求上報的Zipkin服務端中

右邊線框內代表了Zipkin的服務端,其中各組件的功能如下:

  • UI:提供web頁面,用來展示Zipkin中的調用鏈和系統(tǒng)依賴關系等
  • Collector:對各個客戶端暴露,負責接受調用數(shù)據(jù),支持HTTP、MQ等
  • Storage:負責與各個存儲適配后存儲數(shù)據(jù),支持內存,MySQL,Cassandra,ES等
  • API:為web界面提供查詢存儲中的數(shù)據(jù)的接口

2.3.2.流程分析

正如概述中所提到的,標識符是在帶內發(fā)送的,細節(jié)以帶外形式發(fā)送到Zipkin。在這兩種情況下,跟蹤工具都負責創(chuàng)建有效的痕跡并正確渲染它們。例如,跟蹤器可確保它在帶內(下游)和帶外(向Zipkin異步)發(fā)送的數(shù)據(jù)之間進行平衡。

以下是用戶代碼調用資源 / foo 的 http 跟蹤示例序列。這會導致一個跨度,在用戶代碼收到http響應后異步發(fā)送到Zipkin。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

跟蹤檢測報告異步跨越,以防止與跟蹤系統(tǒng)相關的延遲或故障延遲或破壞用戶代碼。

2.3.實現(xiàn)原理

服務調用依賴關系如下:

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java
下圖表示請求鏈路,一條鏈路通過Trace Id唯一標識,Span標識發(fā)起的請求信息,各個Span通過parent id 關聯(lián)起來。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

上圖簡化:
如 服務1的Span id=A parent id=null,
服務2的Span id=B parent id=A,
服務3的Span id=C parent id=B
如此形成一條或多條鏈路,由于Trace Id是唯一標識,所以可以清楚的知道每個服務請求的鏈路。

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

2.4.整合Sleuth+Zipkin

通過Sleuth產生的調用鏈監(jiān)控信息,可以得知微服務之間的調用鏈路,但監(jiān)控信息只輸出到控制臺不方便查看。我們需要一個圖形化的工具Zipkin。Zipkin是Twitter開源的分布式跟蹤系統(tǒng),主要用來收集系統(tǒng)的時序數(shù)據(jù),從而追蹤系統(tǒng)的調用問題。

官網(wǎng):https://zipkin.io/

2.4.1.docker安裝Zipkin服務器

docker run -d -p 9411:9411 openzipkin/zipkin


2.4.2.導入依賴

gmall-common

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

注意:引入zipkin后,就不需要在單獨引入sleuth,默認依賴了sleuth

2.4.3.zipkin配置

所有微服務都需要配置

spring:
  application:
    name: gmall-seckill
  zipkin:
    # zipkin服務器地址
    base-url: http://192.168.139.10:9411
	# 關閉服務發(fā)現(xiàn),否則Spring Cloud會把zipkin的url當做服務名稱
	discovery-client-enabled: false
	sender:
	  # 設置使用http的方式傳輸數(shù)據(jù)
	  type: web
  sleuth:
    sampler:
      # 設置抽樣采集率為100%,默認為0.1,即10%
	  probability: 1

2.4.4.Zipkin控制臺

訪問核心鏈路:首頁 -> 登錄 -> 商品檢索 -> 商品詳情 -> 加入購物車 -> 結算確認訂單 -> 提交訂單 -> 支付 -> 訂單列表

進入zipkin控制臺:http://192.168.139.10:9411

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

默認是查詢所有,點擊 + 號,可以根據(jù)服務名、持續(xù)時間等進行篩選

2.5.Zipkin數(shù)據(jù)持久化

Zipkin默認是將監(jiān)控數(shù)據(jù)存儲在內存的,如果Zipkin掛掉或重啟,那么監(jiān)控數(shù)據(jù)就會丟失。所有如果想要搭建生成可用的Zipkin,就需要實現(xiàn)監(jiān)控數(shù)據(jù)的持久化。而想要實現(xiàn)數(shù)據(jù)數(shù)據(jù)化,自然就是得將數(shù)據(jù)存儲至數(shù)據(jù)庫。Zipkin支持將數(shù)據(jù)存儲至:

  • In-Memory(默認)
  • MySQL
  • ElasticSearch
  • Cassandra

Zipkin數(shù)據(jù)持久化官方文檔:https://github.com/openzipkin/zipkin#storage-component

Zipkin支持的這幾種存儲方式中,內存顯示是不適用于生產的,這一點開始也說了。而使用MySQL的話,當數(shù)據(jù)量大時,查詢較為緩慢,也不建議使用。Twitter官方使用的是Cassandra作為Zipkin的存儲數(shù)據(jù)庫,但國內大規(guī)模用Cassandra的公司較少,而且Cassandra相關文檔也不多。綜上,故采用ElasticSearch是個比較好的選擇。

2.5.1.elasticsearch-storage

https://github.com/openzipkin/zipkin/tree/master/zipkin-server#elasticsearch-storage

docker方式

docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.139.10:9200 openzipkin/zipkin-dependencies

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

2.6.Zipkin界面分析

2.6.1.調用鏈路分析

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

2.6.2.依賴關系分析

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java

第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤,谷粒商城,java文章來源地址http://www.zghlxwxcb.cn/news/detail-615312.html

到了這里,關于第27天-熔斷,降級,限流,網(wǎng)關流控,服務鏈路追蹤的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 熔斷降級與限流在開源SpringBoot/SpringCloud微服務框架的最佳實踐

    熔斷降級與限流在開源SpringBoot/SpringCloud微服務框架的最佳實踐

    前期內容導讀: Java開源RSA/AES/SHA1/PGP/SM2/SM3/SM4加密算法介紹 Java開源AES/SM4/3DES對稱加密算法介紹及其實現(xiàn) Java開源AES/SM4/3DES對稱加密算法的驗證說明 Java開源RSA/SM2非對稱加密算法對比介紹 Java開源RSA非對稱加密算法實現(xiàn) Java開源SM2非對稱加密算法實現(xiàn) Java開源接口微服務代碼框架

    2024年02月12日
    瀏覽(25)
  • 聊一聊服務治理三板斧:限流、熔斷、降級和go-sentinel的實現(xiàn)

    聊一聊服務治理三板斧:限流、熔斷、降級和go-sentinel的實現(xiàn)

    我們知道,對于一個項目之初,我們不可能上來就按幾千的并發(fā)去配置,為什么?兩個方面,第一個是成本高。第二個是維護難度大。即便是天貓?zhí)詫氝@種,也是采用的動態(tài)擴容的方式來應對雙十一。那么一個項目如何應對突然的高并發(fā),我們有哪些常用的措施和處理呢?我

    2024年01月19日
    瀏覽(28)
  • 微服務 - Nginx網(wǎng)關 · 進程機制 · 限流熔斷 · 性能優(yōu)化 · 動態(tài)負載 · 高可用

    微服務 - Nginx網(wǎng)關 · 進程機制 · 限流熔斷 · 性能優(yōu)化 · 動態(tài)負載 · 高可用

    系列目錄 微服務 - 概念 · 應用 · 架構 · 通訊 · 授權 · 跨域 · 限流 微服務 - Consul集群化 · 服務注冊 · 健康檢測 · 服務發(fā)現(xiàn) · 負載均衡 微服務 - Redis緩存 · 數(shù)據(jù)結構 · 持久化 · 分布式 · 高并發(fā) 微服務 - Nginx網(wǎng)關 · 進程機制 · 限流熔斷 · 性能優(yōu)化 · 動態(tài)負載 · 高可用

    2024年02月02日
    瀏覽(29)
  • Sentinel 降級、限流、熔斷

    Sentinel 降級、限流、熔斷

    在現(xiàn)代分布式系統(tǒng)中,如何有效地保護系統(tǒng)免受突發(fā)流量和故障的影響,是每個開發(fā)人員和架構師都需要思考的重要問題。在這樣的背景下,Sentinel作為一個強大的系統(tǒng)保護和控制組件,為我們提供了降級、限流、熔斷等多種策略,幫助我們更好地保障系統(tǒng)的穩(wěn)定性和可用性

    2024年01月24日
    瀏覽(24)
  • [分布式]-限流熔斷降級

    限流,顧名思義,限制系統(tǒng)的流量,防止用戶過多地訪問系統(tǒng)的資源,甚至是惡意地訪問,比如惡意爬蟲,DDOS 等;同時也防止系統(tǒng)承載過多流量而崩潰,從而對系統(tǒng)運行資源做到一個有效的管理 在分布式系統(tǒng)中,節(jié)點之間需要相互調用,如果調用鏈中一個節(jié)點宕機,將會導

    2024年02月09日
    瀏覽(37)
  • 高可用三大利器 — 熔斷、限流和降級

    高可用三大利器 — 熔斷、限流和降級

    近年來,各大廠Google、微軟、阿里、騰訊等都在提高可用的概念。高可用(High Availability,簡稱HA)是指系統(tǒng)或服務在遭受故障或異常情況時仍能持續(xù)提供穩(wěn)定和可靠的運行能力。 在武俠世界里,“利器”通常指的是武器中的上乘、出色之物;武器對于武者的重要性不言而喻

    2024年02月15日
    瀏覽(30)
  • 熔斷、限流、降級 —— SpringCloud Alibaba Sentinel

    熔斷、限流、降級 —— SpringCloud Alibaba Sentinel

    Sentinel 是阿里中間件團隊開源的,面向分布式服務架構的高可用流量防護組件,主要以流量為切入點,從限流、流量整形、熔斷降級、系統(tǒng)負載保護、熱點防護等多個維度來幫助開發(fā)者保障微服務的穩(wěn)定性 Sentinel 提供了兩個服務組件: Sentinel 用來實現(xiàn)微服務系統(tǒng)中服務熔斷

    2024年02月08日
    瀏覽(56)
  • 高并發(fā)整體可用性:一文詳解降級、限流和熔斷

    高并發(fā)整體可用性:一文詳解降級、限流和熔斷

    ? 水滿則溢,月盈則虧,任何事物都不可能無限制的發(fā)展,我們的系統(tǒng)服務能力也一樣。 ? 當隨著流量的不斷增長,達到或超過服務本身的可承載范圍,系統(tǒng)服務的自我保護機制的建立就顯得很重要了。 ? 本文希望可以用最通俗的解釋和貼切的實例來帶大家了解什么是限流

    2024年02月11日
    瀏覽(24)
  • SpringMvc集成開源流量監(jiān)控、限流、熔斷降級、負載保護組件Sentinel

    前言:作者查閱了Sentinel官網(wǎng)、51CTO、CSDN、碼農家園、博客園等很多技術文章都沒有很準確的springmvc集成Sentinel的示例,因此整理了本文,主要介紹SpringMvc集成Sentinel 隨著微服務的流行,服務和服務之間的穩(wěn)定性變得越來越重要。Sentinel 是面向分布式、多語言異構化服務架構的

    2024年02月05日
    瀏覽(23)
  • 【架構詳細解讀】緩存、限流、降級和熔斷、負載均衡、災備和故障轉移——

    目錄 ?架構基礎 # 如何理解架構的演進? # 如何理解架構的服務化趨勢? # 架構中有哪些技術點? ??緩存 # 談談架構中的緩存應用? # 在開發(fā)中緩存具體如何實現(xiàn)? # 使用緩存的經(jīng)驗? ?限流 # 什么是限流?三種限流的算法? # 限流令牌桶和漏桶對比? # 在單機情況下如何

    2024年01月16日
    瀏覽(62)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包