Как избежать больших накладных расходов на интеграцию Sleuth Slf4J - PullRequest
0 голосов
/ 06 ноября 2018

В нашем приложении Spring Boot (2.0.4.RELEASE) мы используем Zipkin для интеграции распределенной трассировки.

При создании интеграции вручную с частотой дискретизации 10%, что означает @Configuration, например:

@Configuration
public class ZipkinConfiguration {
    @Value("${grpc.zipkin.endpoint:}")
    private String zipkinEndpoint;
    @Bean
    public SpanCustomizer currentSpanCustomizer(Tracing tracing) {
        return CurrentSpanCustomizer.create(tracing);
    }
    @Bean
    public Tracing tracing(@Value("${spring.application.name}") String serviceName) {
        return Tracing.newBuilder().localServiceName(serviceName).spanReporter(spanReporter()).build();
    }

    private Reporter<Span> spanReporter() {
        return AsyncReporter.create(sender());
    }

    private Sender sender() {
        return OkHttpSender.create(zipkinEndpoint);
    }
}

наше приложение имеет производительность 50 процентилей около 19 мс и 99,9 процентиля около 90 мс при скорости около 10 запросов в секунду.

При интеграции Sleuth 2.0.2.RELEASE вместо этого, как это в gradle:

compile "org.springframework.cloud:spring-cloud-starter-sleuth:2.0.2.RELEASE"
compile "org.springframework.cloud:spring-cloud-sleuth-zipkin:2.0.2.RELEASE"

производительность резко падает до p50 49 мс и p999 120 мс.

Я пытался отключить различные части интеграции Sleuth (spring.sleuth.async.enabled, spring.sleuth.reactor.enabled и т. Д.).

Отключение всех этих интеграций повышает производительность до p50: 25 мс, p999: 103 мс. Сатут добавляет примерно 15-25% накладных расходов.

Оказывается, единственное, что оказывает значительное влияние, - это установка spring.sleuth.log.slf4j.enabled в false. Если все остальные интеграции включены, но это отключено, производительность остается в пределах указанных выше служебных данных Sleuth, хотя ничего не регистрируется.

Итак, мой вопрос: Есть ли способ избежать издержек от Sleuth (по сравнению с «ручной» трассировкой) и особенно от интеграции SLF4J?

1 Ответ

0 голосов
/ 07 ноября 2018

Возможность отключить интеграцию с Slf4j, как вы упомянули. Когда создается новый диапазон / область действия, мы проходим через Slf4j, чтобы поместить данные в MDC, и, к сожалению, это требует времени. Отключение этого сохранит его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...