java B2B2C Springboot多租戶電子商城系統-分佈式服務跟蹤(抽樣收集)

經過Trace ID和Span ID已經實現了對分佈式系統中的請求跟蹤,而這些記錄的跟蹤信息最終會被分析系統收集起來,並用來實現對分佈式系統的監控和分析功能,好比:預警延遲過長的請求鏈路、查詢請求鏈路的調用明細等。此時,咱們在對接分析系統時就會碰到一個問題:分析系統在收集跟蹤信息的時候,須要收集多少許的跟蹤信息才合適呢?html

須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼:壹零叄八柒柒肆六二六java

理論上來講,咱們收集的跟蹤信息越多就能夠更好的反映出系統的實際運行狀況,並給出更精準的預警和分析,可是在高併發的分佈式系統運行時,大量的請求調用會產生海量的跟蹤日誌信息,若是咱們收集過多的跟蹤信息將會對咱們整個分佈式系統的性能形成必定的影響,同時保存大量的日誌信息也須要很多的存儲開銷。因此,在Sleuth中採用了抽象收集的方式來爲跟蹤信息打上收集標記,也就是咱們以前在日誌信息中看到的第四個boolean類型的值,它表明了該信息是否要被後續的跟蹤信息收集器獲取和存儲。spring

在Sleuth中的抽樣收集策略是經過Sampler接口實現的,它的定義以下:bash

public interface Sampler {
    /**
     * @return true if the span is not null and should be exported to the tracing system
    */
    boolean isSampled(Span span);
}
複製代碼

經過實現isSampled方法,Spring Cloud Sleuth會在產生跟蹤信息的時候調用它來爲跟蹤信息生成是否要被收集的標誌。須要注意的是,即便isSampled返回了false,它僅表明該跟蹤信息不被輸出到後續對接的遠程分析系統(好比:Zipkin),對於請求的跟蹤活動依然會進行,因此咱們在日誌中仍是能看到收集標識爲false的記錄。mybatis

默認狀況下,Sleuth會使用PercentageBasedSampler實現的抽樣策略,以請求百分比的方式配置和收集跟蹤信息,咱們能夠經過在application.properties中配置下面的參數對其百分比值進行設置,它的默認值爲0.1,表明收集10%的請求跟蹤信息。併發

spring.sleuth.sampler.percentage=0.1mvc

在開發調試期間,一般會收集所有跟蹤信息輸出到遠程倉庫,咱們能夠將其值設置爲1,或者也能夠經過建立AlwaysSampler的Bean(它實現的isSampled方法始終返回true)來覆蓋默認的PercentageBasedSampler策略,好比:app

@Bean
public AlwaysSampler defaultSampler() {
    return new AlwaysSampler();
}
複製代碼

在實際使用時,經過與Span對象中存儲信息的配合,咱們能夠根據實際狀況作出更貼近需求的抽樣策略,好比實現一個僅對包含指定Tag的抽樣策略:分佈式

public class TagSampler implements Sampler {

    private String tag;

    public TagSampler(String tag) {
        this.tag = tag;
    }

    @Override
    public boolean isSampled(Span span) {
        return span.tags().get(tag) != null;
    }
}
複製代碼

因爲跟蹤日誌信息的數據價值每每僅在最近的一段時間內很是有用,好比:一週。那麼咱們在設計抽樣策略時,主要考慮在不對系統形成明顯性能影響的狀況下,以在日誌保留時間窗內充分利用存儲空間的原則來實現抽樣策略。ide

java B2B2C springmvc mybatis多租戶電子商城系統

相關文章
相關標籤/搜索