Files
spring-cloud-sleuth/benchmarks
Adrian Cole be5fa04118 Updates to latest Sampling infrastructure (#1456)
* Updates to latest Sampling infrastructure

Brave recently switched to an interface model for higher level sampling
like HTTP. So, `HttpSampler` -> `SamplingFunction<HttpRequest>`. Don't
worry because `HttpSampler` was retrofitted as a `SamplingFunction`.

This change moves to the higher interface, avoiding deprecated methods
and such. More interestingly, this weaves in support for `RpcTracing`,
which *finally* introduces RPC sampling the same way. Specifically, this
adds `SamplingFunction<RpcRequest>` under the same conventions as HTTP.

Most immediately, this can be used here in gRPC and Dubbo, as
autoconfiguration exists. It also works with any autoconfiguration that
isn't here, such as Armeria.

Ex. Here's a sampler that traces 100 "GetUserToken" requests per second. This
doesn't start new traces for requests to the health check service. Other
requests will use a global rate provided by the tracing component.

```java
import static brave.rpc.RpcRequestMatchers.methodEquals;
import static brave.rpc.RpcRequestMatchers.serviceEquals;
import static brave.sampler.Matchers.and;

--snip--
@Bean(name = ServerSampler.NAME)
SamplerFunction<RpcRequest> myRpcSampler() {
  Matcher<RpcRequest> userAuth = and(
      serviceEquals("users.UserService"),
      methodEquals("GetUserToken")
  );
  return RpcRuleSampler.newBuilder()
      .putRule(serviceEquals("grpc.health.v1.Health"), Sampler.NEVER_SAMPLE)
      .putRule(userAuth, RateLimitingSampler.create(100)).build();
}
```
2019-10-03 12:21:56 +02:00
..
2019-03-21 13:16:37 -05:00
2019-02-07 16:41:59 +01:00

== Spring Cloud Sleuth Benchmarks

This module can run benchmarks using the following tools

- JMH
- JMeter

=== How to run it?

In the root folder inside the `scripts` folder there are the following benchmark scripts:

- runJmhBenchmark.sh
- runJmeterBenchmarks.sh

Just execute them from the root folder like this:

[source]
----
./scripts/runJmeterBenchmarks.sh
./scripts/runJmhBenchmarks.sh
----

=== How do they work?

For JMH we're building a shaded JAR file that is next executed.

For JMeter we're running two applications, one with Sleuth, one without with Spring Boot
Maven Plugin. Next a Maven JMeter plugin is executed that loads the `*.jmx` files, starts
JMeter and prints out the results. At the end Spring Boot Maven Plugin stops the applications.

=== What are we testing?

For now we're testing the performance impact of the following:

- our custom Trace HTTP filter
- instrumentation of controllers - `@Callable` returning and the sync one
- instrumentation of RestTemplate
- `@Async` annotated methods